MySQL基于GTID主从搭建怎么实现

54次阅读
没有评论

共计 5224 个字符,预计需要花费 14 分钟才能阅读完成。

本篇内容介绍了“MySQL 基于 GTID 主从搭建怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、用 xtarbackup 备份数据库 1.1 优势

使用 xtarbackup 来做主从的前期准备是因为 xtarbackup 备份数据和恢复数据都很快,特别适合数据量很大的数据库备份,而且它的安装非常的简单,使用也很简单 ….(巴拉巴拉,废话编不出来了)。

1.2 安装

具体版本根据自己的具体情况来选择。就下面这几步就安装好了,是不是非常简单 …..

# rpm -Uvh https://www.percona.com/redir/downloads/percona-release/redhat/percona-release-0.1-3.noarch.rpm
# yum list | grep percona
# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL 
# rpm -Uvh ftp://rpmfind.net/linux/epel/6/x86_64/libev-4.03-3.el6.x86_64.rpm
# yum install percona-xtrabackup –y

1.3 使用 1.3.1 普通备份

innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /data/backupMysql/

1.3.2 tar 备份

(1)、备份到本地

#  不压缩
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /data/backupMysql/ /data/mysql.tar
#  压缩
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /data/backupMysql/ | gzip  /data/mysql.tar.gz

(2)、备份到远程

#  不压缩
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /data/backupMysql/ | ssh root@192.168.1.7 \  cat -  /data/mysql.tar
#  压缩
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /data/backupMysql/ | | ssh root@192.168.1.7 \  gzip  /data/mysql.tar.gz

(3)、解压方式

#  未经过压缩的文件解压
tar xvf mysql.tar -C /data
#  压缩过的文件解压
tar zxvf mysql.tar.gz -C /data

1.3.3 xbstream 备份

(1)、备份到本地

#  不压缩
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=xbstream /data/backupMysql/ /data/mysql.xbstream
#  压缩
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=xbstream --compress /data/backupMysql/  /data/mysql_compress.xbstream

(2)、备份要远程

#  不压缩
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=xbstream /data/backupMysql/| ssh root@192.168.1.7  xbstream -x -C /backup/stream 
#  压缩
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=xbstream --compress /data/backupMysql/ | ssh root@192.168.1.7  xbstream -x -C /backup/stream

(3)、解压方式

####  未压缩的
xbstream -x   mysql.xbstream -C /data
####  压缩过的
# 1、先解压 xbstream
xbstream -x   mysql_compress.xbstream -C /data
# 2、再解压 qp 压缩格式
for bf in `find . -iname  *\.qp  do qpress -d $bf $(dirname $bf)   rm $bf; done
注:如果 xtrabackup 版本大于 2.1.4,可以直接通过以下方式解压第二步。innobackupex --decompress /data

1.3.4 恢复

先将原备份压缩包解压到一个目录,然后执行下面语句恢复。

innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /var/lib/mysql/backup/

注:在做备份,解压,恢复的过程中可以借助分屏工具,我喜欢用 screen。

二、基于 GTID 做数据同步 2.1 GTID 的概念

1、全局事务标识:global transaction identifiers。

2、GTID 是一个事务一一对应,并且全局唯一 ID。

3、一个 GTID 在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。

4、GTID 用来代替传统复制方法,不再使用 MASTER_LOG_FILE+MASTER_LOG_POS 开启复制。而是使用 MASTER_AUTO_POSTION= 1 的方式开始复制。

5、MySQL-5.6.5 开始支持的,MySQL-5.6.10 后开始完善。

6、在传统的 slave 端,binlog 是不用开启的,但是在 GTID 中 slave 端的 binlog 是必须开启的,目的是记录执行过的 GTID(强制)。

2.2 GTID 的组成

GTID = source_id:transaction_id source_id:用于鉴别原服务器,即 mysql 服务器唯一的的 server_uuid,由于 GTID 会传递到 slave,所以也可以理解为源 ID。

transaction_id:为当前服务器上已提交事务的一个序列号,通常从 1 开始自增长的序列,一个数值对应一个事务。

示例:          3E11FA47-71CA-11E1-9E33-C80AA9429562:23 前面的一串为服务器的 server_uuid,即 3E11FA47-71CA-11E1-9E33-C80AA9429562,后面的 23 为 transaction_id

2.3 GTID 的原理

1、当一个事务在主库端执行并提交时,产生 GTID,一同记录到 binlog 日志中。

2、binlog 传输到 slave, 并存储到 slave 的 relaylog 后,读取这个 GTID 的这个值设置 gtid_next 变量,即告诉 Slave,下一个要执行的 GTID 值。

3、sql 线程从 relay log 中获取 GTID,然后对比 slave 端的 binlog 是否有该 GTID。

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

5、如果没有记录,slave 就会执行该 GTID 事务,并记录该 GTID 到自身的 binlog,在读取执行事务前会先检查其他 session 持有该 GTID,确保不被重复执行。

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

2.4 GTID 的优势

1、更简单的实现 failover,不用以前那样在需要找 log_file 和 log_pos。

2、更简单的搭建主从复制。

3、比传统的复制更加安全。

4、GTID 是连续的没有空洞的,保证数据的一致性,零丢失。

2.5 具体搭建过程

对于 GTID 的配置,主要修改配置文件中与 GTID 特性相关的几个重要参数,mysql 版本建议 mysql-5.6.5 版本以上。

2.5.1 开启主(master)Gtid

其主要配置如下:

[mysqld]
#GTID:
server_id=135 # 服务器 id
gtid_mode=on # 开启 gtid 模式
enforce_gtid_consistency=on # 强制 gtid 一致性,开启后对于特定 create table 不被支持
#binlog
log_bin=master-binlog
log-slave-updates=1 
binlog_format=row # 强烈建议,其他格式可能造成数据不一致
#relay log
skip_slave_start=1

2.5.2 在 master 上进行数据备份

innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /data/backupMysql/ | | ssh root@192.168.1.7 \  gzip  /data/mysql.tar.gz

2.5.3 解压备份的数据

tar zxvf /data/mysql.tar.gz -C /data/baskup

2.5.4 配置 slave 的配置文件

[mysqld]
#GTID:
gtid_mode=on
enforce_gtid_consistency=on
server_id=143
#binlog
log-bin=slave-binlog
log-slave-updates=1
binlog_format=row # 强烈建议,其他格式可能造成数据不一致
#relay log
skip_slave_start=1

2.5.5 恢复数据

innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/backup

2.5.6 获取 GTID 节点

more /data/backup/2018-02-08_15-03-18/xtrabackup_binlog_info

2.5.7 配置主从

(1)、在 master 上授权

grant replication slave on *.* to slaveuser@ 192.168.1.7  identified by  c2xhdmV1c2Vy

(2)、在 slave 上配置

stop slave;
SET GLOBAL gtid_purged= c5b5ffe7-ce66-11e7-9a19-00163e00013d:1-515758 
CHANGE MASTER TO MASTER_HOST= 192.168.1.6 ,MASTER_PORT=3306,MASTER_USER= slaveuser ,MASTER_PASSWORD= c2xhdmV1c2Vy ,MASTER_AUTO_POSITION=1;
start slave;

2.6 已运行经典复制 mysql 服务器转向 GTID 复制

a、按本文 2.5.2 描述配置参数文件;

b、所有服务器设置 global.read_only 参数,等待主从服务器同步完毕; mysql SET @@global.read_only = ON;

c、依次重启主从服务器;

d、使用 change master 更新主从配置;mysql CHANGE MASTER TO MASTER_HOST = host,   MASTER_PORT = port, MASTER_USER = user,   MASTER_PASSWORD = password,   MASTER_AUTO_POSITION = 1;

e、从库开启复制  mysql START SLAVE; f、验证主从复制

“MySQL 基于 GTID 主从搭建怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计5224字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)