日期:2014-05-16  浏览次数:20438 次

不同服务器上的mysql数据库如何实现同步异步备份

1.服务器状态
服务器A:192.168.1.1
服务器B:192.168.1.2

2.创建同步用户
主机域A:192.168.1.2  用户名A:sync_a  密码A:aaa
主机域B:192.168.1.1  用户名B:sync_b  密码B:bbb
至少分配以下权限grant replication slave

3.执行flush privileges

4.停止MySQL

5.配置my.cnf(my.ini)

服务器A 服务器B?
user = mysql
log-bin = mysql-bin
server-id = 1
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
log-slave-updates
slave-skip-errors = all
sync_binlog = 1 user = mysql
log-bin = mysql-bin
server-id = 2
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
log-slave-updates
slave-skip-errors = all
sync_binlog = 1

server-id必须唯一
binlog-do-db和replicate-do-db表示需要同步的数据库
binlog-ignore-db和replicate-ignore-db表示不需要同步的数据库
请不要加入以下命令,该命令并不会解决uid跳号的问题,恰恰相反以下两行命令才是导致uid跳号的罪魁祸首
auto_increment_increment = 2
auto_increment_offset = 1

6.重新启动MySQL

7.进入MySQL控制台

服务器A:
show master status G
flush tables with read lock;
服务器B:
show master status G
flush tables with read lock;

同时记录下两台服务器的File和Position,此处假设:

A: File: mysql-bin.000001
Position: 001
B: File: mysql-bin.000002
Position: 002

服务器A:
change master to
??? -> master_host='192.168.1.2',
??? -> master_user='sync_b',
??? -> master_password='bbb',
??? -> master_log_file='mysql-bin.000002',
??? -> master_log_pos=002;
服务器B:
change master to
??? -> master_host='192.168.1.1',
??? -> master_user='sync_a',
??? -> master_password='aaa',
??? -> master_log_file='mysql-bin.000001',
??? -> master_log_pos=001;

此处填写的数据完全相反

8.执行show processlist G查看是否同步成功