レプリケーションまとめ

とりあえず、最低限の設定をまとめてみた。


■初期設定
レプリケーションユーザの作成
MySQLで利用するレプリケーションユーザを作成するSQLを発行する。
マスター側のみでOK。

GRANT REPLICATION SLAVE ON *.* TO <レプリケーション用ユーザ名>@<スレーブ側IPアドレス> IDENTIFIED BY '<パスワード>'

SQLとして発行するので、当然mysqlコマンド経由になるので、予めMySQLサーバは起動しておく事。
(ネットワーク通信を行わないモード「--skip-networking」と権限無視モード「--skip-grant-tables」で起動しておくのが望ましい。)


■DBのコピー
MySQLレプリケーションは、DB内データの完全同期型ではなく、クエリ情報を送受信する事で成り立っている。
レプリケーション環境構築時にマスターとスレーブのDB情報は一致している事が前提となっている。


MySQLサーバを停止して、マスター側のMySQLのフォルダ(普通は「/var/lib/mysql」)を丸々スレーブ側にコピー。

・マスター側
tar zcfv mysql.tar.gz /var/lib/mysql


・スレーブ側
tar zxfv mysql.tar.gz

サーバによっては、コピー後に権限が変わっている(サーバ間でユーザ名とユーザIDが異なっている)可能性があるため、chownでフォルダ毎mysql:mysqlに変更する事。

chown -R mysql:mysql /var/lib/mysql

後、バイナリログファイルとかは消しておく。


レプリケーション設定
・マスター側設定ファイル

[mysqld]
server-id=1
log-bin=<バイナリログを出力するパス>
binlog_format=mixed

server-id:レプリケーション環境を行うサーバ内で一意になるような値を設定する事。
log-bin:成立したクエリの情報を書き出すファイルのパス。このパスの後ろに6桁の連番が付加される。スレーブ側との同期チェックのために使われるので、レプリケーションを行う際は、必ず指定しておく事。
binlog_format:バイナリログの出力フォーマットに関する設定。log-binを指定する場合は、この設定も有効にしないとMySQL起動に失敗する。


・スレーブ側設定ファイル

[mysqld]
server-id=2
log-bin=<バイナリログを出力するパス>
binlog_format=mixed
log_slave_updates
master-host=example.com
master-user=repluser
master-password=password
master-port=3306

server-id:レプリケーション環境を行うサーバ内で一意になるような値を設定する事。
log-bin:成立したクエリの情報を書き出すファイルのパス。このパスの後ろに6桁の連番が付加される。差分バックアップを行おうと思ったら、必ず必要。
log_slave_updates:マスターから来るクエリ情報もバイナリログに書き込む。(デフォルト設定では、書き込まない。)スレーブ側で、差分バックアップを行おうと思ったら、必ず必要になる。
master-host:レプリケーション元のホスト名(IPアドレスでも可)
master-user:レプリケーションを行う際のユーザ名
master-password:レプリケーションを行う際のパスワード
master-port:レプリケーションを行う際に使用する通信ポート(省略時は3306)