はじめに
こんにちは。
今回はインフラ学習の一環として、Ubuntu環境上で MySQL を使ったDBシステム構築のハンズオンを行いました。
これまで監視サーバ構築やウイルス対策監視の学習を進めてきましたが、今回はその次のステップとして、データベースの基本的な構築作業を一通り体験してみました。
単にDBを作るだけではなく、
- データベースの作成
- ユーザー作成と権限付与
- テーブル作成
- データ登録と参照確認
- バックアップ取得
- 復元確認
まで実施できたので、その流れを学習記録としてまとめます。
検証環境
- OS:Ubuntu
- サーバ:さくらのVPS
- DB:MySQL 8系
※ 個人学習用の環境で実施しています。
※ 記事内では個人情報や接続情報に関わる内容は一部省略しています。
まずはMySQLの状態を確認
最初に、MySQLがすでにインストールされているかを確認しました。
mysql --version
sudo systemctl status mysql
確認したところ、MySQL はすでに導入済みで、サービスも起動していました。
その後、root権限でログインできることも確認しました。
sudo mysql
さらに、既存のデータベース一覧を確認すると、システム用のDBに加えて監視用途で使っているDBも存在していたため、今回はそれらには触れず、学習用の新規DBを作成して進めることにしました。
学習用データベースを作成
まずは練習用のデータベースを新規作成しました。
CREATE DATABASE handson_db;
SHOW DATABASES;
これで handson_db が作成され、一覧にも表示されることを確認できました。
既存環境を壊さないように、学習用の名前を分けて進めるのは大事だと改めて感じました。
ユーザー作成と権限付与
続いて、学習用DB専用のユーザーを作成し、権限を付与しました。
CREATE USER 'dbuser'@'localhost' IDENTIFIED BY '任意のパスワード';
GRANT ALL PRIVILEGES ON handson_db.* TO 'dbuser'@'localhost';
FLUSH PRIVILEGES;
作成後は、ユーザー一覧と権限内容も確認しました。
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'dbuser'@'localhost';
この作業を通して、単にDBを作るだけでなく、
「誰に、どのDBまで、どんな権限を与えるか」
を意識することが大事だと実感しました。
作成したユーザーで接続確認
次に、今作成したユーザーで実際にログインできるかを確認しました。
mysql -u dbuser -p
接続後は、使えるデータベースを確認し、対象DBに切り替えました。
SHOW DATABASES;
USE handson_db;
SELECT DATABASE();
ここで handson_db が正しく選択されていることを確認できたので、
ユーザー作成と権限付与が正常に機能していることが分かりました。
また、見えるデータベースが制限されていたため、権限設定が意図どおり効いていることも確認できました。
テーブルを作成してデータを登録
次は、実際にテーブルを作成してデータを入れてみました。
CREATE TABLE members (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
作成後はテーブル構造を確認しました。
SHOW TABLES;
DESCRIBE members;
その後、テストデータを登録しました。
INSERT INTO members (name) VALUES ('Suguru');
INSERT INTO members (name) VALUES ('Bell');
最後に、登録したデータを参照して確認しました。
SELECT * FROM members;
実際に2件のデータが表示されたときは、
「ちゃんとDBとして使える状態を作れた」という感覚があり、かなり手応えがありました。
バックアップ取得で少しつまずいた
次に、mysqldump を使ってバックアップを取得しました。
最初は以下のコマンドを実行しました。
mysqldump -u dbuser -p handson_db > ~/db_backup/handson_db_$(date +%F).sql
ただ、この時点では権限不足のエラーが出ました。
内容としては、バックアップ実行時に必要となる一部権限が足りず、そのままではダンプを取得できないというものでした。
そこで今回は、次のオプションを追加して対応しました。
mysqldump --no-tablespaces -u dbuser -p handson_db > ~/db_backup/handson_db_$(date +%F).sql
この方法で無事にバックアップファイルを取得できました。
ファイルの存在確認と中身の冒頭確認も行いました。
ls -l ~/db_backup
head -n 20 ~/db_backup/handson_db_$(date +%F).sql
エラーが出たときは焦りましたが、
原因を確認して別の方法で解決できたのは、むしろ良い学びになりました。
別データベースへ復元してみる
バックアップが取得できたので、最後に別名のデータベースへ復元確認を行いました。
まずは復元先のデータベースを作成します。
CREATE DATABASE restore_test_db;
その後、必要な権限を付与してから、バックアップファイルを流し込みました。
mysql -u dbuser -p restore_test_db < ~/db_backup/handson_db_$(date +%F).sql
復元後は、ちゃんとテーブルとデータが戻っているかを確認しました。
USE restore_test_db;
SHOW TABLES;
SELECT * FROM members;
結果として、members テーブルも、登録していた2件のデータも問題なく復元されていました。
ここまで確認できたことで、
- 作成
- 利用
- 保存
- 復元
という一連の流れをひと通り体験することができました。
今回やってみて分かったこと
今回の学習で特に印象に残ったのは、
データベース構築は単にインストールして終わりではない、ということです。
実際には、
- DBを作る
- ユーザーを作る
- 権限を設定する
- 接続確認をする
- テーブルを作る
- データを入れる
- バックアップを取る
- 復元できることを確認する
というところまでやって初めて、
「使える状態を作った」と言えるのだと感じました。
また、途中で権限エラーが出たことで、
実務でもこういう“想定どおりに進まない場面”に対応する力が大切なのだろうと思いました。
まとめ
今回は Ubuntu 上の MySQL 環境で、DBシステム構築の基本的な流れを一通り実践しました。
実施した内容は以下の通りです。
- MySQL サービス状態確認
- 新規データベース作成
- ユーザー作成
- 権限付与
- 接続確認
- テーブル作成
- データ登録・参照確認
- バックアップ取得
- 別データベースへの復元確認
インフラ学習というと監視やサーバ構築に意識が向きがちですが、DBまわりもとても重要だと改めて感じました。
今後は、
- MySQL の設定ファイル確認
- ログ確認
- 自動バックアップ
- cron による定期実行
などにも広げていきたいと思います。
所感
今回は「DBを作る」だけで終わらず、バックアップと復元まで確認できたのが大きな収穫でした。
特に、手を動かしてみることで、
ユーザー権限やバックアップ時の注意点など、実際に試さないと分からないポイントが見えてきました。
少しずつですが、監視、ウイルス対策、DB構築と、インフラの学習範囲が横に広がってきている実感があります。
これからも一つずつ、
「やったことを自分の言葉で残す」ことを大切にしながら積み上げていきたいと思います。

