检查两台server_id
select @@server_id;
主库创建复制专用用户
create user 'repl' identified by'123456';
grant replication slave on *.* to repl@'%';
select user,host from mysql.user;
查看主库binlog
select @@log_bin;
在gtid复制下,从库开启主从:
change master to master_host='10.10.4.53',master_port=3306 ,master_user='repl',master_password='123456',master_auto_position=1;
start slave
show slave status\G
从库重配:
reset master;
stop slave;
reset slave all;
附:
主库配置文件:
[mysqld]
user=mysql
datadir=/data/3306
basedir=/app/database/mysql
port=3306
socket=/data/3306/mysql.sock
pid-file=/data/3306/mysqld.pid
log-error=/data/3306/mysqlerr.log
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=/data/3306/mysql-slow.log
long_query_time=1
symbolic-links=0
explicit_defaults_for_timestamp=1
log_bin=/binlog/mysqlbin
log_bin_index=/binlog/mysql-bin.index
binlog_format=row
sync_binlog=1
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
[mysql]
socket=/data/3306/mysql.sock
prompt=vl7bjfomysql01[\\d]
从库改server_id,以及加个read_only=1即可,prompt也可以改一下,不过无关紧要
如果是用xtrabackup进行主从搭建的话,需要手动设置gtid_purged。
查看gtid相关全局变量:
show global variables like '%gtid%';
仅查看gtid_purged:
select @@GLOBAL.GTID_PURGED;
将gtid_purged设置为备份文件中的gtid_purged
首先过滤一下:
cat all116_20211123.sql |grep -B0 -A2 -w 'GLOBAL.GTID_PURGED'
然后将打印的结果设置到从库
SET @@GLOBAL.GTID_PURGED='刚才打印出来的结果';
如果是使用mysqldump进行从库搭建,则不能加--set-gtid-purged=OFF,否则gtid_purged的信息就不记录了。
如果加了的话,那只能参考上述方法将GTID_PURGED手动设置一下。
注:
如果原来此节点是一个故障节点(不干净),我们记得先reset master;和reset slave;
故障处理:
如遇到我之前更改root密码导致的事务冲突问题:
show slave status;
找到已接收但未执行的gtid(Retrieved_Gtid_Set),已执行的gtid(Executed_Gtid_Set),以及主节点的uuid,判断出下一个gtid是多少
stop slave;
跳过:
SET GTID_NEXT= '6d257f5b-5e6b-11e8-b668-5254003de1b6:14567'
begin;
commit;
这样就跳过了
再改回来
SET SESSION GTID_NEXT = AUTOMATIC;
重启从库
START SLAVE;
或者按数量跳过(仅限非gtid模式)
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1