MySQL主从复制、基于SSL的主从复制、主主复制、半同步复制

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:
###########################################################
什么是主从复制
什么是主主复制
主从复制的实现
###########################################################
 
MySQL复制分为主从复制,主主复制。
什么是主从复制
主从复制指有一台器做为主服务器,一台或多台服务器做为从服务器。从服务器不写入任何数据,数据的来源是主服务器。复制的目的是为了数据同步,如果从服务器也写入数据的话,在主从架构里,主服务器是不会复制从服务器的数据的,所以会造成数据的不同步,所以,从服务器不能写入数据。MySQL复制的基础,就是二进制日志,因为二进志日志里面,记录了所有能改变或者能潜在改变数据库数据的SQL语句,当从服务器把这些SQL语句复制过来之后,再执行一遍,数据就会跟主服务器相同了。所以,从服务器的MySQL版本,一定要比主服务器高或才跟主服务器相同,最好是主从版本一样,这样就不会因为不同版本,SQL语句不同,而造成错误。
什么是主主复制
主主复制是指,两台或多台MySQL服务器,都为主服务器,大家相互复制,这样的好处是,每台服务器,都可以进行数据的写入操作,而主从里面,从服务器是不能进行写操作的。主主复制的原理,跟主从复制差不多,只不过是数据之间,是相互复制,相互同步的。
不管是主从复制,还是主主复制,其复制过程,都是异步的。可以加快数据的查询,而对数据的写入,没有任何提高。做主从或者主主复制,也可以实现对数据的冗余,当从服务器DOWN机的时候,主服务器可以正常工作而不受任何影响。当主服务器DOWN机的时候,只需要将从服务器暂时切换为主服务器即可。也方便数据的备份,备份的时候,可以停止从服务器,然后对从服务器上的数据进行备份,备份完成后,再启用。
 
主从复制的实现
START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让主服务器发送二进制日志。
主服务器创建一个Binlog Dump线程将二进制日志中的内容发送到从服务器。从服务器I/O 线程读取主服务
器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继
日志。第3个线程是SQL 线程,从服务器使用此线程读取中继日志并执行日志中包含的更新。
SHOW PROCESSLIST语句可以查询在主服务器上和从服务器上发生的关于复制的信息。
 
从服务器在数据目录中另外创建两个状态文件master.info 和relay-log.info。状态文件保存
在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服
务器读取了多少二进制日志,以及处理自己的中继日志的程度。
 
从服务器flush tables with read lock;之后,数据暂时就不能同步了,只有解锁之后,复制过来的语句,才会被执行。
从服务器可以不用关闭二进制日志,也可以不用开户中继日志,因为服务器会自动帮你开户或关闭。不关闭二进制日志,从主服务器复制过来的SQL语句,执行的时候,也不会被记录到二进制日志,只有在本机执行的SQL语句,才会被记录到二进制日志。中继日志默认存放在数据目录下,文件名为 主机名.relay-00000N。如果想保存到其它位置,可以在配置文件里面进行指定。
 
1、安装MySQL数据库(略)
2、配置主从服务器
主服务器操作
 
 
  1. # vim /etc/my.cnf 
  2. server-id = 1   //一定不能跟从服务器一样,这里使用默认即可 
  3. log-bin = mysql-bin //开户指定MySQL的二进制日志及保存位置,默认开户,保存在数据目录中 
  4. sync-binlog=1       //立即同步到磁盘,建议开户 
  5.  
  6. mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO repl@'1.1.1.2' IDENTIFIED BY '123456'; 
  7. mysql> FLUSH PRIVILEGES; 
  8.     REPLICATION CLIENT允许在复制主机(Master)和从机(Slave)上使用SHOW STATUS  
  9.     REPLICATION SLAVE允许复制从服务器连接到主服务器  
 
从服务器操作
 
 
  1. # vi /etc/my.cnf 
  2. #log-bin = mysql-bin    //加#号表示关闭,也可以不关闭 
  3. server-id = 11          //ID号,一定不能跟主服务器相同 
  4. relay-log = relay-bin   //定义中继日志保存的位置及文件名,也可以不用定义 
  5. relay-log-index = relay-bin-index   //中继日志索引文件的名字及保存位置 
  6.  
  7. mysql> CHANGE MASTER TO MASTER_HOST='1.1.1.1',MASTER_USER='repl',MASTER_PASSWORD='123456'
  8. mysql> START SLAVE; 
  9. mysql> SHOW SLAVE STATUS; 
 
能看到以下两项为YES,说明从服务器工作正常
 
 
  1. Slave_IO_Running: Yes 
  2. Slave_SQL_Running: Yes 
 
 
 
  1. mysql> show processlist \G 
  2. *************************** 1. row *************************** 
  3.      Id: 6 
  4.    User: system user 
  5.    Host:  
  6.      db: NULL 
  7. Command: Connect 
  8.    Time: 1159 
  9.   State: Waiting for master to send event 
  10.    Info: NULL 
  11. *************************** 2. row *************************** 
  12.      Id: 7 
  13.    User: system user 
  14.    Host:  
  15.      db: NULL 
  16. Command: Connect 
  17.    Time: -153412 
  18.   State: Slave has read all relay log; waiting for the slave I/O thread to update it 
  19.    Info: NULL 
   
可以看到有两个线程,一个等待主服务器发送数据的线程,叫I/O,一个读取中继日志并执行,然后等待slave上的I/O线程更新中日志的,叫SQL线程
 
然后在主服务器上创建一个数据库,在从服务器上查看一下,可以看到数据库,说明是OK的。如果从服务器没有关闭二进制日志,主服务器上创建数据库,在从服务器同步完成后,可以在中从服务器的中继日志里面,看到创建数据库的SQL语句,但是在二进制日志里面,是看不到的。从服务器的二进制日志,只记录直接在从服务器上执行SQL语句,而不记录从主服务器上复制SQL语句,然后执行的语句。在从服务器上直接创建数据库,可以看到,从服务器的二进制日志记录语句的。但是主服务器,不会同步从服务器的数据,这就是主从复制。
 
也可以把以下配置写到从服务器里面,而不用再CHANGE MASTER TO这么麻烦了,另外还有一些其它的定义。
 
 
  1. // 配置slave服务器/etc/my.cnf 文件,添加以下内容: 
  2. server-id=2 # 从服务器ID号,不要和主ID相同 
  3. master-host=1.1.1.3 # 指定主服务器IP地址 
  4. master-user=repl # 指定在主服务器上可以进行同步的用户名 
  5. master-password=123456 # 密码 
  6. master-port=3306 # 同步所用端口 
  7. master-connect-retry=60 # 断点从新连接时间 
  8. replicate-ignore-db=mysql # 屏蔽对mysql库的同步 
  9. replicate-do-db=test1 # 同步的数据库的名称 
 
常用排错命令及其解释:
 
 
  1. flush master;   //清空二进制日志 
  2. flush slave;    //清空二进制日志 
以上命令,在主从复制出错的时候,特别是报字段重复的时候,清空一下主服务器和从服务器的二进制日志,然后再用CHANGE MASTER TO命令指向,然后再开户从服务器,应该就不会报错了。
注意:以上两个命令会清空二进制日志,在生产环境请确保已经备份了日志,并且没有数据写入。
 
 
 
  1. show master status;     //查看主服务器当前使用的二进制文件,及二进制文件的位置 
说明:如果不想清空二进制日志,但是错误又不容易排查,可以在指定主服务器的时候,指定主服务器使用的二进制文件和二进制文件的位置,表示从当前二进制文件的位置,开始往后复制。不复制之前的内容。在此之前,可以通过mysqldump命令,先将数据导出,然后再导入到从服务器。来实现数据一致,然后再使用命令指定二进制文件及位置,以确保主从数据一致。
 
以上,到此,主从复制就结束了。
 

本文转自 gm100861 51CTO博客,原文链接:http://blog.51cto.com/gm100861/834298
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
129 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
108 40
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
254 11
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
160 14
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
145 24
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
275 0
Mysql中搭建主从复制原理和配置
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
175 82
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等