====== MySQL - レプリケーション ====== レプリケーションとは、あるデータベースから他のデータベースに複製を作ることです。 ====== 構成 ====== MySQL 5.1.30 ====== [マスター側] ====== ===== プリケーション用ユーザを作成 ===== mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY ''; ===== マスタサーバで更新ログを有効にする ===== マスタサーバで更新ログ(バイナリログとも言う)を有効にします。~ my.cnf ファイルに以下の記述があるか確認して下さい。 [mysqld] log-bin server-id=1 ※server-id は、1以上の整数であれば何でも良いです。 ===== テーブルへの書き込みを禁止 ===== mysql> FLUSH TABLES WITH READ LOCK; ===== マスタデータのスナップショットを撮る(tarで固める) ===== # cd /home/mysql # tar zcvf data.tar.gz data # scp data.tar.gz [スレーブサーバ] ===== 更新ログの状態を取得する ===== 実行したら、画面に出力された「File」と「Position」カラムの内容をメモしておきます。\\ これは、現時点での更新ログファイル名とそのオフセットです。\\ この後スレーブサーバ上でレプリケーションを有効にする際に必要になります。 mysql> SHOW MASTER STATUS; ===== ロックを解除 ===== mysql> UNLOCK TABLES; ===== バイナリログの自動削除 ===== 確認コマンド mysql> show global variables like 'expire_logs_days'; デフォルトの0は削除しないの意味 my.cnfに下記を書いておけば、14日で削除される。 set-variable = expire_logs_days=14 ====== [スレーブ側] ====== ===== スナップショットを展開する ===== # cd /home/mysql # tar zxvf data.tar.gz ==== my.cnf設定 ==== server-id = 2 master-host = 172.16.8.53 master-port = 3306 master-user = slave master-password = xxslave ==== レプリケーションを行う準備 ==== mysql> STOP SLAVE; mysql> CHANGE MASTER TO MASTER_HOST='', MASTER_USER='', MASTER_PASSWORD='', MASTER_LOG_FILE='', MASTER_LOG_POS=; mysql> START SLAVE; ==== スレーブの状態確認 ==== mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.16.8.53 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000007 Read_Master_Log_Pos: 19072 Relay_Log_File: localhost-relay-bin.000002 Relay_Log_Pos: 8504 Relay_Master_Log_File: mysql-bin.000007 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: 19072 Relay_Log_Space: 8663 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 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: 1 row in set (0.00 sec) ERROR: No query specified