MySQLの導入

「MySQL」とは一般的にインストールされているオープンソースデータベース管理システムです。

この導入手順では、Ubuntu Server 20.04にMySQLをインストールし、データベースを管理できるようにします。

導入手順

  1. 以前にMySQLをインストールしていて真っ新な状態で始めたい場合は以下のコマンドで完全にアンインストールします。
sudo apt remove --purge mysql-server* mysql-common
sudo apt autoremove --purge
sudo rm -r /etc/mysql
sudo rm -r /var/lib/mysql
  1. MySQLのパッケージをインストールします。
sudo apt update && sudo apt install -y mysql-server
  1. セキュリティを高める設定を開始します。
sudo mysql_secure_installation

初めのVALIDATE PASSWORDを設定するプロンプトではYを入力します。

パスワードの複雑さの設定では0,1,2の中から自分好みのものを選んでください。

MySQLのrootユーザー(管理者)のパスワード設定を求められるため、パスワードを設定します。

・このパスワードでいいですか?と聞かれるのでYを入力します。

・残りの設定は全部Yでいいと思います。

  1. 全ての権限を持っているrootユーザーは普段使いたくありません。新しいユーザーを作成するため、MySQLのプロンプトを起動します。
sudo mysql

CREATE USERでユーザー作成をします。usernameを任意のユーザー名に、passwordを任意のパスワードに代入するのを忘れないようにしてください。localhostにすることで全てのホストから接続できますが、できるだけ接続可能なホストを制限した方がよいです。

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

# 例
CREATE USER 'guresql'@'192.168.0.35' IDENTIFIED BY 'Test12345!';

作成したユーザーに権限を与えます。

databaseに権限を与えるデータベースを指定します。tableにデータベースの中で権限を与えるテーブルを指定できます。全データベースの権限を付与する場合はアスタリスクで設定できます(*.*)。

ALL PRIVILEGESでデータベースに対して全ての権限を与えます。実行可能な処理を限定する場合はSELECT, INSERTのようにカンマで実行可能な処理をつなげて下さい。

WITH GRANT OPTIONを付けることにより、このユーザーが他のユーザーに権限を付与できるようになります。

GRANT ALL PRIVILEGES ON database.table TO 'username'@'localhost' WITH GRANT OPTION;

# 例
GRANT ALL PRIVILEGES ON *.* TO 'guresql'@'192.168.0.35';

最後にキャッシュをクリアしておき、MySQLのプロンプト画面を閉じます。

FLUSH PRIVILEGES;
exit
  1. 外部から接続できるようにするため、MySQLのポートを開放します。UFWが既にインストールされていない場合はsudo apt install ufwでインストールします。
sudo ufw allow 3306
  1. 標準だとMySQLはローカル(127.0.0.1またはlocalhost)からのアクセスしか許可していないため、外部ネットワークからでもアクセスできるように変更します。まずは設定ファイルを開きます。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address をコメントアウトして編集画面を閉じます。

# bind-address = 127.0.0.1

MySQLを再起動します。

sudo systemctl stop mysql
sudo systemctl start mysql

※もしエラーで起動できなかった場合は、下記のコマンドでディレクトリ権限を修正してみてください。

sudo systemctl stop mysql
sudo mv /var/lib/mysql /tmp/mysql
sudo mkdir /var/lib/mysql
sudo chown -R mysql:mysql /var/lib/mysql
sudo mysqld --initialize
sudo systemctl start mysql
  1. 外部ネットワークからもログインできることを確認します。
mysql -h host -P 3306 -u username -p

# 例
mysql -h 192.168.0.99 -P 3306 -u guresql -p