linux mysql 主主同步复制

时间:2022-05-03 06:11:04


以前两台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