使用 MySQL 5.5
Master1 Master2 Slave1 Slave2
IP: 192.168.1.26 192.168.1.27 192.168.1.28 192.168.1.29
hostname: node-26 node-27 node-28 node-29
server id: 26 27 28 29
端口: 3306
配置自動登入:
# cat .my.cnf
[client]
user=root
password=123
chmod 600 .my.cnf
[ Master 1 ]
将配置選項添加到 my.cnf 以配置 Master
lower_case_table_names=1
skip-name-resolve
# 5.1
#default-character-set=gbk
# 5.5
character-set-server=gbk
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=800
default-storage-engine=innodb
log_bin_trust_function_creators=1
log-bin=mysql-bin
binlog_format=row
server-id = 26
max_binlog_size=200M
expire_logs_days = 10
binlog_cache_size = 64M
binlog-ignore-db=mysql
replicate-ignore-db=mysql
innodb_flush_log_at_trx_commit=1
sync_binlog=1
log_slave_updates = 1
relay-log-index = slave-relay-bin.index
relay-log = slave-relay-bin
# master server 1
auto_increment_increment=2
auto_increment_offset=1
# master server 2
#auto_increment_increment=2
#auto_increment_offset=2
建立一個複制使用者
在 Master 伺服器執行如下:
grant replication slave on *.* to replication identified by '123';
flush privileges;
-----------
備份 master
在 master 執行如下:
flush tables with read lock;
show master status\G
mysqldump --all-databases > backup.sql
scp 拷貝備份檔案到 Slave 機器上
unlock tables;
配置 Slave
my.cnf 添加如下:
server-id = 27
接下來,在 Slave 上恢複備份:
mysql < backup.sql
已經在 Slave 伺服器上恢複了 Master 機器的備份,現在可以啟動 Slave 了。利用前面記下的 Master 的 binlog 位置,然後啟動 Slave。
change master to
master_host = '192.168.1.26',
master_port = 3306,
master_user = 'replication',
master_password = '123',
master_log_file = 'mysql-bin.000001',
master_log_pos = 579;
start slave;
----------
克隆 Slave
隻要有一個 Slave 連在 Master 上,就可以使用這個 Slave 建立新的 Slave,而不需要再離線 Master 了。克隆 Slave 與克隆 Master 基本相同,差別在于如何找到 binlog 位置。另外,注意克隆的那個 Slave 同時還在執行從 Master 的複制。
停止 Slave:
slave> stop slave;
slave> flush tables with read lock;
# mysqldump --all-databases > backup-slave.sql
Slave 停止後,就可以像從前一樣重新整理(flush)資料表,然後建立備份。建立了 Slave 的備份後,使用 show slave status 指令來确定從哪裡開始複制。如果要獲得 Master 二進制日志中 Slave 即将執行的下一個事件的位置,請注意 Relay_Master_Log_File 和 Exec_Master_Log_Pos 字段值。
show slave status\G
...
Relay_Master_Log_File: master-bin.000001
Exec_Master_Log_Pos: 833
建立了備份然後在新 Slave 上恢複之後,将複制配置為從這個位置開始,然後啟動新的 Slave:
master_log_pos = 833;
-----------------
配置第二台 Master
現在将 node-27 作為 master,将 node-26 作為 slave。
在 node-27 上面執行如下:
然後登陸 node-26 機器,執行如下:
master_host = '192.168.1.27',
master_log_pos = 1776;