Linux的企业-Mysql主从同步,Gtid,半同步,相关参数(1)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

一.Mysql主从同步

MySQL 支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充
当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这
些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服
务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封
锁并等待主服务器通知新的更新。
请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,
以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。
单向复制有利于健壮性、速度和系统管理:
1. 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份
2. 通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。
SELECT 查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改
数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该
负载均衡策略很有效,但一般是更新查询。
3. 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程
中主服务器可以继续处理更新。
MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾、备份、恢复、负载均衡等都是
有极大帮助的。

wKiom1nQ2Guh6xWZAAQCxQbWqrU520.png


二.配置环境

server2 主 172.25.29.2

server3 从 172.25.29.3


1.配置server2

wKioL1nQrP2Tt1oDAAAb5QNZOIk717.png

wKiom1nQrULjmtcmAABHalQTwYY899.png

wKioL1nQrP6QEu-dAABR5pwoBMQ295.png

log-bin=mysql-bin  启动二进制日志系统
binlog-do-db=test #二进制需要同步的数据库名,如果需要同步多个库,例如要再同步 westos
库,再添加一行“binlog-do-db=westos”,以此类推
server-id=1
#必须为 1 到 232–1 之间的一个正整数值
binlog-ignore-db=mysql #禁止同步 mysql 数据库


wKiom1nQrUOBY_rrAABgu-LQgDk292.png


进入到mysql中创建授权用户,查看master信息

wKiom1nQrUOD33g_AABU5t0p9mY570.png

wKiom1nQrUWhnHvHAABGfXgvCCg882.png



2.配置server3

配置文件只需写上id号即可

wKioL1nQrP-Thj1YAAA8DywF05o166.png


重启服务,将server2设置为主,注意log_file文件和log_pso文件位置,在server2上看

wKiom1nQrUSzSs3yAABSz8uIFJY738.png

wKioL1nQrP_jmKnKAABbif81KP8533.png


启动从数据库主机,查看状态

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果都是 yes,表示从库的 I/O,Slave_SQL 线程都正确开启.表明数据库正在同步

wKioL1nQrQDwb5ldAACSz7c0eAc357.png


查看同步的数据,显示正常

wKiom1nQrUWCRPlsAABS3qhg9Mo433.png


三.Gtid的设置

全局事务标识:global transaction identifiers。GTID是一个事务一一对应,并且全局唯一ID。一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。
GTID用来代替传统复制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS开启复制。而是使用MASTER_AUTO_POSTION=1的方式开始复制。MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。在传统的slave端,binlog是不用开启的,但是在GTID中slave端的binlog是必须开启的,目的是记录执行过的GTID(强制)。


优势:

更简单的实现failover,不用以前那样在需要找log_file和log_pos。更简单的搭建主从复制。比传统的复制更加安全。GTID是连续的没有空洞的,保证数据的一致性,零丢失。


工作原理:

(1)当一个事务在主库端执行并提交时,产生GTID,一同记录到binlog日志中。
(2)binlog传输到slave,并存储到slave的relaylog后,读取这个GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值。
(3)sql线程从relay log中获取GTID,然后对比slave端的binlog是否有该GTID。
(4)如果有记录,说明该GTID的事务已经执行,slave会忽略。
(5)如果没有记录,slave就会执行该GTID事务,并记录该GTID到自身的binlog,
   在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行。
(6)在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。


1.安装高版本5.7.19的mysql

   低版本不支持gtid

   删除之前的低版本的mysql文件

   安装完成后先配置好主从配置

   配置好server2,server3

wKiom1nQs8ujatMJAABew9T4XdY341.png

wKioL1nQs4biRBeuAABfv4CqUFE157.png


wKioL1nQtFbw7Oq3AAEU9pOhnXc838.png

wKiom1nQtJuiLg03AABM6EpjY0E213.png

wKiom1nQtJziUrLPAAAkKJrm4QI955.png

wKioL1nQtFfiX-e0AAA0lcTJLkI939.png

wKiom1nQtJyzpN4TAAArrbObbic832.png

wKioL1nQtFig0IPXAAD5xzzB110534.png

wKiom1nQtJ3RF0ArAACUUSaE08s204.png

完成主从复制的配置


2.配置Gtid


配置server1 vim /etc/my.cnf

wKioL1nQzrLhQIQ3AAAt8_BKNC8830.png


配置server2 vim /etc/my.cnf

wKiom1nQzvfRgNoZAAAVYt8hoJA934.png


wKioL1nQzrPADXSOAAA0rSMtm0Y818.png


登陆server3上的mysql创建server2主节点

wKiom1nQzvjRkNIFAACbhoLNdn8139.png


启动从服务,查看从状态

wKioL1nQzrOwsg_RAACq6Qx0Nmg251.png


3.测试

在server2上创建数据

wKioL1nQzrPT4YSRAABaPASpp8g774.png

wKiom1nQzvjwNrvzAABeS_D7jco352.png



在server3上查看server2上的数据

wKioL1nQzrPiiM5sAAB03su4dnQ008.png


查看从机的gtid更新表,已经有更新记录

wKiom1nQzvnDpmHdAABRtvl5AHY174.png


4.开启多线程并发复制

slave-parallel-type

slave-parallel-workers

wKioL1nQ1ALCPmgVAAA3ZU_0QBc828.png

wKioL1nQ1ALiOyS9AABCslugbIQ816.png


重启后查看show processlist进程,显示16

wKiom1nQ1EegsbaNAACzkbUnsk8733.png

wKiom1nQ1EeD3_fEAACsdzKeWho837.png

number of workers 为16


四.半同步 半同步主要是保证数据完整性防止数据丢失


1.半同步复制概念

       在说明半同步复制之前我们先来了解一下,什么是同步复制?同步复制:同步复制可以定义为数据在同一时刻被提交到一台或多台机器,通常这是通过众所周知的“两阶段提交”做到的。虽然这确实给你在多系统中保持一致性,但也由于增加了额外的消息交换而造成性能下降。使用MyISAM或者InnoDB存储引擎的MySQL本身并不支持同步复制,然而有些技术,例如分布式复制块设备(简称DRBD),可以在下层的文件系统提供同步复制,允许第二个MySQL服务器在主服务器丢失的情况下接管(使用第二服务器的复本)。了解了同步复制我们正下面来说一下,什么是半同步复制?

       MYSQL 5.5开始,支持半自动复制。之前版本的MySQL Replication都是异步(asynchronous)的,主库在执行完一些事务后,是不会管备库的进度的。如果备库不幸落后,而更不幸的是主库此时又出现Crash(例如宕机),这时备库中的数据就是不完整的。简而言之,在主库发生故障的时候,我们无法使用备库来继续提供数据一致的服务了。Semisynchronous Replication(半同步复制)则一定程度上保证提交的事务已经传给了至少一个备库。Semi synchronous中,仅仅保证事务的已经传递到备库上,但是并不确保已经在备库上执行完成了。

       此外,还有一种情况会导致主备数据不一致。在某个session中,主库上提交一个事务后,会等待事务传递给至少一个备库,如果在这个等待过程中主库Crash,那么也可能备库和主库不一致,这是很致命的。如果主备网络故障或者备库挂了,主库在事务提交后等待10秒(rpl_semi_sync_master_timeout的默认值)后,就会继续。这时,主库就会变回原来的异步状态。

MySQL在加载并开启Semi-sync插件后,每一个事务需等待备库接收日志后才返回给客户端。如果做的是小事务,两台主机的延迟又较小,则Semi-sync可以实现在性能很小损失的情况下的零数据丢失。

异步与半同步异同

       默认情况下MySQL的复制是异步的,Master上所有的更新操作写入Binlog之后并不确保所有的更新都被复制到Slave之上。异步操作虽然效率高,但是在Master/Slave出现问题的时候,存在很高数据不同步的风险,甚至可能丢失数据。

       MySQL5.5引入半同步复制功能的目的是为了保证在master出问题的时候,至少有一台Slave的数据是完整的。在超时的情况下也可以临时转入异步复制,保障业务的正常使用,直到一台salve追赶上之后,继续切换到半同步模式。


2.在主机server2上开启半同步

添加半同步插件

wKioL1nQ1dSBSqvOAABEM0CcejI673.png

wKiom1nQ1hnDK89oAAA11abI0c8088.png


查看半同步状态为OFF

       开启半同步

wKioL1nQ1dSyLgHCAAEWjzp8Z1k773.png


3.在主机server3上开启半同步

wKiom1nQ1hrT1-raAAA3bjt3x0c970.png

wKiom1nQ1hrxGJOeAABYjvpLUG0703.png


4.在主机server3上重启mysql的IO接口正常

wKioL1nQ1dWglWeSAAA0_Vh9JE0334.png


5.测试半同步

wKiom1nQ2JWDi8xlAABBcfG2REI213.png


主机半同步状态开启

wKioL1nQ2FDC0MpKAAD-_xP3Ss4578.png


主机创建数据很快同步到从机server3上

wKiom1nQ2JaQahdQAADsg4-S6cg589.png


查看从机半同步状态开启

关闭server3的IO接口

wKioL1nQ2FGQNHBwAABKcngkuXQ340.png


在主机server2上插入数据

wKiom1nQ2JaQd_aIAAAo-BrqBCE828.png


等待10s半同步后,server3无响应,server2转为异步传输

主机已经有了数据

wKioL1nQ2FHTAaAYAABStYBKbIk194.png


查看从机无刚才主机server2上插入的数据

再次启动IO接口,数据传同步过来

wKioL1nQ2FGRCo7wAABzON4aFdg216.png


查看从机的半同步状态

wKiom1nQ2JbwomcQAADNa285_Es916.png

6.半同步的永久设置

在server2配置文件中添加半同步选项开启

vim /etc.my.cnf

wKiom1nQ-EGSjcKPAAAv86HuwiE831.png

在server3上也开启,并开启只读模式

wKioL1nQ9_yxWhOmAABn35AWl4Q336.png

server2

10000ms为半同步的等待时间,超时后变为异步模式

wKioL1nQ9_2jfZjpAABt-v0E34Q445.png

server3的半同步也已经设置为自动开启

            只读模式自动开启

wKiom1nQ-ELjDvHHAAB-92NVTpQ922.png


7.expire_logs_days表示保留时间

wKiom1nQ-ELiLiO4AAA5EBxiplM025.png

wKioL1nQ9_2g9rk5AAA8SsRjUmU159.png


8.慢查询

慢查询已经开启

wKioL1nQ9_7gp7bHAABYfdVCyp8577.png


选择一个sleep模块,时间设置为默认的10秒

wKiom1nQ-ESC-DAhAAAgyp3dFYk905.png


查看慢查询状态为有一个慢查询

wKioL1nQ9_-gUDlXAAAsajKGJdM804.png


通过慢查询日志

wKiom1nQ-ESweNzbAADzAYF83cM259.png

wKiom1nQ-ESCbO3UAAA4OA-uwXY107.png

wKioL1nQ9__S6iyGAABfCMcvMWI794.png






      本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1970102,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
19天前
|
关系型数据库 MySQL
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
19 0
|
27天前
|
SQL 存储 关系型数据库
MySQL的主从复制&主从同步
MySQL的主从复制&主从同步
28 0
|
30天前
|
关系型数据库 MySQL API
Flink CDC产品常见问题之mysql整库同步到starrock时任务挂掉如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
SQL DataWorks 关系型数据库
DataWorks常见问题之dataworks同步Rds任务失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
25天前
|
存储 缓存 Linux
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
32 0
|
7天前
|
关系型数据库 MySQL Linux
linux CentOS 7.4下 mysql5.7.20 密码改简单的方法
linux CentOS 7.4下 mysql5.7.20 密码改简单的方法
13 0
|
12天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
27天前
|
网络协议 Linux API
Linux网络编程:shutdown() 与 close() 函数详解:剖析 shutdown()、close() 函数的实现原理、参数说明和使用技巧
Linux网络编程:shutdown() 与 close() 函数详解:剖析 shutdown()、close() 函数的实现原理、参数说明和使用技巧
55 0
|
7天前
|
SQL 关系型数据库 MySQL
mysql主从同步出错解决办法
mysql主从同步出错解决办法
7 0
|
15天前
|
Linux Shell
Linux脚本获取输入参数判断文件还是文件路径
Linux脚本获取输入参数判断文件还是文件路径
12 4