地方在住IT系ニート

bkds

MySQLのレプリケーションメモ

はじめに

MySQLのレプリケーション設定を実施します。
DBエンジンは、InnoDBを前提としています。

MySQLの設定変更

mysqldの設定を各サーバで変更します。
server-idはレプリケーションを実施するサーバ間で一意になるように設定する必要があります。
log-binは特に指定する必要はありませんが、今回は指定しています。

マスタ

[mysqld]
server-id               = 1
log-bin                 = /var/log/mysql/mysql-bin.log

スレーブ

スレーブに対する書き込みが発生するとレプリケーションエラーが発生するため、read_onlyを指定します。

server-id               = 2
log-bin                 = /var/log/mysql/mysql-bin.log
read_only

レプリケーション用のユーザ作成

レプリケーション専用のユーザを下記コマンドで作成します。
@マークの後ろの%はスレーブのIPアドレスを指定する方がよいです。

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIDIED WITH mysql_native_password BY 'password';

レプリケーションの設定

マスタのデータをバックアップして、スレーブにリストアする作業をはじめに実施します。
下記のコマンドでマスタのサーバでバックアップを取得します。

mysqldumpを実施する際は、single-transactionを利用するようにしてください。
利用しない場合は、テーブルロックがかかってしまうため稼働中のサービスに影響が出てしまいます。
また、バックアップの際には、CREATE等のDDLは利用しないでください。

mysqldump --all-databases --flush-logs --single-transaction --master-data=2 > master.db

スレーブのサーバで下記コマンドを用いてデータをリストアします。

mysql < master.db

下記コマンドを用いてマスタログファイルとポジションを確認しておきます。
スレーブにマスタ設定をする際に必要になります。

grep "CHANGE MASTER TO MASTER_LOG_FILE=" master.db
# 下記は実行結果です。
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000068', MASTER_LOG_POS=157;

マスタの設定とレプリケーションを下記コマンドで開始します。

CHANGE MASTER TO MASTER_HOST='マスタのIPアドレス', MASTER_PORT=マスタのポート番号, MASTER_USER='repl', MASTER_PASSWORD='replユーザのパスワード', MASTER_LOG_FILE='mysql-bin.000068', MASTER_LOG_POS=157;

START SLAVE;

レプリケーションが開始されたら、下記コマンドで状況を確認します。
Slave_IO_RunningSlave_SQL_RunningYesになっていることを確認してください。

show slave status \G;
にほんブログ村 IT技術ブログ IT技術メモへPVアクセスランキング にほんブログ村