どうも、ひろーちか(@hir0_chika)と申します。
この度、KUSANAGIのDBを外部DBサーバに移行しました。
既にQiitaに素晴らしい記事があったので、こちらを参照してやれば余裕でしょ!とか思ってたのですが、意外と苦労したので手順としてまとめることにしました。
目次
事前準備
DBサーバー追加
画面左側の「サーバー追加」から、
・タイプ:アプリケーションサーバー
・リージョン:東京
・サービス:DB
を設定してサーバを追加します。
自動バックアップはお好みで、ディスク容量は既存のDBサイズをベースに見積もってください。
私の場合は全然データが入ってないので20MBもありませんでした。よって10GBを選択。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | MariaDB [(none)]> SELECT -> table_schema, sum(data_length) /1024/1024 AS mb -> FROM -> information_schema.tables -> GROUP BY -> table_schema -> ORDER BY -> sum(data_length+index_length) DESC; +--------------------+-------------+ | table_schema | mb | +--------------------+-------------+ | kusanagihogehoge | 13.78125000 | | mysql | 0.58161354 | | information_schema | 0.00000000 | | performance_schema | 0.00000000 | +--------------------+-------------+ |
データベース作成
サーバーリストで作成したDBサーバを選択し、詳細画面でデータベースリスト横の「+データベース」ボタンを押します。
データベース名とネームタグを設定し「保存」ボタンを押すとデータベースが作成され、中に接続ポートやホスト名が確認できます。
phpMyAdminユーザー追加
ユーザーリスト横の「+ユーザー」ボタンを押します。
ユーザー種別「phpMyAdminユーザー」を選択し、ユーザー名とパスワードを入力します。
「保存」ボタンを押すとphpMyAdminユーザーが作成されるため、接続先データベースを設定します。
DBデータの流し込み
VPSからのエクスポート
VPS上で稼働中のmariaDBから、コマンドでdumpを取得します。dumpファイルとは、データベースの内容が全て書き込まれたテキストファイルのことです。
1 | [root@hoge ~]# mysqldump -u root -p [KUSANAGIで設定したデータベース名] > dump.sql |
コマンドを実行したら、カレントディレクトリにdump.sqlというファイルが出来ているので、TeraTermのSSH SCPなどを使い、ローカルにダウンロードします。
DBサーバへのインポート
Conohaのコントロールパネルにフォーカスを戻し、DBサーバ詳細画面のユーザーリスト → 先ほど作成したphpMyAdminユーザー → phpMyAdminのリンクを押します。
ログイン画面に遷移し、各項目を入力して「実行」ボタンを押します。
・サーバ:DBサーバの接続先ホスト名。グローバルの接続先ホスト名を入れる。
・ユーザ名:phpMyAdminユーザーの名前。
・パスワード:phpMyAdminユーザーのパスワード。
ログインできたら、画面左側から先ほど作成したデータベース名を選択します。
インポートタブをクリックし、「アップロードファイル」にVPSからダウンロードしたdumpファイルを選択。一番下の「実行」ボタンを押します。
dumpファイルに問題がなければ全てのデータがインポートされます。
ネットワーク設定
DBサーバにデータのコピーが完了したので、後はKUSANAGIが参照するDBを「ローカル→新DBサーバ」に向けてあげるだけ。
イージーモード・・・と思いきや、割とそうでもなかった。
グローバルネットワークでの接続が何故かできない件
まず最初にやったのは、wp-config.phpの書き換えです。
DB_NAME、DB_USER、DB_PASSWORDに新しい値をセットして、DB_HOSTにはグローバルの接続先ホスト名をセットして、保存!!
ブラウザでF5を押すと、ブログに「データベース接続確立エラー」の文字が表示されました。
即座に切り戻して、一応DB_HOSTにプライベートのやつを入れて試しても結果は同じだったので、グローバルレベルでの接続は諦めました。
プライベートネットワークを設定する
DBサーバー接続用ネットワークというものがあるらしいので、それを設定することにしました。
そもそもWebサーバとDBサーバがグローバルレベルでコネクション張ってる状態とか意味わかんないし。。セキュアじゃない。あと、プライベートネットワークの方が高速ですね。
DBを分離したのだから、今までよりもクエリの実行速度は普通に考えて遅くなるハズ(DBの処理にめちゃくちゃリソースを取られていた場合を除く)なので、そのボトルネックを解消できるという利点があります。
公式の設定マニュアルがあるのですが、KUSANAGIのベースとなっているCentOS 7の設定例がない!!!!!!
悲しみが深い。
DBサーバー接続用ネットワークを作成する
まず、プライベートネットワークの追加にあたってVPSを停止させておく必要があるので、shutdown -h nowなどで終了させてください。
次に、画面左側の「ネットワーク」→「プライベートネットワーク」を選択します。
「DBサーバー接続用ネットワーク」 → 「東京 リージョンネットワーク」を見ると、契約中VPSの一覧が出てくるので、KUSANAGIのVPSの接続状況を「接続する」に変更し、「保存」ボタンを押します。
「接続状況」の隣にIPアドレスが表示されます。これを後でVPSのプライベートIPアドレスに設定します。
確認したらVPSを起動します。
ネットワークの設定情報を確認する
VPSの詳細画面から「ネットワーク情報」を開き、「表示NIC」が「shared-*」となっているものを選択します。
表示されたIPアドレス、サブネットマスク、ゲートウェイの情報を、後で静的ルーティングに設定します。
VPSの設定を行う
まず、VPSにrootでコンソールログインします。
nmcli dev/conコマンドを発行し、ネットワークデバイス/接続の一覧を表示します。
1 2 3 4 5 6 7 8 9 10 | [root@hoge ~]# nmcli dev デバイス タイプ 状態 接続 eth0 ethernet 接続済み eth0 eth1 ethernet 接続中(IP 設定を取得中) 有線接続 1 lo loopback 管理無し -- [root@hoge ~]# nmcli con 名前 UUID タイプ デバイス eth0 xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx 802-3-ethernet eth0 有線接続 1 xxxxxxxx-yyyy-xxxx-yyyy-xxxxxxxxxxxx 802-3-ethernet -- |
上記の「eth1」というデバイスと、「有線接続 1」という接続が、今回追加されたものです。
nmcli con modコマンドで、接続IDを”有線接続 1″からeth1に変更します。
1 | [root@hoge ~]# nmcli con mod "有線接続 1" connection.id eth1 |
eth1の接続IDに対して、インタフェースeth1を紐付けます。
1 | [root@hoge ~]# nmcli con mod "eth1" connection.interface-name eth1 |
接続eth1の情報を変更します。先ほどの「shared-*」で表示されたIPアドレスとサブネットマスクを設定します。(「/23」は「255.255.254.0」と同義です)
1 2 3 4 5 | [root@hoge ~]# nmcli con mod eth1 \ > ipv4.method manual \ > ipv4.address "172.21.XXX.YY/23" \ > connection.autoconnect "yes" \ > ipv6.method ignore |
接続eth1を再起動します。
1 2 3 | [root@hoge ~]# nmcli con down eth1 ; nmcli con up eth1 接続 'eth1' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/11) 接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/12) |
このままだとIPしか振っておらず東京リージョンに到達できないので、東京リージョンとの橋渡し役になってくれるゲートウェイへの静的ルーティングを設定します。
右側の方に「shared-*」のゲートウェイを入力します。
1 | [root@hoge ~]# nmcli connection modify "eth1" +ipv4.routes "172.21.74.0/23 172.21.138.1" |
変更を反映するため、接続をリロードします。
1 | [root@hoge ~]# nmcli connection reload |
念のためネットワークサービスも再起動します。
1 | [root@hoge ~]# systemctl restart network |
DBサーバのプライベートネットワークにpingを打って、返ってくれば設定成功です。
1 | [root@hoge ~]# ping private.hoge.tyo1.database-hosting.conoha.io |
MySQLで接続できることを確認します。
接続できると以下のように表示されるので、quitで抜けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [root@hoge ~]# mysql -u [接続ユーザー名] -h private.hoge.tyo1.database-hosting.conoha.io -p [データベース名] Enter password: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 999999999 Server version: XX.Y.ZZ-MariaDB-log MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [hoge]> |
DB移行
一般ユーザー追加
まず、DBサーバ詳細画面のユーザーリストに、「一般ユーザー」を追加します。
接続許可ホストにVPSのプライベートIPを設定することで、そのVPS以外からは参照できないようにします。ついでに接続先データベースも設定します。
wp-config.phpの書き換え
最後に、wp-config.phpにあるDB_NAME、DB_USER、DB_PASSWORD、DB_HOSTの4項目を書き換えましょう。(DB_HOSTにはプライベートの接続先ホスト名を入れてね)
無事設定が終わればDBが切り替わっているハズです。
あとはVPS側で動いてるmariaDBを止めてあげておしまいです。。
1 2 3 4 | [root@hoge ~]# systemctl stop mysql [root@hoge ~]# systemctl disable mysql mysql.service is not a native service, redirecting to /sbin/chkconfig. Executing /sbin/chkconfig mysql off |
お疲れ様でした。
割と調べること多くて疲れた。。