MySQL(MariaDB)线上主从postition变化无法锁定-不停机不锁库解决方法

前言: 主从教程很多不进行说明,主要讲解线上主从解决方案

MySQL主从执行原理

从库通过执行bin-log日志中的命令达到数据同步的原理
在这里插入图片描述
MySQL主从同步需要保证 bin-log 中 position值一致
每一个postition值代表一条数据库操作记录,如果主从各自postition值不对应则执行不同的操作记录,即主从失败。
在这里插入图片描述

线上遇到的问题

  1. 主库postition随数据的读写进行变化,而从库面对不停变化的postition无法进行手动设置
  2. 数据库无法锁库。
  3. 数据库过多拷贝数据慢

解决思路

如图,将sql导入的位置记录postition值,将该postion设置到slave从库中,slave会从当前的postition位置同步一直执行到master的位置完成同步。
在这里插入图片描述

解决方法

主库

不停机不锁表导出sql语句

mysqldump -uroot -proot --skip-lock-tables --flush-logs --single-transaction --master-data=2 test > /home/tools/test.sql

查看sql语句中记录

head -n 30 all.sql |grep MASTER_LOG_FILE=

记录下图中红框值
在这里插入图片描述

进入数据库授权用户

grant replication slave on *.* to 'admin'@'%' identified by 'admin';
FLUSH PRIVILEGES;

从库

进入数据库

mysql -uroot -proot

停止slave

stop slave;

选择数据库并导入sql语句

use test;
source /home/tools/test.sql;

将上述红框中的值修改到下面的命令中:

change master to master_host='192.168.12.145' ,master_port=3306 ,master_user='admin', master_password='admin', master_log_file='mysql-bin.000008',master_log_pos=342;

上述命令参数说明:

  • master_host:主库的ip
  • master_port: 主库端口
  • master_user:主库授权的用户(上面主库里授权的用户)
  • master_password:主库授权的用户密码
  • master_log_file: SQL文件里记录的值
  • master_log_pos:SQL文件里记录的值

设置server_id

SET GLOBAL server_id=5;

刷新:

flush privileges;

启动 slave

start slave;

解决MySQL中数据库过多问题

主库

执行数据库全量拷贝(弊端就是用户信息等数据表会完全被主库覆盖)

mysqldump -uroot -proot --skip-lock-tables --flush-logs --single-transaction --master-data=2 --all-databases > /all.sql

从库

进入从库

mysql -uroot -p

导入数据

source /all.sql

停止slave

stop slave;

需要重启数据库

systemctl restart mariadb

查看数据库的sql文件找到如图配置

head -n 50 /all.sql

在这里插入图片描述
进入数据库

mysql -uroot -p

修改如下命令的信息并将上述记录的值设置到命令中:

change master to master_host='192.168.12.145' ,master_port=3306 ,master_user='admin', master_password='admin', master_log_file='mysql-bin.000008',master_log_pos=342;

启动slave

start slave

查看slave状态

show slave status;

两个属性都为yes即成功
G4ubmV0L3FxXzM4OTI5OTIw,size_16,color_FFFFFF,t_70)

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
引用\[1\]:在安装MySQL8时,可能会遇到mariadb-libs被mysql-community-libs-8.0.xx-1.el7.x86_64所取代的报错。\[1\]引用\[2\]:在CentOS7安装MySQL时,常见的错误依赖问题是warning: mysql-community-libs-8.0.28-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY error: Failed dependencies: mariadb-libs is obsoleted by mysql-community-libs-8.0.28-1.el7.x86_64。\[2\]引用\[3\]:解决这个问题的方法是先卸载mysql-libs,然后再执行安装命令。具体步骤是先执行yum remove mysql-libs命令卸载mysql-libs,然后再执行rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm命令进行安装。\[3\] 所以,如果你在安装MySQL8时遇到mariadb-libs被mysql-community-libs-8.0.xx-1.el7.x86_64所取代的报错,你可以先卸载mysql-libs,然后再执行安装命令来解决这个问题。 #### 引用[.reference_title] - *1* [CentOS7安装MySQL8报错mariadb-libs is obsoleted by mysql-community-libs-8.0.xx-1.el7.x86_64](https://blog.csdn.net/u012069313/article/details/123185605)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Linux_Centos7在安装Mysql常见错误依赖时失败——error: Failed dependencies:mariadb-libs is obsoleted](https://blog.csdn.net/qq_51929833/article/details/122966804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图图是只猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值