以前两台mysql服务器已经做了主从复制,现在实现两台mysql服务器相互进行数据的同步,实现过程如下:
1、两个数据库做如下操作:
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
注:1.如果停止slave话,当锁定数据表时,无法再停止
2.都停止slave时防止数据再更新,这样更能保证的数据的一致性
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
注:确认现在哪台数据库服务器中的数据是最新的,确认完成之后,就锁定这台服务器数据库的表,另一台不用锁定
假如:A(192.168.0.100)、B(192.168.0.200)两台数据库服务器,A服务器上数据库的数据是最新的,
一、在A服务器上的操作:
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000103 | 24210472 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
备份A服务器上的数据:
[root@server ~]# mysqldump --lock-tables=false -u root -p123456 --all-databases > /back/mysql/all_db.sql
注:mysqldump备份时不能锁表,如果想在锁表情况下备份加上:--lock-tables=false参数,如果是innodb,则加上--single-transcation比较好。
将备份的数据拷贝到B服务器上
[root@server ~]# scp /back/mysql/all_db.sql root@192.168.0.110:/back/mysql/all_db.sql
二、在B服务器上的操作:
将A服务器备份的数据导入到B服务器的数据库中
[root@server mysql]# mysql -uroot -p123456 < /back/mysql/all_db.sql
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000078 | 53243762 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
在B服务器上更新二进制日志信息使之与A服务器上的日志信息一致
mysql> change master to master_host='192.168.0.100',master_user='rsynUser',master_password='rsyn123456',master_log_file='mysql-bin.000103',master_log_pos=24210472;
三、在A服务器上的操作:
在A服务器上同样也更新二进制日志信息使之与B服务器上的日志信息一致
mysql> change master to master_host='192.168.0.200',master_user='rsynUser',master_password='rsyn123456',master_log_file='mysql-bin.00078',master_log_pos=53243762;
开启复制功能
mysql> start slave;
四、在B服务器上的操作:
开启复制功能
mysql> start slave;
解锁
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
五、在A服务器上的操作:
解锁
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
查看状态,如果出现如下,都是YES,那么就成功了
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
同样在B服务器上也查看状态,如果出现两个YES ,说明主主复制成功配置完成
=========================================================================================
配置文件注意:
在MySQL的主配置文件中修改/添加如下内容:
Server-A上:
[mysqld]
log-bin=mysql-bin
server-id=111
auto-increment-offset=1
auto-increment-increment=2
replicate-do-db=mydb
[root@server ~]# service mysqld restart
Server-B上:
[mysqld]
log-bin=mysql-bin
server-id=222
auto-increment-offset=2
auto-increment-increment=2
replicate-do-db=mydb
[root@server ~]# service mysqld restart
注:二都只有server-id不同和 auto-increment-offset不同
auto-increment-offset是用来设定数据库中自动增长的起点的,会为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突
replicate-do-db 指定同步的数据库,我们只在两台服务器间同步mydb数据库
另:auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2
本文出自 “分享技术,分享快乐” 博客,请务必保留此出处http://techs.blog.51cto.com/5627717/1556272