マーケットプレイスから構築したbitnami製ワードプレスにおいてmysqlはローカルからしかアクセスを受け付けておりません。そこで外部からもアクセスするために設定を行います。
これはAWSなどにも当てはまるようです。
bitnamiのワードプレスはセキュリティがしっかりしているということですかね。
まずはインスタンスにあるssh接続をして状態を確認します。
/opt/bitnami/mysql/に設定ファイルがあるので中身を見てみます。
vi /opt/bitnami/mysql/my.cnf
bind-address=127.0.0.1となっておりこれが原因でローカルからしかアクセスできないと確認できました。それでこのmy.cnfを編集して保存したいのですが読み取り専用になっているのでこれを書き込み可能にします。
ls -l /opt/bitnami/mysql/
ここでsshはユーザーbitnamiでログインしているのでコマンドの前にsudoをつけなければなりません。他ではいつもrootでログインしてたので忘れてました。
sudo chmod 666 /opt/bitnami/mysql/my.cnf
書き込みの権限を付与したら前述のファイルは上書きできるのでbind-address=127.0.0.1の部分を削除するか前に#をつけてコメント扱いにします。
保存したら再起動します。
sudo /opt/bitnami/ctlscript.sh restart mysql
上のコマンドにて次の表示がされれば反映成功です。
Unmonitored mysql
/opt/bitnami/mysql/scripts/ctl.sh : mysql stopped
/opt/bitnami/mysql/scripts/ctl.sh : mysql started at port 3306
Monitored mysql
次にmysqlにログインしてみます。
mysql -u root -p
ここで問題が発生。
World-writable config file ‘/opt/bitnami/mysql/my.cnf’ is ignored
正しいパスワード入力でも
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
がでて焦った。が、冷静になって直訳してみた。
「誰でも書き込み可能な設定ファイル「/opt/bitnami/mysql/my.cnf」は無視されます」
なので、
sudo chmod 644 /opt/bitnami/mysql/my.cnf
にて読み取り専用に戻さないといけなかった。
上記によりただしくmysqlにログインできた。
ちなみにmysqlのパスワードはgcpのvmインスタンスにあるカスタムメタデータ項目のbitnami-base-passwordがそれにあたります。
mysqlにログインしたらユーザーにリモートからでもアクセスができるように設定しましょう。
まずは状態を確認します。
ユーザーとデータベースの確認となります。
select User, Host from mysql.user;
show databases;
次にローカル以外からアクセスできるユーザーを追加します。
例はユーザーtestuserがパスワードtestpasswordで任意の場所からアクセスできる設定です。
そしてデータベースbitnami_wordpressに全権限を付与する。
ユーザー名などは大文字小文字の区別があるので注意しましょう。
CREATE USER 'TESTUSER'@'%' IDENTIFIED BY 'testpassword';
GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'%';
GRANT ALL PRIVILEGES ON bitnami_wordpress.* TO TESTUSER@'%';
FLUSH PRIVILEGES;
exitでmysqlを抜けます。
ブラウザでgcp画面を表示しインスタンスの編集を押し、ネットワークタグに「mysqlbitnami」を追加し、下にスクロールして保存します。
普通はOS自体でポート開放をするがGCPではこのやり方なのです。
これがわかるまで時間がかかった。
mysqlbitnamiという名前はなんでもOKです。
これが最後の設定になります。
VPCネットワークのファイアーウォールルールから新規に作成します。
ルールの名前などは自分のわかりやすい名前を入力し、ターゲットが「指定されたターゲットタグ」をターゲットタグに先ほどの「mysqlbitnami」を入力します。
また、指定したプロトコルとポートにはtcpの3306と入力し新規作成をします。
3306はmysqlが使用するポート番号。
これでポート開放作業も終わりました。
それでは実際に外部から接続できるか確認しましょう。
今回はwindows10のコマンドプロンプトを使用して接続できるか確認さえできればOKです。
telnet 外部アドレス 3306
外部アドレスはインスタンスにて確認できます。
他にはworkbenchで接続成功、またワードプレスのwp-config.phpにて外部のMySQLのデータベースの接続も確認しました。
コメント