使用 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;