Sassyブログ

好きなことで暮らしを豊かにするブログ

ローカルでVagrant内にMySQLを立てて複数人で使用する方法

 

1.環境

Windows7 32bit
※今回はVagrantを起ち上げて、その中でMySQLを起動させて設定を行う。
※前提条件として、利用するユーザーはローカルDBと同一ネットワークにいること。
 
下記、2と3に関しては、私の別記事「FuelPHPのWeb開発環境をVagrantで構築する No.1」を参考にして、Vagrantのセットアップまで行っていましたらすでにインストール済みであります。
 
そのため、下記2と3に記載されている内容はMySQLの再インストール
 

2.MySQLのダウンロード

適当な場所に移動する。
※ここでは/home内にrepoフォルダを作成して、その中にダウンロードする。
 
$ cd /home
 
$ mkdir repo
 
$ cd repo
 
 
 

3.MySQLセットアップ

3-1.MySQLのインストール

/home/repo内(ダウンロードしたリポジトリがあるディレクトリ内)で下記のコマンドを叩く
$ yum -y install mysql-community-server
  
MySQLのバージョンが5.7がインストールされていることを確認する
$ mysqld --version
 
インストールされていれば以下の内容が出力される
mysqld  Ver 5.7.18 for Linux on x86_64 (MySQL Community Server (GPL))
 
 

3-2.MySQLのアンインストール

MySQLのインストール状況を確認する
$ rpm -qa | grep -i mysql
 
おそらく以下のMySQL関連のソフトをアンインストールすればよい
$ yum -y remove mysql-server
$ yum -y remove mysql
 
MySQLファイルの削除
$ rm -rf /var/lib/mysql/
 
 

3-3.MySQL自動起動設定

$ sudo systemctl enable mysqld.serivce
 
 

3-4.MySQLの起動

sudo systemctl start mysqld.service
 
 

3-5.MySQLの状態確認

sudo systemctl status mysqld.service
 
 

3-6.MySQLの停止

sudo systemctl stop mysqld.service
 

3-7.ログイン

MySQLへログインする
$ mysql -u root -p
 
もしかしたら以下のようなエラーメッセージが表示されることがある。
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
 
その場合は以下の手順を実施する。
 
一旦停止させる
$ systemctl stop mysqld
 
権限テーブルの使用をスキップする
$ systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
 
再度起動
$ systemctl start mysqld
 
上記のエラーが表示されないことを確認する。
 
ただし、このままではrootパスワードが不明であるため、以下の手順で初期パスワードを確認する
 
【注意】
MySQL5.7 では、rootパスワードはランダムな文字のものが初期状態で設定される。
パスワードはインストール終了後に /var/log/mysqld.log に出力される。
 
設定時のパスワード確認
$ sudo grep 'temporary password' /var/log/mysqld.log
 
 
上記コマンド実行後以下の内容を出力され初期パスワードが確認できる。
2017-04-26T16:20:03.471444Z 1 [Note] A temporary password is generated for root@localhost: ○○○○○○○○○○○○
 
初期パスワードを使用して、ログインできることを確認する。
 
 

3-8.初期パスワード変更

MySQLログイン後
 
データベースを選択する
$ use mysql
 
新しいパスワードを設定する
$ UPDATE user SET authentication_string=password('新規パスワード') WHERE user='root';
 
再設定したパスワードをMySQLへ反映させる
$ flush privileges;
 
ログアウトする
$ exit
 
再度ログインして設定したパスワードでログインできることを確認する
 
 

4.ユーザーを登録する

新規作成
$ create mysql.user '[ユーザー名]'@'[ホスト]' identified by 'test';
 
※ここで指定するホストはIPアドレスで、接続する側のIPアドレスを設定する。
 

4-1.パスワードポリシーエラーが発生した場合

ユーザー新規作成時にパスワードが要件を満たしていないよというエラーが発生する
mysql> create user 'saiki-y'@'localhost' identified by 'test';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
 
開発環境であまりガッチリパスワードを指定したくないので、ポリシーレベルを下げる
 
ポリシーレベルの確認
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)
 
パスワードポリシーがMIDIUMになっている
 
下記の表は、MySQLドキュメントから引用している。
ポリシー 実施されるテスト
0 または LOW 長さ
1 または MEDIUM 長さ。数値、小文字、大文字、および特殊文字
2 または STRONG 長さ。数値、小文字、大文字、および特殊文字。辞書ファイル
 
MIDIUMのままでは特殊文字も指定するのは面倒なので変更する。
あと長さも。
mysql> SET GLOBAL validate_password_length=4;
mysql> SET GLOBAL validate_password_policy=LOW;
 
変更されているか確認
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 4     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
 
再度実行!
mysql> create user 'saiki-y'@'localhost' identified by 'test';
Query OK, 0 rows affected (0.00 sec)
 
問題なくできた!
 

5.ユーザーに権限を与える

権限変更(全権限を与える場合)
$  grant all privileges on *.* to '[ユーザー名]'@'[ホスト]';
 
権限を確認する
$ show grants for '[ユーザー名]'@'[ホスト]';
 

6.ファイアーウォールの設定を行う

5.)まで完了して実際に別PCから接続しようとしてもはじかれると思うので、
ファイアーウォールの設定を確認し、必要であれば設定を行う。
 
設定方法については、ネットでも情報がたくさんあるため、ここでは割愛しておく。
 
ファイアーウォールの停止方法などは
私の別記事「[PHP]FuelPHPのWeb開発環境をVagrantで構築する No.1」でも紹介している。

7.接続確認

別PCからコマンドプロンプトを開き以下のコマンドを叩く
 
$ mysql -h [IPアドレス] -u test -p -P [port番号]
 
 
無事接続できていれば完了。http://qiita.com/RyochanUedasan/items/9a49309019475536d22a
 
以上