MySqlレプリケーション(作業メモ)

AWSのRDSにデータ移行時、レプリケーションの作り方

レプリケーションの大まかな手順は次の通りです。

  1. マスター側のバイナリログ情報を書き留めておく
  2. mysqldumpコマンドを使ってマスター(移行元)のデータベース(または一部のテーブル)をダンプする
  3. ダンプファイルをスレーブ(移行先RDS)にインポートする
  4. スレーブでSLAVEを設定(mysql.rds_set_external_master)する
  5. スレーブでレプリケーションを開始する(mysql.rds_start_replication)
  6. データ同期を確認する
  7. スレーブのレプリケーションを停止する(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

5.指定スキーマレプリケーション

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/