首页 > 数据库 > MySQL > 正文

详解MySQL主从复制实战 - 基于GTID的复制

2024-07-24 12:52:18
字体:
来源:转载
供稿:网友

 基于GTID的复制

简介

基于GTID的复制是MySQL 5.6后新增的复制方式.

GTID (global transaction identifier) 即全局事务ID, 保证了在每个在主库上提交的事务在集群中有一个唯一的ID.

在原来基于日志的复制中, 从库需要告知主库要从哪个偏移量进行增量同步, 如果指定错误会造成数据的遗漏, 从而造成数据的不一致.

而基于GTID的复制中, 从库会告知主库已经执行的事务的GTID的值, 然后主库会将所有未执行的事务的GTID的列表返回给从库. 并且可以保证同一个事务只在指定的从库执行一次.

实战

1、在主库上建立复制账户并授予权限

基于GTID的复制会自动地将没有在从库执行的事务重放, 所以不要在其他从库上建立相同的账号. 如果建立了相同的账户, 有可能造成复制链路的错误.

mysql> create user 'repl'@'172.%' identified by '123456';

注意在生产上的密码必须依照相关规范以达到一定的密码强度, 并且规定在从库上的特定网段上才能访问主库.

mysql> grant replication slave on *.* to 'repl'@'172.%';

查看用户

mysql> select user, host from mysql.user;+-----------+-----------+| user | host |+-----------+-----------+| prontera | % || root | % || mysql.sys | localhost || root | localhost |+-----------+-----------+4 rows in set (0.00 sec)

查看授权

mysql> show grants for repl@'172.%';+--------------------------------------------------+| Grants for repl@172.% |+--------------------------------------------------+| GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.%' |+--------------------------------------------------+1 row in set (0.00 sec)

2、配置主库服务器

[mysqld]log_bin = /var/log/mysql/mysql-binlog_bin_index = /var/log/mysql/mysql-bin.indexbinlog_format = rowserver_id = 101gtid_mode = ONenforce_gtid_consistency = ON#log_slave_updates = ON

NOTE: 把日志与数据分开是个好习惯, 最好能放到不同的数据分区

enforce_gtid_consistency 强制GTID一致性, 启用后以下命令无法再使用

create table ... select ...

mysql> create table dept select * from departments;ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.

因为实际上是两个独立事件, 所以只能将其拆分先建立表, 然后再把数据插入到表中

create temporary table

事务内部不能创建临时表

mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> create temporary table dept(id int);ERROR 1787 (HY000): Statement violates GTID consistency: CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can only be executed outside transactional context. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions.
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表