app开发者平台在数字化时代的重要性与发展趋势解析
873
2022-10-20
MySQL(MariaDB)线上主从postition变化无法锁定-不停机不锁库解决方法
前言: 主从教程很多不进行说明,主要讲解线上主从解决方案
MySQL主从执行原理
从库通过执行bin-log日志中的命令达到数据同步的原理
MySQL主从同步需要保证 bin-log 中 position值一致
每一个postition值代表一条数据库操作记录,如果主从各自postition值不对应则执行不同的操作记录,即主从失败。
线上遇到的问题
主库postition随数据的读写进行变化,而从库面对不停变化的postition无法进行手动设置数据库无法锁库。数据库过多拷贝数据慢
解决思路
如图,将sql导入的位置记录postition值,将该postion设置到slave从库中,slave会从当前的postition位置同步一直执行到master的位置完成同步。
解决方法
主库
不停机不锁表导出sql语句
mysqldump -uroot -proot --skip-lock-tables --flush-logs --single-transaction --master-data=2 test >
查看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:主库的ipmaster_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
进入数据库
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状态
show slave status;
两个属性都为yes即成功
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~