目录
一、master01主库和node01从库的my.cnf的配置信息
1. master01主库my.cnf配置
2. node01从库的my.cnf配置
二、主节点上创建复制账号并创建权限
三、在从库上执行MySQL配置主从复制账号
3.1:在从节点执行:start slave 命令,启动功能。
3.2:查看主从复制状态命令
3.3:你在主库上创建数据库demo,并在里面创建表添加数据,这时候过几秒后刷新从库就会把数据自动同步过来
3.4: 证明已经开启了GTID复制模式
四、生产如何从传统的复制模式切换到GTID复制模式
4.1: show slave status \G; 查看传统复制的状态情况
4.2: 在主从服务器上都设置GLOBAL.ENFORCE_GTID_CONSISTENCY
4.2: 在主从服务器上设置GLOBAL.ENFORCE_GTID_CONSISTENCY,确保所有事务都不能违反GTID的一致性。
4.3: 主从服务器配置新事务是匿名的
4.4: 主从服务器配置新事务是匿名的
4.5:在所有从库查询状态为0才能继续下一步。
4.6:确认没有匿名事件,就可以在主从的服务器上开启GTID_MODE
4.7: 查看GTID参数设置的目前状态
4.8:把传统复制停掉,执行 stop slave, 再执行change master to master_auto_position=1,然后start slave,开启主从复制。
4.9: 在主库上添加数据,然后查看主从复制状态。
4.10:证明已经开启了GTID复制的方式。
4.11:修改my.cnf的配置文件,重启数据库服务,避免数据库重启后失效。
前言
如果使用了GTID,启动一个新的复制从库或者切换到一个新库,就不必依赖log文件和position值。只需要知道master的IP,端口,账号密码即可,因为同步复制是自动的,MySQL通过内部机制GTID自动找点同步。
提示:master01主库,node01从库
[mysqld]
port=33306
datadir=/datah/data/mysqldata/mysql
socket=/var/lib/mysql/mysql.socksymbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pidcharacter-set-server=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
init_connect='SET NAMES utf8'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
wait_timeout=20000
max_user_connections=5000
max_allowed_packet=128M
thread_stack=262144#skip-grant-tables
#主库 GTID 复制配置
################ settings start ###################
server-id=100 #主库server-id
log-bin=on #开启binlog日志
binlog_format=row #row模式,保证后期不会出现数据不一致的情况gtid_mode=on #开启GTID复制模式
enforce_gtid_consistency=on################ settings end ###################
[mysqld]
port=33306
datadir=/datah/data/mysqldata/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
init_connect='SET NAMES utf8'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
wait_timeout=20000
max_user_connections=5000
max_allowed_packet=128M
thread_stack=262144
#skip-grant-tables
#从库开启 GTID 复制配置
################### settings start ###########################
server-id=101 #主库server-id
log-bin=on #开启binlog日志
binlog_format=row #row模式,保证后期不会出现数据不一致的情况
gtid_mode=on
enforce_gtid_consistency=on
#从库建议开启
log_slave-updates=1
################### settings end #############################
grant replication slave on *.* to 'mysync'@'%' identified by 'Abc123456';
flush privileges;
提示:新搭建的环境,就可以直接在从库上执行 change master to 语句(master_auto_position=1)了,不在使用binlog文件和position号,让主从复制的搭建变得简单。
master_log_file='mysql-bin.000001',
master_log_pos=37611
change master to master_host='172.16.25.205',
master_user='mysync',
master_password='Abc123456',
master_port=33306,
master_auto_position=1;
flush privileges;
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
mysql> show slave status \G;
mysql> show slave status \G;
提示:在生产环境中,MySQL5.7版本支持在线从复制模式切换到GTID模式。需要注意的是gtid_mode虽然支持动态修改,但是不支持跳跃式修改;既它的几个值的修改是有序的:从OFF←→ OFF_PERMISSIVE ←→ ON_PERMISSIVE ←→ ON,不能跳跃式执行。
备注:设置之后要确认错误日志中没有任何警告,如果有,就需要调整不兼容的语句才能往下继续执行,如果出现GTID不兼容的语句语法,在错误日志里面会记录,需要调整应用程序中的SQL避免不兼容的写法,直到完全没有产生不兼容的语句。
set @@GLOBAL.ENFORCE_GTID_CONSISTENCY=WARN;
flush privileges;
set @@GLOBAL.ENFORCE_GTID_CONSISTENCY=ON;
flush privileges;
set @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;
set @@GLOBAL.GTID_MODE=ON_PERMISSIVE;
show status like 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
set @@global.gtid_mode=on;
show variables like '%gtid%';
stop slave;
change master to master_auto_position=1;
start slave;
show slave status \G;
#开启GTID复制功能
gtid_mode=on
enforce_gtid_consistency=1
systemctl restart mysqld
温馨提示:如果小编分享的对你有所帮助的话,麻烦点个赞,鼓励一下,小编也不容易。