[mysqld]
log-bin=mysql-bin
log-bin-index=mysql-bin.index
server-id = 1
sync_binlog=1
binlog_format=mixed
# 指定同步的資料庫,忽略系統庫
binlog-do-db = testdb
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
[mysqldump]
max_allowed_packet = 32M # 建議設大一點,如 100M
修改後執行 service mysql restart 重啟服務。
CREATE USER 'funsion'@'%' IDENTIFIED BY 'jb51.net';
GRANT REPLICATION SLAVE ON *.* TO 'funsion'@'%' IDENTIFIED BY 'jb51.net';
FLUSH PRIVILEGES;
[mysqld]
server-id=2
log-bin = mysql-bin
relay-log-index = slave-relay-bin.index
relay-log = slave-relay-bin
# 僅 MySQL 5.5 需要以下三行,增強同步可靠性
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1
重啟 Slave 端 MySQL 服務。
登入 Slave 的 MySQL 客戶端:
CHANGE MASTER TO
MASTER_HOST='10.1.123.233',
MASTER_USER='funsion',
MASTER_PORT=3306,
MASTER_PASSWORD='ifunsion.com';
CHANGE MASTER TO MASTER_CONNECT_RETRY=30;
START SLAVE;
SHOW MASTER STATUS\G,記錄 File (如 mysql-bin.000001) 與 Position (如 107)STOP SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
START SLAVE;
SHOW SLAVE STATUS\G 中 Slave_IO_Running 與 Slave_SQL_Running 均為 Yes 表示成功yum -y install ntpdate
ntpdate cn.pool.ntp.org
clock -w
主從伺服器時間必須同步,否則可能導致同步延遲或錯誤。
| 操作 | 命令 |
|---|---|
| 鎖表 (備份前確保數據一致性) | FLUSH TABLES WITH READ LOCK; |
| 解鎖 | UNLOCK TABLES; |
| 重置 Master (清空 binlog) | RESET MASTER; |
| 重置 Slave (清空 relay log 重新開始) | RESET SLAVE; |
場景: Master(1號) 已有 Slave(2號),新增 3號 Slave,但 Master、2號均不能停機,同步進程不能停。
mysqldump -uroot -pxxxx -h127.0.0.1 --databases db1 db2 db3 --master-data=1 > bak.sql
--master-data=1 會在導出文件末尾自動加入 CHANGE MASTER TO 語句。SLAVE STOP;mysql -uroot -p < bak.sqlSLAVE START;3號 Slave 會自動從導出那一刻的 binlog 位置開始同步。適用於資料庫較小 (如 6G 內) 的場景。
SHOW SLAVE STATUS\G
# 重點關注:
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
# Seconds_Behind_Master: 0 (或較小值)