美文网首页
MySQL跨版本主从部署及问题

MySQL跨版本主从部署及问题

作者: 月饮沙 | 来源:发表于2020-05-18 14:12 被阅读0次

最近搞了个跨版本的MySQL主从同步,之前没搞过这个,遇到了一些问题,记录一下。

环境

主库:MySQL5.6.27 IP:192.168.100.1
从库:MySQL5.7.22 IP:192.168.100.2

计划部署过程

  1. 主库创建复制账号
create user 'repl'@'192.168.100.1' identified by 'password';
grant replication slave on *.* to 'repl'@'192.168.100.1';
  1. 主库进行全备
mysqldump -uuser -ppassword --all-databases --master-data --single-transaction > all_databases.sql
  1. 全备恢复到从库上
mysql -uroot -ppassword -h192.168.100.2 < all_databases.sql
  1. 从库设置复制相关信息
CHANGE MASTER TO
master_host='192.168.100.1',
master_port=3306,
master_user='repl'
master_password='password';

遇到问题及处理方法

数据恢复时间过长

# 加快备份恢复速度
# 禁用binlog,数据恢复过程不写入到日志中,可以加快恢复速度。
mysql -uroot -ppassword -h192.168.100.2
mysql > set sql_log_bin=0;
mysql > source all_databases.sql

恢复备份后创建账号报错

  • 原因:
    备份时备份了mysql.user数据库,MySQL5.7对权限表进行了升级,表结构有变更
  • 处理方法:
    使用mysql_upgrade升级数据库
mysql_upgrade --force

CHANGE MASTER报错

  • 错误信息:
    ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave.
  • 原因:
    mysql库中记录日志相关的表结构有变更
  • 处理方法:
    删除相关表并重新加载
# 删除表
use mysql
drop table innodb_index_stats;
drop table innodb_table_stats;
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
# 重新加载表
mysql> source /usr/local/mysql3306/share/mysql_system_tables.sql

后续优化

遇到的问题都是由于mysql库中的表结构更改导致的。
以后再进行类似操作时,备份时可以只对用户数据库进行备份,这样不更改系统库的表结构,就不会遇到类似错误了。

权限表可以通过导出语句的方式进行备份,例如:

# 适用于MySQL5.6及以前版本
mysql -e "select distinct concat ('show grants for ','''',user,'''@''',host,'''',';') as query from mysql.user where user!='root'" |grep -v query >/tmp/showgrants.sql && mysql < /tmp/showgrants.sql |egrep -v 'Grants for|query'

或者使用pt-show-grants工具导出权限表

pt-show-grants -uroot -ppassword

相关文章

网友评论

      本文标题:MySQL跨版本主从部署及问题

      本文链接:https://www.haomeiwen.com/subject/tasuohtx.html