MySQL8.0.19开启GTID主从同步CentOS8
GTID模式介绍
一、GTID Replication介绍
从MySQL5.6开始增加了强大的GTID(Global Transaction ID,全局事务ID)这个特性,用来强化数据库的主备一致性, 故障恢复, 以及容错能力。用于取代过去传统的主从复制(即:基于binlog和position的异步复制)。
借助GTID,在发生主备切换的情况下,MySQL的其他slave可以自动在新主上找到正确的复制位置,这大大简化了复杂复制拓扑下集群的维护,也减少了人为设置复制position发生误操作的风险。另外,基于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
1.根据GTID可以知道事务最初是在哪个实例上提交的
2.GTID的存在方便了Replication的Failover
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.在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描
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参数的语法
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
主:10.0.0.211
从:10.0.0.212
从:10.0.0.213
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
意外测试
1.从机先关,主机再关。重启后恢复
2.主机先关,从机再关。重启后恢复
3.从机关机,主机未关,并产生数据。重启后恢复并同步数据
注意:主从xujun_demo数据库初始信息要相同,包括表结构、表数据、编码等,如果不相同,则将master主服务器中的信息先备份,然后再导入到从服务器
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Windows10,CentOS7,CentOS8安装Nodejs环境
安装准备 1.下载node https://nodejs.org/zh-cn/ 安装 Windows Windows Binary (.zip) 安装 1.解压安装包到指定位置 如:D:\DevelopTools\node-v12.16.1-win-x64 2.配置环境变量 NODE_HOME=D:\DevelopTools\node-v12.16.1-win-x64Path+=%NODE_HOME% 3.查看打开cmd输入 node -vnpm -v LinuxLinux Binaries (x86/x64)安装1.解压安装包到指定位置如:/data0/node/node-v12.16.1-...
- 下一篇
CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
前言 Mycat关键特性 支持SQL92标准 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster 基于Nio实现,有效管理线程,解决高并发问题。 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。 支持单库内部任意join,支持跨库...