前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 主从管理

MySQL 主从管理

作者头像
DBA札记
发布2021-07-06 10:56:53
1.9K0
发布2021-07-06 10:56:53
举报
文章被收录于专栏:MySQL参数系列MySQL参数系列

主从复制搭建--基于gtid

主从复制原理图

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

配置:

代码语言:javascript
复制
log-bin=mysql-bin
binlog_format=row
log_slave_updates=1 --(可选)
gtid_mode=ON
enforce_gtid_consistency=1

2 主库创建用户

代码语言:javascript
复制
create user 'slave'@'%' identified with mysql_native_password by 'password123';  

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

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

代码语言:javascript
复制
mysqldump -uroot -pxxx --socket=/data/mysql_3306/tmp/mysql.sock  -all-databases >all.sql 

4 从库

代码语言:javascript
复制
# 加载主库备份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 场景一 (从库删除数据,导致主从不一致)确认错误可以跳过

代码语言:javascript
复制
#(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

代码语言:javascript
复制
-- 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不一致的情况下)

代码语言:javascript
复制
# 查看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 (会可能产生数据不一致问题)

代码语言:javascript
复制
set global slave_exec_mode=IDEMPOTENT;

set global slave_exec_mode=STRICT;

5.5 pt-checksum 工具

代码语言:javascript
复制
 #第一步:创建用户
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 从库可写

代码语言:javascript
复制
# 临时修复用
sql_log_bin=0;

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

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

相对完整的语句

代码语言:javascript
复制
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操作。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA札记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主从复制搭建--基于gtid
    • 1 搭建数据库 单机版 2个节点
      • 2 主库创建用户
        • 3 主库数据备份(新搭建的2个等同节点可跳过此步骤)
          • 4 从库
            • 5 主从不一致处理
              • 5.1 场景一 (从库删除数据,导致主从不一致)确认错误可以跳过
              • 5.2 方法二 reset slave all
              • 5.3 重置gtid_set(gtid_set不一致的情况下)
              • 5.4 slave_exec_mode (会可能产生数据不一致问题)
              • 5.5 pt-checksum 工具
            • 7 常见问题归纳
              • 7.1 虚机直接拷贝,uuid不能相同。(auto.cnf)(数据目录下)
              • 7.2 从库可写
              • 7.3 复制模式为master_auto_position=0 小心relay log被清
              • 7.4 在线启停gtid
              • 7.5 mysqldump 导出导入可能导致从库混乱
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档