欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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优势

  1. 更简单的实现同步,不需要再找log_file和log_pos
  2. gtid是连续的,没有中断,数据一致性高,不会发生丢失
  3. 搭建主从更简单
  4. 比传动主从更安全

gtid劣势

  1. 不支持主从关系中存在非事务数据库
  2. 不支持create table … select语句
  3. 不支持针对临时表的操作:
  4. 开启 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