mysqlGTID主从配置
程序员文章站
2024-01-16 13:16:16
GTID主从简介 GTID是基于mysql生成的事务ID,由服务器ID和事务ID组成。 这个ID在主库及从库上都是唯一的。 这个特性可以让mysql的主从复制变得更加简单,一致性更加可靠。 GTID优势 1. 更简单的实现同步,不需要再找log_file和log_pos 2. GTID是连续的,没有 ......
gtid主从简介
gtid是基于mysql生成的事务id,由服务器id和事务id组成。
这个id在主库及从库上都是唯一的。
这个特性可以让mysql的主从复制变得更加简单,一致性更加可靠。
gtid优势
- 更简单的实现同步,不需要再找log_file和log_pos
- gtid是连续的,没有中断,数据一致性高,不会发生丢失
- 搭建主从更简单
- 比传动主从更安全
gtid劣势
- 不支持主从关系中存在非事务数据库
- 不支持create table … select语句
- 不支持针对临时表的操作:
- 开启 gtid 后不能再使用原来的传统的复制方式;
配置gtid主从
环境:
- 主数据库
- centos7/redhat7
- ip-192.168.233.129
- hostname-lynk
- 有数据
- 副数据库
- centos7/redhat7
- ip-192.168.233.247
- hostname-hyrule
- 无数据
给从库授权
#以下操作在主库进行 mysql> create user 'repl'@'192.168.233.247' identified by 'repl123'; query ok, 0 rows affected (0.00 sec) mysql> grant replication slave on *.* to 'repl'@'192.168.233.247'; query ok, 0 rows affected (0.00 sec)
确保数据一致
#新开一个终端,对主库锁表,防止配置期间有其他人写入,锁表期间不能关闭终端或退出mysql交互式命令行 mysql> flush tables with read lock; #全备主库 [root@lynk ~]# mysqldump -uroot -plynk123~ --all-databases > /opt/all-201902271749.sql #复制备份文件到从库 [root@lynk ~]# scp /opt/all-201902271749.sql root@192.168.233.247:/opt/ #在从库恢复主库的备份 [root@hyrule ~]# mysql -uroot -plynk123~ < /opt/all-201902271749.sql
配置主库
[root@lynk ~]# vim /etc/my.cnf #添加以下内容 #数据库服务器唯一标识符,主库的server-id值必须比从库的大 server_id=1 gtid_mode=on #强制gtid一致性,开启后对于特定create table不被支持 enforce_gtid_consistency=on log_bin=master-binlog log-slave-updates=1 binlog_format=row skip_slave_start=1 #结束主库锁表状态,只要退出另一个终端中mysql交互式命令行就行了 mysql> quit #重启主库 [root@lynk ~]# systemctl restart mysqld
配置从库
[root@hyrule ~]# vim /etc/my.cnf #添加以下内容 gtid_mode=on enforce_gtid_consistency=on server_id=2 log-bin=slave-binlog log-slave-updates=1 binlog_format=row skip_slave_start=1 #重启从库 [root@hyrule ~]# systemctl restart mysqld #配置主从复制 mysql> change master to -> master_host='192.168.233.129', -> master_user='repl', -> master_password='repl123', -> master_port=3306, -> master_auto_position = 1; query ok, 0 rows affected, 2 warnings (0.03 sec) mysql> start slave; query ok, 0 rows affected (0.01 sec) mysql> show slave status \g #确保以下两项是yes slave_io_running: yes slave_sql_running: yes