mysql レプリケーションのまとめ
環境
host A(マスター)
OS:debian
ip_address:192.168.56.100
host B(スレーブ)
OS:debian
ip_address:192.168.56.101
mysql-server のインストール
マスター、スレーブ共に mysql-server を aptitude でインストールします。
# aptitude install mysql-server-5.0
ユーザーの登録
mysql ユーザーを追加します。(password1 は変更してください)
$ mysql --user=root mysql -p mysql> GRANT ALL PRIVILEGES ON *.* TO mysql@localhost IDENTIFIED BY 'password1' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO mysql@'%' IDENTIFIED BY 'password1' WITH GRANT OPTION;
repl ユーザー(レプリケーション実行ユーザー)を追加します。(password2 は変更してください)
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'localhost' IDENTIFIED BY 'password2'; mysql> GRANT REPLICATION CLIENT ON *.* TO repl@'%' IDENTIFIED BY 'password2';
マスター設定データの修正
マスターでの作業。
my.conf を修正。
# vi /etc/mysql/my.conf ----------------------------------------- [client] default-character-set = utf8 ← 追加 [mysqld] log-bin ← 追加 server-id = 1 ← 追加 bind-address = 127.0.0.1 bind-address = 192.168.56.100 ← 追加
mysql の再起動
# /etc/init.d/mysql restart
スレーブ設定データの修正
スレーブでの作業。
my.conf を修正。
# vi /etc/mysql/my.conf ----------------------------------------- [client] default-character-set = utf8 ← 追加 [mysqld] log-bin ← 追加 server-id = 2 ← 追加 master-host = 192.168.56.100 ← 追加 master-user = repl ← 追加 master-password = password2 ← 追加 bind-address = 127.0.0.1 bind-address = 192.168.56.101 ← 追加
debian.cnf を修正。(password3 は変更してください)
# vi /etc/mysql/debian.conf ----------------------------------------- [client] host = localhost user = debian-sys-maint password = password3 ← 変更 socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] user = debian-sys-maint password = password3 ← 変更 socket = /var/run/mysqld/mysqld.sock basedir = /usr
debian-sys-maint のパスワードを登録。
$ mysql -u mysql -p mysql> SET PASSWORD FOR 'debian-sys-maint'@localhost = PASSWORD('password3');
mysql の再起動
# /etc/init.d/mysql restart
スナップショットの取得
マスターでの作業。
更新系クエリを停止する為にFLASH文を発行してロックをかける。
$ mysql -u mysql -p mysql> FLUSH TABLES WITH READ LOCK;
スナップショットの作成。
$ cd /var/lib/mysql # tar cpf /var/tmp/mysql-snapshot.tar .
マスターステータスの確認。(この情報が重要)
$ mysql -u mysql -p mysql> SHOW MASTER STATUS; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | mysqld-bin.000009 | 223 | | | +-------------------+----------+--------------+------------------+
UNLOCK文を発行してロックを外す。
$ mysql -u mysql -p mysql> UNLOCK TABLES;
スナップショットのデータをスレーブにコピー
$ scp /var/tmp/mysql-snapshot.tar 192.168.56.101:/var/tmp/
スナップショットのデータを展開
スレーブでの作業。
mysql を停止。
# /etc/init.d/mysql stop
マスターのスナップショットデータをスレーブに展開。
$ cd /var/lib/mysql/ # rm -fr * # tar xpf /var/tmp/mysql-snapshot.tar
mysql を起動。
# /etc/init.d/mysql stop
レプリケーション開始位置の登録
スレーブでの作業。
マスターステータスの確認で記録した情報を登録。
$ mysql -u mysql -p ----------------------------------------- mysql > change master to master_host='192.168.56.100', master_user='repl', master_password='password2', master_log_file='mysql-bin.000009', master_log_pos=223;