首页 > 数据库 >mysql主从复制GTID模式

mysql主从复制GTID模式

时间:2024-06-20 10:21:06浏览次数:22  
标签:主从复制 复制 MASTER mysql 服务器 GTID

 版本8.0.36

 

主从复制的定义

是指把数据从一个Mysql服务器(主节点)复制到一个或多个Mysql服务器(从节点)中,会把主节点服务器中的所有数据库实例、特定数据库实例或特定表等,全部复制到从节点服务器中。

主从复制的原理

是通过基于日志的复制方式实现数据的同步。当主服务器上发生数据变更时,会将这些变更写入二进制日志(Binary Log)中。

从服务器通过连接到主服务器,请求从主服务器获取二进制日志,并将这些日志应用到自己的数据库中。

主从复制的优势

  • 提高读性能:通过设置从服务器(Slave),读操作可以被分摊到主服务器(Master)和从服务器上,从而提高整体的读取性能。主服务器负责处理写操作,从服务器负责处理读操作,从而降低主服务器的负载,提升整个系统的吞吐量。
  • 数据冗余和备份:通过主从复制,从服务器上的数据是主服务器的冗余副本。在主服务器发生故障时,从服务器仍然可以提供服务,并且可以通过将某个从服务器提升为新的主服务器来快速恢复服务。此外,从服务器也可以用于定期的备份操作,以确保数据的安全性和可恢复性。
  • 高可用性:通过主从复制,可以实现数据库的故障转移和高可用性。当主服务器发生故障时,可以手动或自动将某个从服务器提升为新的主服务器,继续提供数据库服务,从而实现快速的故障恢复。
  • 数据分析和报表生成:由于从服务器可以处理读操作,可以将其用于数据库的数据分析和报表生成等工作。这样可以避免对主服务器造成额外的负载,同时提供实时的数据分析和报表服务。
  • 数据分发和跨地域部署:主从复制可以用于将数据分发到不同的地理位置的从服务器上,从而实现跨地域的数据访问和部署。这对于全球化的应用程序和多地域灾备是非常有用的。
  • 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

主从复制的形式

  • 一主一从;
  • 一主多从;
  • 多主一从;
  • 双主复制;
  • 级联复制。

主从复制的模式

  • 异步模式(默认);
  • 半同步模式;
  • 全同步模式。

主从复制的类型

基于二进制日志复制(有三种形式)

  • 基于SQL语句的复制;
  • 基于行的复制;
  • 混合模式复制。

基于GTID复制(Mysql版本 >= 5.7及以上推荐使用)

GTID模式

GTID的概念

  • GTID即全局事务ID:global transaction identifier;
  • 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(强制)。

GTID的优势

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

GTID的原理

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

GTID的配置

Mysql主服务器

1、在Mysql的my.ini配置文件中添加以下参数:

gtid_mode=ON
enforce_gtid_consistency=true
server-id=46
log-bin=mysql-bin
binlog_format=row
log-slave-updates=1
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

binlog-ignore-db: 忽略同步的数据库

server-id: 唯一标识,同一网段一般以最后一个ip段命名

2、重启Mysql和创建复制用户

使用管理员打开cmd命令窗口,按照以下命令步骤分别执行:

#暂停服务;
net stop mysql
#开启服务;
net start mysql
#连接数据库,Password替换为自己数据库密码;
mysql -u root -pPassword
#创建一个用于复制的用户,userName和Password自行设置;
CREATE USER 'repl'@'%' IDENTIFIED BY 'Password';
#授予复制权限,repl即上步创建的用户名; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; #获取状态,记住File和Position两项参数,后面需要用到; 
SHOW MASTER STATUS;

Mysql从服务器

 1、在Mysql的my.ini配置文件中添加以下参数:

gtid_mode=ON
enforce_gtid_consistency=true
server_id=22
log-bin=mysql-bin
binlog_format=row
log-slave-updates=1

2、重启Mysql和创建复制用户

使用管理员打开cmd命令窗口,按照以下命令步骤分别执行:

#暂停服务;

net stop mysql

#开启服务;

net start mysql

#连接数据库,Password替换为自己数据库密码;

mysql -u root -pPassword

#配置复制,serverIP是主服务器IP地址,repl和password是刚在主服务器创建的用户,file和position是刚查看主服务器状态返回的参数;

CHANGE MASTER TO MASTER_HOST='12.11.21.46',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_AUTO_POSITION=1;

#启动复制;

START SLAVE;

#查看复制状态,输出中的Slave_IO_Running和Slave_SQL_Running的值为Yes,表示复制正在正常运行;

SHOW SLAVE STATUS\G;

SHOW SLAVE STATUS\G;

检查输出中的以下关键字段:

  • Slave_IO_Running: 是否为 "Yes"。
  • Slave_SQL_Running: 是否为 "Yes"。
  • Last_IO_Error: 是否为空,或是否有任何错误信息。
  • Last_SQL_Error: 是否为空,或是否有任何错误信息。

但是如果

     

 

 

 

标签:主从复制,复制,MASTER,mysql,服务器,GTID
From: https://www.cnblogs.com/init-007/p/18258162

相关文章

  • Docker部署安装应用大集合(Tomcat、Nginx、Mysql、Redis、MQ、Nacos、Zookeeper、Port
    Docker部署安装应用大集合(Tomcat、Nginx、Mysql、Redis、MQ、Nacos、Zookeeper、Portainer、MongoDB......) 精选 原创CodeDevMaster2022-11-1608:42:24博主文章分类:Docker©著作权文章标签dockermysqlNginxNacosMQ文章分类Docker云计算yyds干货盘点 Docker部署......
  • 成为MySQL DBA后,再看ORACLE数据库(十一、闪回技术)
    前文说到ORACLE通过undo实现数据的多版本模型,同样的道理ORACLE还通过undo实现了闪回查询的特性,本文将总结ORACLE的几种闪回技术。闪回技术是Oracle数据库独有的特性,支持各级恢复,包括行、事务、表、表空间和数据库范围。采用闪回技术,可以针对行级和事务级发生过变化的数据进行恢复,......
  • MySQL备份与恢复
    目录1.数据库备份的分类1.1数据备份的重要性1.2数据库备份的分类1.3常见的备份方法2.MySQL完全备份与恢复2.1MySQL完全备份2.2数据库完全备份分类2.3MySQL物理冷备份及恢复2.4mysqldump进行逻辑备份2.4.1mysqldump备份数据库2.4.2mysqldump备份数据表3.......
  • MySQL入门操作 10.0
    本文仅仅为了加强个人记忆,如果要学习建议点击链接去原文学习,参考学习文章:原文链接:https://blog.csdn.net/YRB20/article/details/117999665 触发器:注意上述格式中的on,触发器是作用在相应的表上,要设定自己所需要的表; 示例写法: 与创建存储过程相同,都是要使用:delimiter$$......
  • Linux部署Mysql(服务器)
     远程服务器:CentOS7.6(本地VM也一样)连接:XShell7与Xftp7 1. 下载tar包与准备工作查看系统的glibc版本:(我的是2.17)rpm-qa|grepglibc 官网下载对应的Mysqltar包:https://dev.mysql.com/downloads/mysql/ #查找与mysql相关的软件包......
  • 1950 Springboot汽修技能点评系统idea开发mysql数据库APP应用java编程计算机网页源码m
    一、源码特点 springboot汽修技能点评系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。前段主要技术bootstrap.cssjquery......
  • MySQL 查询数据库响应时长详解
    前言作为一名测试工程师,在性能测试中,查询数据库的响应时长是一个重要指标。MySQL提供了多种方法来监控和优化查询性能。本文将详细介绍如何使用MySQL的内置功能和工具来查询数据库响应时长,并分享一些性能优化的技巧。启用查询日志开启慢查询日志慢查询日志用于记录执......
  • linux中搭建mysql服务
    下载mysql安装包wgethttps://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz解压压缩包tar-xvfmysql-5.7.27-linux-glibc2.12-x86_64.tar.gz#移动文件夹mvmysql-5.7.27-linux-glibc2.12-x86_64/usr/local/mysqlmysql用......
  • MYSQL最左匹配原则及其底层逻辑
    目录前言一、最左匹配原则示例1.导入测试数据-索引(a,b,c)2.全值匹配查询3.连续匹配查询​编辑4.不连续匹配查询三、底层原理详解1.MYSQL优化器2.最左匹配原理前言最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会......
  • MySql入门操作集 6.0
    索引与完整性: 就是键之类的,通过键进行索引;看上图存在四种类型:nollnullprimarykeyuniqueforeignkey  对于键的设定可以在创建表的时候就添加相应的键:记得主键只设定一个作为索引吧好像;一般不设定实际意义,只是给他做一个标记作用用于索引其他的书写格式: 使......