社内勉強会でやったので、メモ。
こういうミドルウェアの設定ってやったこと無かったので、勉強になりました。
前提
0.準備
データベース作成
mysql_install_db --datadir=/data/mysql13301
datadirはデータとかテーブル定義とかを保存するディレクトリ
バイナリログが出るようにMasterのmy.cnf(今回はmy-13301.cnfとした)を編集
以下の記述を有効にする。
##### Binary Log Configuration log_bin = mysql-bin binlog_format = STATEMENT
1.テーブルロックをかける(Master)
これをやるとデータベースにロックがかかり、データベースの更新が出来なくなる
FLUSH TABLES WITH READ LOCK;
2.バイナリログのファイル名とpositionをメモる(Master)
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000004 | 587 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
3.MySQLを停止する(Master, Slave)
〜略〜
4.ibdataとib_logfileをコピーする。(Master->Slave)
cp -r /data/mysql13301/ib* /data/mysql13302/
上記のファイルに加えて、普通はデータファイルもコピーする
(今回の例でいえば /data/mysql13301/${database_name} 配下に出来ているはず)
5.MySQLを起動する(Master, Slave)
〜略〜
6.レプリケーション用のユーザー設定を入れる(Master)
- 最初のset文はレプリケーションで2行めのGRANT文が発行されないために入れている。
- "${database}.${table}"の部分で、全部のデータベースの全部のテーブルの場合は"*.*"を指定する
- ${repl_addr}は"123.456.789.*"的な複数指定も出来る
SET sql_log_bin = 0; GRANT REPLICATION SLAVE ON ${database}.${table} TO '${repl_user}'@'${repl_addr}'' IDENTIFIED BY '${repl_pass}';
7.マスターサーバーの設定をする(Slave)
以下のSQLの結果は/data/mysql13302/master.infoに保存されている。
そのため、レプリケーションからログとデータとmaster.infoをコピればすぐにレプリケーションを作れる
CHANGE MASTER TO MASTER_HOST = '${repl_addr}', MASTER_PORT = 13303, MASTER_USER = '${repl_user}'', MASTER_PASSWORD = '${repl_pass}', MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS = 587