マスタースレーブ構成を作ってみたのでメモ書き
レプリケーションユーザの作成
マスター側でレプリケーション用ユーザ作成します
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.65.0/255.255.255.0' IDENTIFIED BY 'replication';
マスターの設定
元の設定ファイルを保存
cd /etc/mysql/
sudo cp my.cnf my.cnf.orig
下記の設定を/etc/mysql/my.cnfのそれぞれの場所に追記。必要なのはlog-binとserver-id
[client] default-character-set = utf8 [mysqld] #ホストごとの設定 server-id = 31 # IPアドレスの4オクテット目の数字を入れるのが定説らしい #共通設定 default-character-set = utf8 log-bin=mysql01-bin #バイナリログを記録する #bind-address = 127.0.0.1 #ローカルホストからしか接続できないので変えること bind-address = 0.0.0.0 [mysql] default-character-set = utf8 prompt='[\u@\h] \d> ' [mysqldump] default-character-set = utf8
スレーブの設定
元の設定ファイルを保存
cd /etc/mysql/
sudo cp my.cnf my.cnf.orig
下記の設定を/etc/mysql/my.cnfのそれぞれの場所に追記。必要なのはlog-binとserver-idとスレーブの設定の箇所。
[client] default-character-set = utf8 [mysqld] #ホストごとの設定 server-id = 32 # IPアドレスの4オクテット目の数字を入れるのが定説らしい #スレーブの設定 master-host = 192.168.65.31 master-user = replication master-password = replication master-port = 3306 #共通設定 default-character-set = utf8 log-bin=mysql02-bin #バイナリログを記録する #bind-address = 127.0.0.1 #ローカルホストからしか接続できないので変えること bind-address = 0.0.0.0 [mysql] default-character-set = utf8 prompt='[\u@\h] \d> ' [mysqldump] default-character-set = utf8
マスターのデータをスレーブにコピー
まずマスタースレーブ両方でmyusqlを止める。
/etc/init.d/mysql stop
マスター側のデータディレクトリを固めてスレーブに送る
cd /var/lib sudo tar czvf mysql.tar.gz mysql sudo scp mysql.tar.gz root@192.168.65.32:/var/lib
スレーブ側で元のmysqlデータをバックアップしとく
cd /var/lib/ sudo mv mysql mysql.orig sudo tar xzvf mysql.tar.gz
メンテナンスユーザのパスワード変更
ユーザ情報をマスターのデータで上書きしてしまったので、このままではスレーブのmysqlが立ち上がらないのでマスターの/etc/mysql/debian.cnfを持ってくる必要がある。
スレーブ側で元ファイルをバックアップする。
cu /etc/mysql
sudo mv debian.cnf debian.cnf.orig
scpで持ってくるdebian.cnfを持ってくる。
sudo scp root@192.168.65.31:/etc/mysql/debian.cnf /etc/mysql/debian.cnf
もしマスタのバイナリログやエラーログが残っていたら削除する
mysqlの起動
マスタースレーブそれぞれでmysqlを立ち上げる
sudo /etc/init.d/mysql start
マスター側でマスターステータスを確認する。
[root@localhost] mysql> show master status; +--------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+------------------+ | mysql01-bin.000001 | 262 | | | +--------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
スレーブ側でレプリケーションを開始する。マスター側で確認したバイナリログの名前とログポジションを指定します。
SLAVE STOP; CHANGE MASTER TO MASTER_USER = 'replication', MASTER_PASSWORD = 'replication', MASTER_LOG_FILE = 'mysql01-bin.000001', MASTER_LOG_POS = 262; SLAVE STAER;
スレーブ側でshow slave statusを打ってSlave_IO_Runnin、Slave_SQL_RunningがYesになっていればとりあえずOK。
[root@localhost] mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.65.31 Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql01-bin.000003 Read_Master_Log_Pos: 359 Relay_Log_File: mysqld-relay-bin.000005 Relay_Log_Pos: 498 Relay_Master_Log_File: mysql01-bin.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 359 Relay_Log_Space: 498 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 1 row in set (0.00 sec)
マスター側で適当にデータベースを作成して、スレーブに反映されていることを確認する。