mysql互为主从配置_mysql互为主从配置(双主模型)

一、A、B双主模型的实现条件:

1. 开启二进制日志

2. 开启中继日志

3. 解决自动增长列的问题

如果A服务器上自动增长的列编号有一个35,此时还没有同步到B服务器上,在B服务器上插入一条数据,编号也是35。当同步A的35到B服务器上来的话,必然产生数据丢失。

解决办法:

让在A上插入的行的自动增长都为奇数,让B服务器上的自动增长都为偶数。这样就解决了自动增长的问题。

假设A是一台生产环境中的数据库,现在想添加B服务器,实现双主模型。

二、步骤:

1. 在A、B服务器上创建具有复制权限的帐号

2. 在A、B服务器上修改配置文件(开启二进制日志、中继日志等)

3. 将A服务器上存在的数据文件导入到B服务器中

注意:导入数据的时候,先关闭B服务器的二进制日志。

4. 让B先成为slave,再让A成为slave

5. 测试

三、开始配置

1. 创建授权用户mysql> grant replication slave on *.* to 'slave'@'192.168.2.96' identified by '12345';

Query OK, 0 rows affected (0.00 sec)

#A服务器

mysql> grant replication slave on *.* to 'slave'@'192.168.2.93' identified by '12345';

Query OK, 0 rows affected (0.00 sec)

#B服务器

2. 编辑配置文件[root@oracle ~]# vim /etc/my.cnf

log-bin=mysql-bin #开启二进制日志

server-id=1

relay-log=mysql-relay-bin #开启中继日志

log_slave_updates = on #从服务器将时间记录到二进制日志中

auto_increment_increment=2 #自动增长的步长

auto_increment_offset=1 #自动增长的起始数值

#A服务器的配置[root@node2 ~]# vim /etc/my.cnf

server-id=2

#log-bin=mysql-bin

#log_slave_updates = on

auto_increment_increment=2

auto_increment_offset=2

#B服务器的配置,先关闭二进制日志

重启服务[root@oracle ~]# service mysqld restart

Shutting down MySQL.. [ OK ]

Starting MySQL. [ OK ]

创建测试用的表mysql> select * from info;

+-----+-------+-----+

| sid | name | age |

+-----+-------+-----+

| 1 | zhang | 23 |

| 2 | li | 12 |

| 3 | cheng | 34 |

| 4 | wang | 22 |

| 5 | chen | 44 |

+-----+-------+-----+

5 rows in set (0.00 sec)

#在A服务器上创建测试用的表

3. 将表导入到B服务器上[root@oracle ~]# mysqldump --databases data --lock-all-tables --master-data=2 > /root/dump.sql

[root@oracle ~]# scp /root/dump.sql root@192.168.2.96:/root/

#A服务器上dump+拷贝

[root@node2 ~]# mysql < dump.sql #B服务器上执行

4. 让B服务器先成为slavemysql> change master to master_host='192.168.2.93',master_user='slave',master_password='12345',master_port=3306,MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=1068;

#MASTER_LOG_FILE和MASTER_LOG_POS在dump.sql中有记录[root@node2 ~]# vim /etc/my.cnf

#将刚刚注释掉的参数生效

log-bin=mysql-bin

log_slave_updates = on[root@node2 ~]# service mysqld restart

Shutting down MySQL.. [确定]

Starting MySQL. [确定]

再让A服务器成为slavemysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 | 120 | | | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

#在B上查看二进制日志信息

mysql> change master to master_host='192.168.2.96',master_user='slave',master_password='12345',master_port=3306,MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=120;

mysql> start slave;

查看A、B服务器的状态:mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.2.96

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 120

Relay_Log_File: mysql-relay-bin.000002

Relay_Log_Pos: 283

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

#A服务器上的状态mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.2.93

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000008

Read_Master_Log_Pos: 120

Relay_Log_File: mysql-relay-bin.000003

Relay_Log_Pos: 283

Relay_Master_Log_File: mysql-bin.000008

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

#在B服务器上查看状态

5. 测试:mysql> insert into info(name,age) values('sun',25),('ding',29);

#在A服务器上插入2行数据

mysql> select * from info;

+-----+-------+-----+

| sid | name | age |

+-----+-------+-----+

| 1 | zhang | 23 |

| 2 | li | 12 |

| 3 | cheng | 34 |

| 4 | wang | 22 |

| 5 | chen | 44 |

| 7 | sun | 25 |

| 9 | ding | 29 |

+-----+-------+-----+

7 rows in set (0.00 sec)

#在B服务器上查看的结果

mysql> insert into info(name,age) values('BB',33),('BC',21);

#在B服务器上插入2行数据

mysql> select * from info;

+-----+-------+-----+

| sid | name | age |

+-----+-------+-----+

| 1 | zhang | 23 |

| 2 | li | 12 |

| 3 | cheng | 34 |

| 4 | wang | 22 |

| 5 | chen | 44 |

| 7 | sun | 25 |

| 9 | ding | 29 |

| 10 | BB | 33 |

| 12 | BC | 21 |

+-----+-------+-----+

9 rows in set (0.00 sec)

#在A服务器上查看

这样双主模型就已经实现了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值