使用 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 添加如下:
relay-log-index = slave-relay-bin.index
relay-log = slave-relay-bin
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:
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 = 833;
 
start slave;
 
 
 
-----------------
配置第二台 Master
-----------------
现在将 node-27 作为 master,将 node-26 作为 slave。
 
在 node-27 上面执行如下:
show master status\G
 
然后登陆 node-26 机器,执行如下:
change master to
master_host = '192.168.1.27',
master_port = 3306,
master_user = 'replication',
master_password = '123',
master_log_file = 'mysql-bin.000001',
master_log_pos = 1776;
 
start slave;