CMSサーバーからWebサーバーへのデータベースのコピー

公開日 2015-01-13

最終更新日 2015-01-13

CMSサーバーとWebサーバーを分ける構成にした場合、CMSのデータベースをWebサーバーのデータベースにコピーし、Webサーバーでのページ表示を行います。
CMSサーバーのデータベースの内容をWebサーバーのデータベースにコピーする設定は次のようになります。

ここでは次の条件にて設定を行うこととします。
---------------------------------------------------------------------------------
ユーザー    : repl (レプリケーションを実行するユーザー
パスワード: zomekireplpass
対象DB    : zomeki_production

CMSサーバー (Master)
http://192.168.32.1

Webサーバー (Slave)
http://192.168.32.2
---------------------------------------------------------------------------------

■CMSサーバーでの設定

rootユーザでmysqlにアクセス
# mysql -u root -p

レプリケーション用ユーザを作成
 mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'192.168.32.*2 IDENTIFIED BY 'zomekireplpass';

マスタサーバで更新ログを有効にする

# vi /etc/my.cnf
---------------------------------
[mysqld]
log-bin
server-id=1001
---------------------------------

MySQLを再起動
# service mysqld stop
# service mysqld start


テーブルへの書き込みを禁止
 mysql> FLUSH TABLES WITH READ LOCK;

バイナリログのクリア(削除)
 mysql> RESET MASTER;

マスタデータのスナップショット(tarで固める)
# cd /home/zomeki/
# mysqldump -u zomeki -p zomeki_production --lock-all-tables > zomeki_production.dump
# tar cvzf zomeki_production.tar.gz zomeki_production.dump


更新ログの状態を取得する
ここで取得した「File」と「Position」はスレイブ側で設定する箇所があるのでメモしておく。

 mysql> show master status;
 +------------------+----------+--------------+------------------+
 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
 +------------------+----------+--------------+------------------+
 | mysql-bin.000001 |      106 |              |                  |
 +------------------+----------+--------------+------------------+
 1 row in set (0.00 sec)

ロックを解除
 mysql> UNLOCK TABLES;


以下は、運用方法次第で設定する
バイナリログの自動削除 確認コマンド
 mysql> show global variables like 'expire_logs_days';
デフォルトの0は削除しないの意味
my.cnfに下記を書いておけば、削除される。
    set-variable = expire_logs_days=14

 

■Webサーバー側での設定

 スナップショットを展開する
# cd /home/zomeki/
# tar zxvf zomeki_production.tar.gz
# mysql -u zomeki -p zomeki_development < zomeki_production.dump

my.cnf設定

# vi /etc/my.cnf
---------------------------------
server-id       = 1002
master-host = 192.168.32.1
master-user = repl
master-password = zomekireplpass
replicate-do-db = zomeki_production
replicate-ignore-table = zomeki_production.ad_banner_clicks
replicate-ignore-table = zomeki_production.cms_kana_dictionaries
replicate-ignore-table = zomeki_production.cms_link_check_logs
replicate-ignore-table = zomeki_production.cms_link_checks
replicate-ignore-table = zomeki_production.cms_talk_tasks
replicate-ignore-table = zomeki_production.newsletter_delivery_logs
replicate-ignore-table = zomeki_production.newsletter_members
replicate-ignore-table = zomeki_production.newsletter_requests
replicate-ignore-table = zomeki_production.newsletter_tests
replicate-ignore-table = zomeki_production.simple_captcha_data
replicate-ignore-table = zomeki_production.survey_answers
replicate-ignore-table = zomeki_production.survey_form_answers
replicate-ignore-table = zomeki_production.sys_editable_groups
replicate-ignore-table = zomeki_production.sys_ldap_synchros
replicate-ignore-table = zomeki_production.sys_maintenances
replicate-ignore-table = zomeki_production.sys_messages
replicate-ignore-table = zomeki_production.sys_object_privileges
replicate-ignore-table = zomeki_production.sys_operation_logs
replicate-ignore-table = zomeki_production.sys_processes
replicate-ignore-table = zomeki_production.sys_publishers
replicate-ignore-table = zomeki_production.sys_recognitions
replicate-ignore-table = zomeki_production.sys_role_names
replicate-ignore-table = zomeki_production.sys_sequences
replicate-ignore-table = zomeki_production.sys_tasks
replicate-ignore-table = zomeki_production.sys_transferable_files
replicate-ignore-table = zomeki_production.sys_transferred_files
replicate-ignore-table = zomeki_production.sys_users
replicate-ignore-table = zomeki_production.sys_users_groups
replicate-ignore-table = zomeki_production.sys_users_roles
replicate-ignore-table = zomeki_production.tool_convert_docs
replicate-ignore-table = zomeki_production.tool_convert_downloads
replicate-ignore-table = zomeki_production.tool_convert_imports
replicate-ignore-table = zomeki_production.tool_convert_links
replicate-ignore-table = zomeki_production.tool_convert_settings
replicate-ignore-table = zomeki_production.tool_simple_captcha_data
---------------------------------


レプリケーションを行う準備
MASTER_LOG_FILE、MASTER_LOG_POSは、CMSサーバーで確認した更新ログの値を設定する

 mysql> STOP SLAVE;
 mysql> CHANGE MASTER TO
          MASTER_HOST='192.168.32.1',
          MASTER_USER='repl',
          MASTER_PASSWORD='zomekireplpass',
          MASTER_LOG_FILE='mysql-bin.000001',
          MASTER_LOG_POS=106;

 mysql> START SLAVE;

Webサーバーの状態確認
エラーが発生していなければOK
    mysql> show slave status\G;

Slave_IO_Running,Slave_SQL_Runningが'yes'になっていればSlave側のスレッドは立ち上がっており、レプリケーションが動作していることになる。
Seconds_Behind_MasterでSlave側で最後に実行されたクエリがMaster側から何秒遅れていたかを表示しているので、レプリケーションが完了するまでの目安になる。

 

<自動レプリケーション停止>
skip-slave-start

再起動時にレプリケーションを自動的に開始するな、という指定で、これは公式に推奨されているオプションです。
DBにエラーが発生・再起動時は、正常にレプリケーションが行われていない可能性があるので、データの食い違いや破損による二次障害が発生しかねないためです。


# START SLAVE/STOP SLAVE (Slave用)
START SLAVEでレプリケーションを開始し、STOP SLAVEでレプリケーションを停止する。
STOP SLAVEをすると、Master側のデータベース変更を受け取らなくなりデータベースが不一致になる。
再度、START SLAVEを行うと、Masterへ接続し前回レプリケーションしていた時からの変更を受け取りデータベースを同期させる。


# SHOW MASTER STATUS (Master用)
バイナリログの状態(ファイル名や現在位置)を表示する。


# SHOW BINLOG EVENTS (Master用)
バイナリログの中身を表示。


# SHOW SLAVE STATUS (Slave用)
Slaveの情報を表示する。