こんにちは。
MySQLサーバ の slaveサーバを構築する機会があったので備忘録を残しておきます。
確認事項
バイナリログが出力されていて、尚且つ server-id が設定されている必要があります。
vi /etc/my.cnf ======================================= server-id=1001 log-bin = /var/lib/mysql/mysql-bin ======================================= systemctl restart mysqld
レプリケーション用ユーザの作成
レプリケーション用のユーザを事前に作成しておきます。
create user 'repl'@'%' identified by 'xxxxxxxxxx'; grant replication slave on *.* to 'repl'@'%';
dumpファイルの取得
mysqldump で dumpデータを取得します。
ストレージエンジンが innodb であれば、–single-transaction オプションで DBをロックせずに取得が可能です。
また、–master-data=2 オプションでバイナリログの読み出し開始位置を出力しておきます。
mysqldump -u root -p --skip-lock-tables --quote-names --single-transaction --master-data=2 -A > /var/tmp/mysqldump.sql
dumpファイルのインポート
slaveサーバ に dumpファイルを転送して流し込みます。
単純に mysql コマンドとリダイレクトを組み合わせるだけで大丈夫です。
scp user@xxx.xxx.xxx.xxx:/var/tmp/mysqldump.sql /var/tmp/. mysql -u root -p < /var/tmp/mysqldump.sql
テーブルチェック
mysql_upgrade コマンドを使ってテーブルのチェックを行います。
mysql_upgrade -u root -p systemctl restart mysqld
バイナリログの開始位置を確認
–master-data=2 オプションでバイナリログの読み出し開始位置が出力されているので確認します。
grep "CHANGE MASTER" /var/tmp/mysqldump.sql
レプリケーション設定
mysql> change master to -> master_host='xxx.xxx.xxx.xxx', -> master_user='repl', -> master_password='xxxxxxxxxx', -> master_log_file='[バイナリログ]', -> master_log_pos=[ポジション];
mysql> start slave; mysql> show slave status\G