mysql数据库主从同步之双主配置----互为主从

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

Mysql数据库复制原理:

整体上来说,复制有3个步骤:   

(1)master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

(2)slave将master的binary log events拷贝到它的中继日志(relay log);

(3)slave重做中继日志中的事件,将改变反映它自己的数据。

下图描述了复制的过程:

wKiom1dqUBHTmyfaAABUrjWR9Ok538.jpg-wh_50


                                  

      该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务串行的写入二进制日 志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

       下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中 继日志。

       SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数 据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

        此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制 过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。



具体配置


环境

MySQL-master1:10.6.1.210

MySQL-master2:10.6.1.211

OS版本:CentOS 6.6
MySQL版本:5.1.73 


一、MySQL master-master配置


1.1、修改MySQL配置文件


两台MySQL均如要开启binlog日志功能,开启方法:在MySQL-master1  配置文件/etc/my.cnf 


 [MySQLd]段中加上

user = mysql
log-bin=mysql-bin

binlog_format=mixed

relay-log=relay-bin

server-id = 1
binlog-do-db=test
binlog-ignore-db=mysql
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates=1     (log-slave-updates也可以)
slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1 


在MySQL-master2 配置文件/etc/my.cnf 


 [MySQLd]段中加上

user = mysql
log-bin=mysql-bin

binlog_format=mixed
relay-log=relay-bin

server-id=10
binlog-do-db=test
binlog-ignore-db=mysql
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates=1   (log-slave-updates也可以)

slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=2


将两个配置文件保存,分别重启mysql服务器


讲解几个重要的常用选项:


server_id

值必须为2到232–1之间的一个正整数值。ID值唯一的标识了复制群集中的主从服务器,因此它们必须各不相同。


binlog-do-db=database 

是要记录日志的数据库;


同步多个数据库重复设置选项 binlog-do-db=test 和replicate-do-db=test

例如                              

 binlog-do-db=test1

 replicate-do-db=test1

 binlog-do-db=test2 

 replicate-do-db=test2


binlog-ignore-db 

不要记录日志的数据库名,多个数据库中间用逗号(,)隔开;

 

log-slave-updates=1 

这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的,但是,如果这个从服务器B是服务器A的 从服务器,同时还作为服务器C的主服务器,那么就需要开发这个选项,这样它的从服务器C才能获得它的二进制日志进行同步操作


sync_binlog=1

  这个参数直接影响mysql的性能和完整性. 在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,同志文件系统将Binlog文件缓存刷新到磁盘。Mysql中默认的设置是sync_binlog=0,即不作任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统Crash,在文件系统缓存中的所有Binlog信息都会丢失



auto_increment_increment=2
auto_increment_offset=1 


auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID了


auto_increment_increment = 2 

auto_increment_offset = 2 

auto_increment字段产生的数值是:2, 4, 6, 8, …等偶数ID了


这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。


另外:

master-connect-retry


master-connect-retry这个参数是用来设置在和主服务器连接丢失的时候,重试的时间间隔,默认是60秒


read-only

read-only是用来限制普通用户对从数据库的更新操作,以确保从数据库的安全性,不过如果是超级用户依然可以对从数据库进行更新操作


slave-skip-errors


在复制过程中,由于各种的原因,从服务器可能会遇到执行BINLOG中的SQL出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理。

Slave-skip-errors的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句。


skip-slave-start

表示从mysql服务器启动时不启动同步线程,这就要在启动从服务器之后,手工启动同步线程



1.2  做同步之前要保证两个数据库数据一致.


如果主数据库有数据的话。 数据库锁表操作,不让数据再进行写入动作。

mysql> FLUSH TABLES WITH READ LOCK;


用命令mysqldump备份数据库。

master服务器执行

shell> mysqldump -uroot -p123456 test >test.sql

看主数据库的状态 mysql> show master status;

记录File  Position 项的值

注:没有锁定主服务器,这里记录的主服务器二进制日志position值可能会大于做mysqldump时的值,这将导致从服务器丢失在此期间的更新。如果可以保证在此期间主服务器不会出现创建新表的更新,那么丢失的影响不大;否则,将导致从服务器复制线程失败,这时必须在做mysqldump时锁定主服务器。

-----------------------------------------------

从服务器中my.cnf文件中加入选项 

skip-slave-start

表示从mysql服务器启动时不启动同步线程,这就要在启动从服务器之后,手工启动同步线程,在mysql> 提示符下面运行“start slave”就可以

保存my.cnf


执行

shell> mysqladmin -uroot -p123456 create test

shell> mysql -uroot -p123456 test <test.sql


启动从服务器线程

mysql>start slave;

取消主数据库锁定 mysql>UNLOCK TABLES;





1.3、将10.6.1.210设为10.6.1.211的主服务器


在10.6.1.210上新建授权用户 

MySQL> grant  replicationclient,replication  slave  on  *.*   to  'repluser'@'10.6.1.211'  identified by  '123456';

Query OK, 0 rows affected (0.00 sec)  


MySQL>flush privileges;
Query OK, 0 rows affected (0.00 sec)


查看Master数据库上的bin文件以及时间点. 登录Master服务器的mysql  后执行:

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000015 |     2474 | test         |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


此处,bin文件为mysql-bin.000015,节点为2474。



在10.6.1.211将10.6.1.210设为自己的主服务器


MySQL> change master to master_host='10.6.1.210',master_user=' repluser ',master_password='123456',master_log_file='MySQL-bin.000015',master_log_pos=2474;
Query OK, 0 rows affected (0.05 sec) 


红色标注部分为10.6.1.210主机中show master status;命令结果中的file、postion两个值 


MySQL> start slave;
Query OK, 0 rows affected (0.00 sec) 

  

MySQL> show slave status/G


Slave_IO_Running:Yes            #IO thread  是否运行

Slave_SQL_Running:Yes         #SQL thread是否运行


 


1.4、将10.6.1.211设为10.6.1.210的主服务器


10.6.1.211上新建授权用户 

MySQL> grant  replicationclient,replication  slave  on  *.*   to 'repluser'@'10.6.1.210'  identified by  '123456';

Query OK, 0 rows affected (0.00 sec) 

  

 MySQL>flush privileges;
Query OK, 0 rows affected (0.00 sec)


查看Master数据库上的bin文件以及时间点. 登录Master服务器的mysql  后执行:

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |     1476 | test         |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


此处,bin文件为mysql-bin.000004,节点为1476。




10.6.1.21010.6.1.211设为自己的主服务器

MySQL> change master to master_host='10.6.1.211',master_user=' repluser ',master_password='123456',master_log_file='MySQL-bin.000004',master_log_pos=1476;
Query OK, 0 rows affected (0.05 sec)  

MySQL> start slave;
Query OK, 0 rows affected (0.00 sec)   

MySQL>

MySQL> show slave status/G


Slave_IO_Running:Yes            #IO thread  是否运行

Slave_SQL_Running:Yes         #SQL thread是否运行



1.5 、其他命令

1.5.1
、查看复制进度
需要在主库上运行
mysql>show processlist \G;

1.5.2、主服务器上的相关命令:
show processlist;
show master status
show slave hosts
show {master|binary} logs
show binlog events
purge {master|binary} logs to 'log_name'
purge {master|binary} logs before 'date'
reset master(
老版本flush master)
set sql_log_bin={0|1}

1.5.3
、从服务器上的相关命令:
slave start
slave stop
slave stop IO_THREAD //
此线程把master段的日志写到本地
slave start IO_THREAD
slave stop SQL_THREAD //
此线程把写到本地的日志应用于数据库
slave start SQL_THREAD
reset slave
set global sql_slave_skip_counter
load data from master
show slave status(SUPER,REPLICATION CLIENT)
CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //
动态改变master信息
PURGE MASTER [before 'date'] 
删除master端已同步过的日志


本文转自pizibaidu 51CTO博客,原文链接:http://blog.51cto.com/pizibaidu/1791791,如需转载请自行联系原作者


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
关系型数据库 MySQL Linux
本地虚拟机centos7通过docker安装主从mysql5.7.21
本地虚拟机centos7通过docker安装主从mysql5.7.21
|
1天前
|
负载均衡 关系型数据库 MySQL
关系型数据库的安装和配置数据库节点
关系型数据库的安装和配置数据库节点
12 3
|
5天前
|
关系型数据库 MySQL 数据库
MySQL集群 双主架构(配置命令)
MySQL集群 双主架构(配置命令)
|
10天前
|
SQL 关系型数据库 MySQL
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
|
10天前
|
关系型数据库 MySQL Linux
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
|
11天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks集成实例绑定到同一个vpc下面,也添加了RDS的IP白名单报错:数据源配置有误,请检查,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
26 0
|
11天前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 20.04 + mysql8 安装以及配置大小写不敏感
Ubuntu 20.04 + mysql8 安装以及配置大小写不敏感
|
11天前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之在DataWorks中配置RDS MySQL数据源的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
27 0
|
1天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
|
1天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections