前言本次搭建目标为1主2从MySQL主从同步结构。采用CentOS8作为操作系统,IP为[10.0.0.211,10.0.0.212,10.0.0.213]。MySQL版本为8.0.19,端口均采用3306。本文仅讲解主从配置,因此安装MySQL的方式请参考安装文档。

GTID模式介绍

一、GTID Replication介绍

从MySQL5.6开始增加了强大的GTID(Global Transaction ID,全局事务ID)这个特性,用来强化数据库的主备一致性, 故障恢复, 以及容错能力。用于取代过去传统的主从复制(即:基于binlog和position的异步复制)。

借助GTID,在发生主备切换的情况下,MySQL的其他slave可以自动在新主上找到正确的复制位置,这大大简化了复杂复制拓扑下集群的维护,也减少了人为设置复制position发生误操作的风险。另外,基于GTID的复制可以忽略已经执行过的事务,减少了数据发生不一致的风险。

二、GTID组成

GTID是由server_uuid和事务id组成的,即GTID=server_uuid:transaction_id。

server_uuid,是在MySQL第一次启动时自动生成并持久化到auto.cnf文件(存放在数据目录下,每台机器的server_uuid都不一样。

transaction_id,是一个从1开始的自增计数,表示在这个主库上执行的第n个事务。MySQL会保证事务与GTID之间的1:1映射,如:6ba9a76d-606b-11ea-b3ce-000c29cb3421:1

表示在以6ba9a76d-606b-11ea-b3ce-000c29cb3421为唯一标识的MySQL实例上执行的第1个数据库事务。

一组连续的事务可以用 "-" 连接的事务序号范围表示。例如:6ba9a76d-606b-11ea-b3ce-000c29cb3421:1-15

三、GTID的作用

1.根据GTID可以知道事务最初是在哪个实例上提交的

2.GTID的存在方便了Replication的Failover

四、GTID复制实现的工作原理

1.master更新数据时,会在事务前产生GTID,一同记录到binlog日志中

2.slave端的I/O线程将变更的binlog,写入到本地的relay log中

3.SQL线程从relay log中获取GTID,然后对比slave端的binlog是否有记录(所以MySQL5.6 slave端必须开启binlog)

4.如果有记录,说明该GTID的事务已经执行,slave会忽略

5.如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog

6.在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描

五、GTID使用限制

1.MySQL5.7之后才开始支持动态切换GTID相关的参数

2.不支持CREATE TABLE ... SELECT statements

3.不支持CREATE TEMPORARY TABLE statements inside transactions

4.transaction or statement 既更新了事务表又更新了非事务表

5.使用GTID复制从库跳过错误时,不支持执行sql_slave_skip_counter参数的语法

六、基于GTID复制的优点

1.根据传统的复制原理,当连接发生故障时,需要重新连接到master主机,需要找到binlog和position,然后change master to 连接到master主机,此过程需要人工来做,比较麻烦,也容易出错,尤其是master写操作较多时,更不容易确定position,如果flush table with read lock,势必会影响到线上业务。而GTID复制方式不需要找master的binlog和position,只需要知道master的ip.端口.账号密码,即可进行复制,MySQl会通过内部机制自动找点同步(MASTER_AUTO_POSITION=1)

简单来说就是:简化复制。传统复制是基于file和position来实现的,而file和position是人为确定的,file还好一些,但是position却是实时变动的,难以确定,除非对全库加读锁,但这势必会对线上业务产生影响,GTID会自动找position进行数据同步

2.多线程复制(基于库),在MySQL5.6以前的版本,slave的复制是单线程的。一个事件一个事件的读取应用。而master是并发写入的,所以延迟是避免不了的。唯一有效的方法是把多个库放在多台slave,这样又有点浪费服务器。在MySQL5.6里面,我们可以把多个表放在多个库,这样就可以使用多线程复制,当只有1个库,多线程复制是没有用的(即:所谓的并行复制)

简单来说就是:跟多线程复制相关。多线程复制是基于组提交方式实现的,而组提交信息是存储在GTID中的

七、官方参考文档

https://dev.mysql.com/doc/refman/8.0/en/replication-gtids.html

安装准备1.CentOS8服务器3台[1核4线程1G]

主:10.0.0.211

从:10.0.0.212

从:10.0.0.213

2.已经安装好的MySQL服务器3台

MySQL版本需一致,本次采用8.0.19。并且创建好需要同步的数据库(xujun_demo)

搭建主服务器配置

1.编辑my.cnf

在[mysqld]后面添加

# 主从同步配置

server-id=1

log-bin=mysql-bin

gtid-mode=on

enforce-gtid-consistency=on

log-slave-updates=on

2.重启MySQL数据库 service mysql restart

3.修改数据库信息

3.1.连接数据库 mysql -uroot -p

3.2.创建MySQL专用用户来同步数据 use mysql;

create user mysync@'%' identified by 'root';

grant all privileges on *.* to mysync@'%' with grant option;

ALTER USER 'mysync'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

flush privileges;

username:mysync

password:root

3.3.查看 show master status;

从服务器配置

1.编辑my.cnf

在[mysqld]后面添加 # 主从同步配置

server-id=2

gtid-mode=on

enforce-gtid-consistency=on

log-slave-updates=on

注意:server-id的值10.0.0.212为2,10.0.0.213为3。如果你有更多从机依次增加即可,不可重复。

2.重启MySQL数据库 service mysql restart

3.同步主机设置

3.1.命令连接MySQL mysql -uroot -p

3.2.同步参数设置 change master to \

master_host='10.0.0.211', \

master_user='mysync', \

master_password='root', \

master_port=3306, \

MASTER_AUTO_POSITION = 1;

3.3.启动同步 start slave;

3.4.查看状态 show slave status \G

同步成功显示

Slave_IO_State: Waiting for master to send event

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

测试在主服务器xujun_demo数据库添加数据,从服务器查看

意外测试

1.从机先关,主机再关。重启后恢复

2.主机先关,从机再关。重启后恢复

3.从机关机,主机未关,并产生数据。重启后恢复并同步数据

注意:主从xujun_demo数据库初始信息要相同,包括表结构、表数据、编码等,如果不相同,则将master主服务器中的信息先备份,然后再导入到从服务器

mysql 8.0配置主从同步_MySQL8.0.19开启GTID主从同步CentOS8相关推荐

  1. mysql 安装更改目录权限设置密码_mysql-8.0 安装教程(自定义配置文件,密码方式已修改)...

    下载zip安装包: MySQL8.0 For Windows zip包下载地址:https://dev.mysql.com/downloads/file/?id=476233,进入页面后可以不登录.后 ...

  2. mysql-8.0.14图文安装_mysql8.0.14安装配置方法图文教程(通用)

    mysql服务8.0.14安装(通用),供大家参考,具体内容如下 安装环境:windows 安装步骤: 1.下载zip安装包 2.解压zip安装包 3.配置环境变量 4.添加配置文件 5.cmd安装m ...

  3. mysql8.0 服务移除_MySQL8.0中已移除的特性,功能

    1. 说明 本文所说的都是已经从MySQL8.0中删除的特性,如果是从低版本升级到8.0的应用,如果使用到了这些特性应该注意避免使用这些特性或找到替代的特性.如:对于MySQL5.7和8.0的主从环境 ...

  4. iis5.0+php5.0+mysql5.0配置完全手册_IIS5.0+PHP5.0+MySQL5.0配置完全手册

    IIS5.0+PHP5.0+MySQL5.0配置完全手册 环境: windows Xp sp2 IIS5.0 + MySQL 5.0 + PHP 5.0.4 + 使用PHPWind3.0论坛程序 使用 ...

  5. win7 mysql8.0.11安装教程_mysql8.0.13下载与安装图文教程(示例代码)

    一.进入mysql网站:https://dev.mysql.com/downloads/mysql/ 二.进入Community选择MySQL Communtiy Server 三.将页面拉到最下面选 ...

  6. mysql8.0版本怎么启动_mysql8.0.11安装、启动与基本设置

    此次演示的是mysql 8.0.11的安装.启动与基本设置. 下载mysql-8.0.11-el7-x86_64.tar.gz 1.解压并重命名 [[email protected] ~]# cd / ...

  7. mysql解压版怎么退出_mysql-8.0.15-winx64 解压版安装教程及退出的三种方式

    1.官网下载,并解压 2.设置环境变量 配置MYSQL_HOME为MySQL的解压路径,并在path设置;%MYSQL_HOME%\bin 3.在MySQL解压路径下,新建my.ini 配置初始化参数 ...

  8. mysql第四步安装失败_MySQL8.0版本的安装以及解决安装后MySQL服务无法启动的问题...

    之所以写这篇博客是因为在服务器上部署项目时,项目死活连不上服务器,一度找了很久的原因,最后才知道是mysql-connector的版本太低了,和服务器的mysql版本不匹配.后来为了下次出现,我就索性 ...

  9. mysql 快速导出100万数据_mysql8.0如何快速生成100万数据人员信息数据

    DELIMITER $$DROP PROCEDURE IF EXISTSproc_gen_user;CREATE PROCEDURE proc_gen_user(l_cnt BIGINT)BEGIN ...

最新文章

  1. 【全网之最】全网最短代码——给名字、电话、账号、昵称加星号*添加隐私保护、身份证号加密、信息脱敏
  2. 深入浅出说编译原理(一)
  3. DLL 远程线程注入
  4. asynchttpclient 超时_dnf这才是混子的毕业套装,却发现超时空漩涡不买账!
  5. 决策树算法学习笔记(提升篇)
  6. Java生产环境下性能监控与调优详解 第7章 JVM层GC调优
  7. 【英语学习】【WOTD】adversary 释义/词源/示例
  8. html二叉树遍历,二叉树的遍历(前序、中序、后序、层次)
  9. [PyTorch] 神经网络处理图像
  10. 使用Delphi创建,解析,操纵XML文档
  11. 啊哈c语言第四章 pdf,啊哈!算法 PDF扫描版[73MB]
  12. 【NodeJs-5天学习】第一天篇② —— 安装NodeJs环境以及VsCode开发工具
  13. 【历史上的今天】7 月 5 日:Google 之母出生;同一天诞生的两位图灵奖先驱
  14. 示波器基本原理之一:带宽
  15. 月薪30K的运维工程师面试宝典(面试必备干货)
  16. MongoDB 5.0.8版本的使用
  17. 被误解的 Node.js
  18. a session ended very soon after starting. check that the command in profile default is correct
  19. 第一章:数字移动通信基础知识
  20. 如何查看是否有清华源/删除清华源,保留默认源

热门文章

  1. C++ 从双重检查锁定问题 到 内存屏障的一些思考
  2. linux 系统崩溃完全没有操作空间的系统修复
  3. asp.net Core多环境读取Json
  4. Linux 创建子进程执行任务
  5. mysql单表多timestamp的current_timestamp设置问题
  6. 文件操作(ifstream、ofstream、fstream)
  7. sql 优化 tips
  8. C++自动生成的成员函数
  9. ODBC、OLE连接各种数据库的连接字符串
  10. WinDbg安装与使用