MySQL热机双备之双主同步复制配置

时间:2022-09-14 19:50:23

此配置方案来源于csdn前辈博客,奈何找不到出处了,抱拳!!!

1.  MySQL同步机制概述

MySQL支持单向、异步复制,复制过程中一台服务器充当主服务器,一台或多台服务器充当从服务器,双主同步要求两台服务器互为主从即可。

MySQL的同步机制基于主服务器把所有的对数据库的更新操作记录在二进制日志中,并维护日志文件索引以跟踪日志。从服务器在日志中读取最后一次更新的位置,并接收从那时起发生的所有更新,然后*并等待主服务器的下一次更新通知。因此,启用同步机制,主服务器必须启用二进制日志,每个从服务器接受来自主服务器上二进制日志中记录的更新操作,其实从服务器执行的是来自主服务器日志中记录的sql拷贝。所以启用同步时要求主从服务器的二进制日志文件相一致,否则同步失败。

MySQL同步功能由3个线程(主服务器master上1个,从服务器slave上2个)来实现。执行START SLAVE语句后,slave就创建一个I/O线程。I/O线程连接到master上,并请求master发送二进制日志中的语句。master创建一个线程来把日志的内容发送到slave上。这个线程在master上执行SHOW PROCESSLIST语句后的结果中的 Binlog Dump 线程便是。slave上的I/O线程读取master的Binlog Dump线程发送的语句,并且把它们拷贝到其数据目录下的中继日志(relay logs)中。第三个是SQL线程,salve用它来读取中继日志,然后执行它们来更新数据。

  如上所述,每个mster/slave上都有3个线程。每个master上有多个线程,它为每个slave连接都创建一个线程,每个slave只有I/O和SQL线程。在MySQL中执行SHOW PROCESSLIST语句就会告诉我们所关心的master和slave上发生的情况。

2.  配置环境

操作系统:Linux

环境:MySQL

A、B两台服务器

A-  ip:192.168.204.128

B-  ip:192.168.204.129

要求A、B两台服务器可通信

关闭两台服务器防火墙

3同步配置

3.1在主从服务器上创建同步账号

在A服务器上创建一个B服务器可登陆的账号,进入到mysql终端创建同步账号为:rootnew,密码为:123456;

Mysql>grant all privileges on *.* to ‘rootnew’@’192.168.204.129’  identified by ‘123456’;

Mysql>flush privileges;

在B服务器上创建一个A服务器可登陆的账号:

Mysql>grant privileges on *.* to ‘newroot’@’192.168.204.128’  identified bu ‘123456’;

Mysql>flush privileges;

此时在A、B服务器上的mysql数据库中各有一个newroot用户:

 

3.2主服务器数据库备份(新装数据库忽略此步骤)

3.3修改主从服务器配置文件

在A、B服务器上创建空的zyyt_antm数据库,打开A服务器的my.cnf文件,在文件中[mysqld]下添加如下内容:(各操作系统的my.cnf文件位置不一样,我的是在/etc/mysql/下)

skip-name-resolve

server-id=1 #必须与其他服务器不同,且必须为1到232–1之间的一个正整数值

#i am master

log-bin=mysql-bin                   #二进制文件

binlog-do-db=zyyt_antm              #要同步的数据库,此处我直接用单位项目做测试

binlog-ignore-db=information_schema  #不同步的数据库

binlog-ignore-db=db_Im

binlog-ignore-db=db_Mdr

binlog-ignore-db=db_mrs

binlog-ignore-db=mysql

binlog-ignore-db=performance_schema

binlog-ignore-db=test

slave-skip-errors=1032,1062

 

重启A服务器的mysql服务:

~# /etc/inti.d/mysql restart

重启成功表明A服务器配置成功。

 

打开B服务器的my.cnf文件,在[mysqld]节点下添加同样内容:

skip-name-resolve

server-id=2 #必须与其他服务器不同,且必须为1到232–1之间的一个正整数值

#i am master

log-bin=mysql-bin                   #二进制文件

binlog-do-db=zyyt_antm              #要同步的数据库

binlog-ignore-db=information_schema  #不同步的数据库

binlog-ignore-db=db_Im

binlog-ignore-db=db_Mdr

binlog-ignore-db=db_mrs

binlog-ignore-db=mysql

binlog-ignore-db=performance_schema

binlog-ignore-db=test

slave-skip-errors=1032,1062

重启B服务器的mysql服务。

3.4指定主从服务器同步信息

1.在A服务器上查看当前二进制日志文件和偏移量值:

Mysql>show master status\G;

 

记录mysql二进制文件中的file和position值;

2.在B服务器上指定更新点(根据上面样例修改MASTER_LOG_FILE值为样例结果中的file值;修改MASTER_LOG_POS值为样例结果中的position值)。

Mysql>stop slave;

Mysql>change master to master_host=’192.168.204.128’,master_port=3306,master_user=’rootnew’,master_password=’123456’,master_log_file=’mysql-bin.000012’,master_log_pos=154;

Mysql>start slave;

3.在B服务器上查看当前二进制日志名和偏移量:

Mysql>show master status;

记录mysql二进制文件中的file值和position值

 

4. 在A服务器上指定更新点(根据上面样例修改MASTER_LOG_FILE值为样例结果中的file值;修改MASTER_LOG_POS值为样例结果中的position值)。

Mysql>stop slave;

Mysql>change master to master_host=’192.168.204.129’,master_port=3306,master_user=’rootnew’,master_password=’123456’,master_log_file=’mysql-bin.000010’,master_log_pos=154;

Mysql>start slave;

5.重启A、B服务器的mysql服务。

3.5检查数据库同步状态

1.查看A、B服务器数据库同步状态,主要查看Slave_IO_Running与Slave_SQL_Running这两字段显示为yes就可以。

Mysql>show slave status\G;

2.查看A、B服务器的同步线程状态:

Mysql>show processlist\G;

若输入命令后出现概述所述的三个线程,则证明配置成功。