MySQL 主从管理

主从复制搭建--基于gtid

主从复制原理图

1 搭建数据库 单机版 2个节点

配置:

log-bin=mysql-bin
binlog_format=row
log_slave_updates=1 --(可选)
gtid_mode=ON
enforce_gtid_consistency=1

2 主库创建用户

create user 'slave'@'%' identified with mysql_native_password by 'password123';  

grant replication slave on *.* to slave@'%';

3 主库数据备份(新搭建的2个等同节点可跳过此步骤)

mysqldump -uroot -pxxx --socket=/data/mysql_3306/tmp/mysql.sock  -all-databases >all.sql 

4 从库

# 加载主库备份sql(新建的2个等同节点可跳过此步)
mysql> source /root/all.sql 
mysql> stop slave;
mysql> change master to
master_host='192.168.xx.xx',master_user='slave',master_password='password123',master_port=3306,master_auto_position=1;
mysql> start slave;

5 主从不一致处理

5.1 场景一 (从库删除数据,导致主从不一致)确认错误可以跳过

#(1)停止slave进程
mysql> STOP SLAVE;
#(2)设置事务号,事务号从Retrieved_Gtid_Set获取
#在session里设置gtid_next,即跳过这个GTID 或者查看last_SQL_Error 里的信息
mysql> SET GTID_NEXT= '1d257f5b-5e6b-11e2-b668-5254003de1b6:N';
#(3)设置空事物
mysql> BEGIN; COMMIT;
#(4)恢复事物号
mysql> SET SESSION GTID_NEXT = AUTOMATIC;
#(5)启动slave进程
mysql> START SLAVE;
#跳过一个事务之后,重启slave,恢复正常

5.2 方法二 reset slave all

-- gtid 方式
change master to master_host='xx.124.67', master_user='', master_password='', master_port=3306, master_auto_position=1;

-- 偏移量方式
change master to master_host='',master_user=xxx,master_password=xxx,master_port=xxx,master_log_file='mysqlbin.000105',master_log_pos=xxx,master_auto_position=0;

5.3 重置gtid_set(gtid_set不一致的情况下)

# 查看gtid_purged='xxxx'值,后面用
show slave status;

stop slave;

reset master;

select * from gtid_executed;

set @@global.gtid_purged='xxxxx:1-N';--N是第一步查看slave status中retrieved_gtid_set的值

reset slave all;

change master to master_host='xx.124.67', master_user='', master_password='', master_port=3306, master_auto_position=1;

start slave;

5.4 slave_exec_mode (会可能产生数据不一致问题)

set global slave_exec_mode=IDEMPOTENT;

set global slave_exec_mode=STRICT;

5.5 pt-checksum 工具

 #第一步:创建用户
GRANT select, process, super, replication slave on *.* to 'pt_checksum'@'%' identified with mysql_native_password by 'pt_checksum';
 #第二步:赋权限
 grant all on percona.* to 'pt_checksum'@'%';
 #第三步:检查一致性
 pt-table-checksum h='192.168.xx.xx', u='pt_checksum', p='pt_checksum',P=3306, -d backend --nocheck-replication-filters --replicate=percona.checksums --no-check-binlog-format
 # 修复  主从库信息输入正确
 pt-table-sync --print --replicate=percona.checksums \
 h=192.168.xx.xx, u=pt_checksum,p=pt_checksum,P=3306
 h=192.168.xx.xx, u=pt_checksum,p=pt_checksum,P=3306
 
# 注意权限
grant insert,delete,update,select on backend.* to 'pt_checksum'@'192.168.%';

7 常见问题归纳

7.1 虚机直接拷贝,uuid不能相同。(auto.cnf)(数据目录下)

7.2 从库可写

# 临时修复用
sql_log_bin=0;

7.3 复制模式为master_auto_position=0 小心relay log被清

不带relay_log_file和relay_log_pos 参数选项都会导致relay log被清理

相对完整的语句

change master to master_user=xx, master_port=xx, master_host=xx,master_port=xx, master_log_file=xx,master_log_position=xx,relay_log_file=xx, master_auto_position=0;

change master master_auto_position=1;

7.4 在线启停gtid

一般不建议

7.5 mysqldump 导出导入可能导致从库混乱

导出导入语句中的set @@gtid purge=xxx语句可能使得主库做reset master操作。

本文分享自微信公众号 - DBA札记(dba_jason),作者:小董学编程

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python自动化管理mysql主从同步

    通过定义mysqldconfig类   mysqld_vars = {}  从里面获得很多配置文件相关参数写入字典

    py3study
  • MySQL主从复制原理

    image.png 主从复制的目的 1. 数据同步备份 master发生故障后,可以马上切换到slave,降低服务风险 2. 读写分离 可以把写操作放在ma...

    dys
  • MySQL 主从架构原理

    上图展示的是 MySQL 的主从切换流程。在 State-1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库,只是将 A 的更新都同步过来,到本...

    张申傲
  • Mysql主从同步(1)-主从/主主环境部署梳理

    Mysql复制概念说明 Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一...

    洗尽了浮华
  • Mysql主从

    数据库高可用一直是企业的重中之重,而采用主从方案,一主一从,能实现负载均衡,读写分离的作用,分担数据库的负荷,提高性能,而如果搭配keepalived还能实现高...

    kevinfaith
  • MySql主从复制,从原理到实践!

    主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对这些日志进行重新执行,从而使从数据库和主数据库的数据保持一致。

    macrozheng
  • Mysql主从复制机制原理

    Arebirth
  • 详解mysql 主从复制原理

    在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复制、读写分离的架构。

    码农编程进阶笔记
  • MySQL主从复制架构及原理

    一、简介 在实际生产中,数据的重要性不言而喻,因此考虑到数据的重要性比如单点故障导致后端数据库奔溃,或者后端数据库访问压力过大等,mysql数据库做主从非常有必...

    小小科
  • Mysql数据库主从心得整理

    管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验...

    吴生
  • mysql主从同步(2)-问题梳理

    之前部署了Mysql主从复制环境(Mysql主从同步(1)-主从/主主环境部署梳理),在mysql同步过程中会出现很多问题,导致数据同步异常。 以下梳理了几种主...

    洗尽了浮华
  • mysql主从备份及原理分析

    一.mysql主从备份(复制)的基本原理 mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复...

    跑马溜溜的球
  • Mysql主从复制原理及搭建

    主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,...

    我的小熊不见了丶
  • MYSQL主从同步

    1、解决问题 数据分布不同节点、负载均衡、读写分离、容灾备份、高可用应用、故障切换等 2、同步原理 Master将操作记录到bin-log salve的一个线程...

    苦咖啡
  • mysql 主从复制

    Mysql的复制是一个异步复制的过程,从一个主(master)的复制到另一个备(salve)的。在主备之间实现复制过程主要有三个线程来完成,其中两个线程(sql...

    程序员同行者
  • MySQL主从复制

    MySQL复制功能提供分担读负载。 基于二进制日志的复制是异步的,那么复制有什么好处? 1.实现在不同服务器上的数据分布,利用二进制日志增量进行,不需要太多...

    用户2032165
  • MySQL主从复制

    修改mysql配置文件,不同的系统my.cnf路径不同(CentOS中位于/etc/my.cnf)

    十毛
  • Mysql主从复制

    主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,...

    我的小熊不见了丶
  • MySQL 主从同步

    主从复制的根本原理是从 master 服务器上面的数据,通过一定的方式同步到 slave 服务器上面。基本过程如下图:

    付威

扫码关注云+社区

领取腾讯云代金券