MySqlレプリケーション(作業メモ)
レプリケーションの大まかな手順は次の通りです。
- マスター側のバイナリログ情報を書き留めておく
- mysqldumpコマンドを使ってマスター(移行元)のデータベース(または一部のテーブル)をダンプする
- ダンプファイルをスレーブ(移行先RDS)にインポートする
- スレーブでSLAVEを設定(mysql.rds_set_external_master)する
- スレーブでレプリケーションを開始する(mysql.rds_start_replication)
- データ同期を確認する
- スレーブのレプリケーションを停止する(mysql.rds_stop_replication)
流れ:
ダウンプ時データベースの書き込みをロックする
$mysql -u root -p db_name
mysql>FLUSH TABLE WITH READ LOCK; //ロックかける
mysql>exit; //一旦抜き出す
$ mysqldump --databases db_name --master-data=2 --single-transaction --order-by-primary -r backup.sql -u user_name -p //ダウンプ
$ mysql -u root -p db_name
mysql> UNLOCK TABLES; //ロック解除
$ mysql -u user_name -p -h rds(public ip) db_name < backup.sql //rdsにインポートする
$ head -100 backup.sql | grep CHANGE // バイナリログ情報を表示
$ mysql -u user_name -p -h rds(public ip) db_name // rds接続
mysql>CALL mysql.rds_set_external_master(
'49.212.204.73',(masterのipアドレス)
3306,(master port)
'repl', (接続するユーザー)
'repl',(パスワード)
'binlog.000002',(バイナリログのファイル名)
117861696,(同期開始位置)
0(SSL接続を行わない)
);
mysql>CALL mysql.rds_start_replication; //レプリケーション開始
mysql>CALL mysql.rds_stop_replication; // レプリケーション終了
色々
1.masterに「接続するユーザー」を作って、権限を与える必要がある
mysql>CREATE USER 'repl'@'%' IDENTIFIED BY '<password>';
mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.*TO 'repl'@'%' IDENTIFIED BY '<password>'
2.セキュリティー色々の設定(もしくはiptables)
相互IPアドレスの許可必要がある。VPCセキュリティーグループかiptableか
3.my.cnf(master) 追加
[mysqld]
log-bin=mysql-bin
server-id=1
sudo service mysqld start
4.必要に応じて色々更新もしくはインストール
EC2最新アップデート
sudo yum update -y
sudo yum install mysql-server -y
master ->my.cnf
[mysqld]
binlog-do-db=db_name //指定dbしかバイナリログ出力しない
binlog-ignore-db=db_name //指定dbを除外
slave->my.cnf
[mysqld]
replicate-do-db=db_name
replicate-ignore-db=db_name
RDSをslaveにする場合、どう設定するでしょう??
参考サイト
http://dev.classmethod.jp/etc/migrate-mysql-on-ec2-to-rds/