mysql(三)基于GDIT主从复制

本文介绍MySQL 5.6版本引入的基于GTID的复制方式,详细解释GTID的概念、工作原理及其与传统复制的区别。GTID作为全局唯一事务标识符,增强了数据库的一致性和容错能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一   说明

        mysql数据库从5.6.5开始新增一种基于GDIT的复制方式。GTID (Global Transaction ID) 是对于一个已提交事务的编号,并且是一个全局唯一的编号, GTID 实际上是由 UUID+TID 组成的,其中 UUID 是一个 MySQL 实例的唯一标识,TID 代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。通过GDIT保证每个主库上提交的事务在集群中有一个唯一的ID.这种方式强化了数据库的主备一致性,故障恢复以及容错能力。

      GTID是基于mysql事务实现的!

      事务是一系列操作,组成了一个逻辑工作单元,这个逻辑工作单元中的操作作为一个整体,要么全部成功,要么全部失败。

      主从复制,默认是通过pos复制(postion),就是说在日志文档里,将用户进行的每一项操作都进行编号(pos),每一个event都有一个起始编号(start)一个终止编号(end),我们在配置主从复制时从节点时,要输入master的log_pos值就是这个原因,要求它从哪个pos开始同步数据库里的数据,这也是传统复制技术

        MySQL5.6增加了GTID复制,GTID就是类似于pos的一个作用,不过它是整个mysql复制架构全局通用的,就是说在这整个mysql冗余架构中,它们的日志文件里事件的GTID值是一致的

二   GTID的相关特性

1、Gtid的工作原理

      master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。slave端的I/O 线程将变更的binlog,写入到本地的relay log中;SQL线程从relay log中获取GTID,然后对比slave端的binlog是否有记录,如果有记录,说明该GTID的事务已经执行,slave会忽略。如果没有记录,slave就会从relay log中执行该GTID的事务(相应的事务操作语句),并记录到binlog,在解析过程中会判断是否有主键,如果没有就用二级索引,如果有就用全部扫描。

2、基于GTID复制的优点

         一个事务对应一个唯一ID,一个GTID在一个服务器上只会执行一次,GTID是用来代替传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置,减少手工干预和降低服务故障时间,当主机挂了之后通过软件从众多的备机中提升一台备机为主机

pos与GTID有什么区别?

  • 两者都是日志文件里事件的一个标志,如果将整个mysql集群看作一个整体,pos就是局部的,GTID就是全局的

三   GTID主从部署

3、修改配置文件(/etc/my.cng)并且重新启动mysql(主库和从库都要配置)

#  my.cnf 配置文件的修改

############主(mysql1)################
log-bin=mysql-bin             # 如果哦下面的也写日志就太大了!
server_id=1                   # 每一个都不一样(为什么?)!
gtid_mode=ON                  # 开启gtid模式
enforce_gtid_consistency=true # 说明:强制gtid一直性,用于保证启动gitd后事务的安全,改成1也可以!

############从(mysql2)#################

server_id=2 #每一个都不一样!
gtid_mode=ON
enforce_gtid_consistency=true

## 主从端都重启服务systemctl restart mysqld

mysql 主从配置中的server-id的作用

自己理解:识别主从的库的唯一标识

进行相关配置

说明:主库

grant replication slave on *.* to repl@'172.25.2.%' identified by 'Wzj@170510';
mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
| sql_log_bin                     | ON                             |
+---------------------------------+--------------------------------+
6 rows in set (0.01 sec)
-- 从(mysql2)####
-- 在从库端先停掉slave,然后重新创建连接,不要受之前的影响!
stop slave
change master to master_host = '172.25.2.1',master_user = 'repl',master_password = 'Wzj@170510',
master_auto_position =1 ;

start slave; -->看对应的线程!
show master status; -->查看下状态!

(2)出现问题如下 

Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Auto_Position: 1

原因

#1.网络不通
#2.账户密码错误
#3.防火墙
#4.mysql配置文件问题
#5.连接服务器时语法
#6.主服务器mysql权限
#7.serevr-id是不是一样了!

(3)测试

## mysql(主测试)

insert into usertb values ('user2','456');

## mysql(从测试)

# 主库上进行相关操作,产生事务,观察mysql.gtid_executed表的变化情况

mysql> select * from mysql.gtid_executed;
+--------------------------------------+----------------+--------------+
| source_uuid                          | interval_start | interval_end |
+--------------------------------------+----------------+--------------+
| b2510a7b-a7b8-11e9-8f3b-525400a5e492 |              1 |            1 |
+--------------------------------------+----------------+--------------+
1 row in set (0.00 sec)

mysql> select * from wzj.usertb;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 123      |
| user2    | 456      |
+----------+----------+
2 rows in set (0.00 sec)

 

### XtraBackup 与 MySQL 主从复制配置 XtraBackup 是 Percona 提供的一个用于 InnoDB 存储引擎的热备份工具,支持在线进行数据库的物理备份,并且可以用于搭建主从复制环境。通过 XtraBackup 进行主从同步的配置通常包括以下几个关键步骤。 #### 备份主库数据 在主库上执行完整备份是配置主从复制的第一步。使用 `innobackupex` 工具可以创建一个一致性快照,同时保留事务日志信息,以便后续恢复和同步。以下是一个完整的备份命令示例: ```bash innobackupex --defaults-file=/data/dbdata/3306/my.cnf --user=root --password=kongzhong123 --port=3306 --socket=/data/dbdata/3306/mysql.sock --no-lock --slave-info --safe-slave-backup --compress --compress-threads=8 /data/bak_dir/mysql/3306/full/ > /data/bak_dir/mysql/3306/full.log 2>&1 ``` 该命令会生成一个压缩的完整备份,并将日志记录到指定文件中[^1]。 #### 恢复备份并准备从库 完成备份后,需要对备份进行“准备”操作,以确保其可用于恢复。以下是准备备份的命令: ```bash innobackupex --apply-log /data/bak_dir/mysql/3306/full/ ``` 如果使用了压缩备份,则需要先解压备份文件,再执行上述命令。准备好备份后,将其传输到从库服务器,并恢复到目标目录。 #### 配置从库 在从库上恢复备份后,需要配置从库以连接到主库。以下是在从库上设置主库信息的 SQL 命令: ```sql CHANGE MASTER TO MASTER_HOST='192.168.1.154', MASTER_USER='maxscale_monitor', MASTER_PASSWORD='maxscale123456', MASTER_PORT=3306, MASTER_LOG_FILE='master1-bin.000011', MASTER_LOG_POS=598081860, MASTER_USE_GTID=slave_pos, MASTER_CONNECT_RETRY=10; ``` 其中 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 的值可以从主库的备份信息中获取,或者通过 `SHOW MASTER STATUS` 获取最新的二进制日志位置[^2]。 #### 启动从库复制线程 在从库上执行以下命令启动复制线程: ```sql START SLAVE; ``` 随后可以通过以下命令查看从库的状态: ```sql SHOW SLAVE STATUS \G ``` 确认 `Slave_IO_Running` 和 `Slave_SQL_Running` 状态均为 `Yes`,表示主从复制已经成功启动。 #### 注意事项 1. **GTID 与非 GTID 模式**:如果主库启用了 GTID(全局事务标识符),则从库也应启用 GTID 模式,并在 `CHANGE MASTER TO` 命令中指定 `MASTER_USE_GTID=slave_pos`。这有助于简化故障切换和复制拓扑管理。 2. **MySQL 版本兼容性**:不同版本的 MySQL 在复制行为上可能有所不同,尤其是在 GTID 的处理方面。确保主从库的 MySQL 版本兼容性,避免因版本差异导致的问题。 3. **网络连接与权限**:确保从库能够通过网络访问主库,并且用于复制的用户具有足够的权限(如 `REPLICATION SLAVE` 权限)。 4. **定期检查复制状态**:即使复制正常运行,也应定期检查从库的复制状态,确保没有延迟或错误。 5. **重启服务**:如果在配置过程中修改了 MySQL 的配置文件,可能需要重启 MySQL 服务以使更改生效。可以使用以下命令重启服务: ```bash service mysql restart ``` 此命令适用于基于 SysVinit 的系统。如果是 systemd 系统,则应使用 `systemctl restart mysql` [^3]。 6. **增量备份与恢复**:除了完整备份外,还可以使用 XtraBackup 进行增量备份。增量备份仅捕获自上次备份以来发生变化的数据页,适用于频繁备份需求。恢复时需先应用完整备份,然后依次应用增量备份。 7. **逻辑备份与物理备份的选择**:虽然 XtraBackup 提供了高效的物理备份方式,但在某些情况下(如跨版本迁移、表结构变更等),逻辑备份(如 `mysqldump`)可能更为合适。逻辑备份可以避免因存储引擎或版本差异导致的兼容性问题[^5]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值