Mysql 的GTID主从复制方式

GTID的作用

GTID 是‘全局事务ID’的意思,在 MySQL5.6 中被添加进来

以前 MySQL 的主从复制是基于复制点的,slave 从 master 二进制日志的某个位置开始复制

有了 GTID 之后,就多了一种复制方式,MySQL 在每个事务操作时都会分配一个全局唯一的ID,slave 就可以基于这个ID进行复制,只要是自己没有复制过的事务,就拿过来进行复制,可以不用关心具体的复制位置了

基于GTID复制的优缺点

优点

  1. 可以更方便的故障转移,出现问题时,多个slave不用根据新master的二进制偏移量来同步了
  2. 主从配置更简单,在后面的配置过程中就可以看到

缺点

  1. 增加了SQL限制,例如不可以使用 create table ... select ... 这种方式直接建表插数据,必须分开,而在基于偏移量复制时是没有任何限制的
  2. MySQL版本限制,GTID是5.6时加入的,在5.7中被进一步完善,建议在5.7或者5.6的后期版本中使用,所以老版本无法使用,而且如果你的MySQL集群高可用方案使用的是MMM,那么也无法使用GTID,MMM只支持偏移量复制,MHA可以支持GTID

GTID主从复制的配置思路

配置过程

准备两台MySQL

Master中的操作

(1)确定 server uuid 不同

首先要确保两个MySQL的 server_uuid 不同,例如使用复制出来的两台虚机,或者在Docker中使用同一MySQL镜像的两个容器时,就会出现 uuid 相同的情况,会使复制失败

检查两个MySQL的uuid

mysql> SHOW VARIABLES like '%server_uuid%';

值相同时需要修改,查看 my.cnf 中 datadir 的位置,其目录下有一个文件 auto.cnf,把其中的 server-uuid 值改一下,注意不要增减长度,例如把最后一个字符改下即可

(2)配置GTID

修改 /etc/my.cnf,在[mysqld]下添加:

[mysqld]
...
log-bin=mysql-bin
server-id=221
gtid_mode=on
enforce-gtid-consistency=true
...

重启MySQL,登录客户端检查一下GTID是否已经开启

mysql> show global variables like '%gtid%';

配置的那两项为'ON'时说明配置成功

(3)导出数据

开始复制之前要使master与slave中的初始数据相同,使用适合自己的工具进行数据同步,例如使用 mysqldump

mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases -uroot -p111111 > all.sql

把生成的 all.sql 发送到 slave

(4)创建复制用户

创建一个用户,用于slave执行复制

mysql> GRANT REPLICATION SLAVE ON *.* to 'gtidrepli'@'%' identified by '123456';

Slave中的操作

(1)配置GTID

修改 /etc/my.cnf,在[mysqld]下添加:

server_id=207
log-bin=mysql-bin
read_only=on
gtid_mode=on
enforce-gtid-consistency=true
master_info_repository=TABLE
relay_log_info_repository=TABLE

保存后重启MySQL

(2)导入数据

mysql -uroot -p111111 < all.sql

(3)指定Master

使用 change master 命令配置 master 信息

mysql> change master to master_host='192.168.31.221',master_user='gtidrepli',master_password='123456',master_auto_position = 1;

(4)启动slave

mysql> start slave;

检查slave状态

mysql> show slave status \G;

以下两项为 YES 说明复制成功

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

可以到master中做一些测试操作,到slave中检查是否已经同步

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2016-10-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MYSQL轻松学

MySQL5.7并发复制演进

MySQL5.5及以前的复制 一般主从复制有三个线程且都是单线程: Binlog Dump(主) --> IO Thread(从) --> SQL Threa...

3675
来自专栏L宝宝聊IT

Mysql性能优化——慢查询分析

MYSQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入...

1312
来自专栏耕耘实录

Zabbix最佳实践一:Zabbix4.0.2的安装与配置

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

7353
来自专栏腾讯数据库技术

MySQL Binlog实用攻略

本文简要介绍 binlog 原理及其在恢复、复制中的使用方法,更多深入分析可参考 mysql 官方文档。

8.8K2
来自专栏软件工程师成长笔记

centOS7安装MySQL流程介绍

1、隐藏密码 如:MySQL 连接远程数据库(192.168.5.116),端口“3306”,用户名为“root”,密码“123456”(这是我乱写的地址哈)...

2312
来自专栏java一日一条

理解MySQL——复制(Replication)

1、复制概述 1.1、复制解决的问题 数据复制技术有以下一些特点: (1) 数据分布 (2) 负载平衡(load balancing) (3) ...

923
来自专栏散尽浮华

一台服务器多实例mysql做主从复制

在一台服务器上开两个端口的mysql(3306、3307),做成主从复制环境 1)安装mysql(安装过程这里就不做过多介绍) 参考:http://www.cn...

3427
来自专栏我的博客

MySQL配置主从复制

主数据库 10.200.11.224 从数据库 10.200.11.230 1、在主数据库添加用户 添加用户 GRANT REPLICATION S...

3669
来自专栏云计算教程系列

如何在CentOS 7上安装和使用PostgreSQL

关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种存储,组织和访问信息的结构化方法。

2211
来自专栏腾讯云数据库(TencentDB)

腾讯云 CDB : 深入解析 MySQL binlog

本文简要介绍 binlog 原理及其在恢复、复制中的使用方法。

3.2K11

扫码关注云+社区

领取腾讯云代金券