Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL5.7 通过逻辑备份迁移到GreatSQL注意事项

MySQL5.7 通过逻辑备份迁移到GreatSQL注意事项

作者头像
GreatSQL社区
发布于 2024-06-11 09:33:34
发布于 2024-06-11 09:33:34
1370
举报

* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、背景概述 在将数据库MySQL 5.7迁移到GreatSQL8.0.32时,由于数据量较小且关注安全性,决定使用mysqldump执行逻辑备份,并将数据导入GreatSQL。但在备份时采用了备份全库(--all-databases)的方式,在导入GreatSQL后,修改用户密码时出现错误。这是因为mysqldump备份时包括了mysql系统库,而MySQL 5.7中的mysql系统库采用了MyISAM存储引擎,而GreatSQL的mysql系统库采用了InnoDB存储引擎。因此,在导入数据后,部分系统表被覆盖,导致了错误的出现。 二丶问题复现 1.部署2个实例 部署MySQL 5.7与GreatSQL 8.0.32,具体步骤省略 2.MySQL 创建测试数据 通过sysbench创建10张表 $ sysbench lua/oltp_read_write.lua --mysql-db=sysbench --mysql-host=192.168.1.162 --mysql-port=6003 --mysql-user=root --mysql-password=greatsql --tables=10 --table_size=5000 --report-interval=2 --threads=10 --time=600 --mysql-ignore-errors=all prepare 3.MySQL 创建测试用户 mysql> create user test1@'%' identified by 'greatsql'; Query OK, 0 rows affected (0.01 sec) mysql> grant all on *.* to test1@'%'; Query OK, 0 rows affected (0.01 sec) 4.MySQL进行全库备份 $ /mysql57/svr/mysql/bin/mysqldump -uroot -pgreatsql -h192.168.1.162 -P6003 --single-transaction --set-gtid-purged=OFF --all-databases > all.sql 5.GreatSQL导入备份数据 greatsql> source all.sql; 在导入过程中有如下报错,从这里可以看出导入时有系统表被导入,并且部分系统表不支持被修改:

6.GreatSQL执行修改用户密码操作 greatsql> alter user test1@'%' identified by 'abc123'; ERROR 1785 (HY000): Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables. 此时报错违反了 GTID 的一致性,由于导入数据后有部分MySQL库下的系统表被修改成了MyISAM存储引擎,并且修改用户密码会涉及多张系统表的更新,在一个 SQL 语句中既对非事务表进行了更新操作,又对事务表进行了更新操作,这违反了 GTID 的一致性规则。 7.GreatSQL执行查看库表信息的操作 当执行刷新权限的操作后,执行下面的SQL时也会报错 greatsql> flush privileges; Query OK, 0 rows affected, 11 warnings (0.00 sec) greatsql> show tables; ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist greatsql> show databases; ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist mysql.infoschema用户是MySQL8.0中引入的,mysql.infoschema用户是MySQL数据库的系统用户,用来管理和访问系统自带实例information_schema;导入MySQL系统库后,user表被覆盖为MySQL5.7的user表,此用户不存在,因此在刷新权限后访问元数据信息时报错; 8.查看mysqldump备份了哪些系统表 $ grep 'CREATE TABLE ' all.sql ...... CREATE TABLE `innodb_index_stats` ( CREATE TABLE `innodb_table_stats` ( CREATE TABLE `ndb_binlog_index` ( CREATE TABLE `plugin` ( CREATE TABLE `proc` ( CREATE TABLE `procs_priv` ( CREATE TABLE `proxies_priv` ( CREATE TABLE `server_cost` ( CREATE TABLE `servers` ( CREATE TABLE IF NOT EXISTS `slave_master_info` ( CREATE TABLE IF NOT EXISTS `slave_relay_log_info` ( CREATE TABLE `slave_worker_info` ( CREATE TABLE `tables_priv` ( CREATE TABLE `time_zone` ( CREATE TABLE `time_zone_leap_second` ( CREATE TABLE `time_zone_name` ( CREATE TABLE `time_zone_transition` ( CREATE TABLE `time_zone_transition_type` ( CREATE TABLE `user` ( CREATE TABLE IF NOT EXISTS `general_log` ( CREATE TABLE IF NOT EXISTS `slow_log` ( ...... 三、问题解决

  1. 可以初始化一个新的GreatSQL实例,备份这个新的GreatSQL实例的MySQL系统库

$ /greatsql/svr/mysql/bin/mysqldump -uroot -pgreatdb -h127.0.0.1 -P6001 --single-transaction --set-gtid-purged=OFF -B mysql > mysql.sql

  1. 导入mysql系统库的备份文件到GreatSQL实例中

greatsql> source mysql.sql; 3.导入完成后,刷新权限 greatsql> flush privileges; Query OK, 0 rows affected (0.01 sec) 4.执行创建用户测试 greatsql> create user test1@'%' identified by 'greatsql'; Query OK, 0 rows affected (0.01 sec) greatsql> grant all on *.* to test1@'%'; Query OK, 0 rows affected (0.01 sec) 5.执行 show 操作 greatsql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | sys_audit | | sysbench | | test | +--------------------+ 7 rows in set (0.01 sec) greatsql> show tables; +----------------+ | Tables_in_test | +----------------+ | test | +----------------+ 1 row in set (0.01 sec) 四、总结 1.在从MySQL5.7向GreatSQL或者MySQL8.0 通过逻辑备份迁移时,不要备份系统库mysql,避免发生问题; 2.用户及权限可以单独进行备份然后导入到GreatSQL或者MySQL8.0中。

Enjoy GreatSQL :)

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

本文分享自 GreatSQL社区 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL一主多从复制(基于GTID)
mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases -uroot -p > all.sql
嘉美伯爵
2021/01/05
8550
MySQL一主多从复制(基于GTID)
Mysql主从同步时Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes的情况故障排除
嘉美伯爵
2021/01/18
8710
MySQL5.7主从同步--点位方式及GTID方式
MySQL5.6加入了GTID的新特性,其全称是Global Transaction Identifier,可简化MySQL的主从切换以及Failover。GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的Binlog。主从同步时GTID_Event和事务的Binlog都会传递到从库,从库在执行的时候也是用同样的GTID写binlog,这样主从同步以后,就可通过GTID确定从库同步到的位置了。也就是说,无论是级联情况,还是一主多从情况,都可以通过GTID自动找到需要进行复制的点位,而无需像之前版本那样通过File_name和File_position来进行位置点的主从复制。
俊才
2019/08/07
2.5K0
MySQL5.7主从同步--点位方式及GTID方式
MySQL备份与恢复(二)
前天的文章中简单写了备份与恢复的方法,今天我们主要来看看不同的备份方法备份出来的文件结果,以及它们的恢复方法。
AsiaYe
2019/11/06
8840
关于 MySQL异步复制
Replication,复制是高可用的基础,MHA、mycat等中间件的底层都依赖复制原理
星哥玩云
2022/08/18
6050
关于 MySQL异步复制
技术分享 | MariaDB 10.1.9 迁移到 MySQL 5.7.25
爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查,对数据库有兴趣,对技术有想法。一入 IT 深似海,从此节操是路人。
爱可生开源社区
2020/06/12
2.1K0
技术分享 | MariaDB 10.1.9 迁移到 MySQL 5.7.25
MySQL 管理
-e选项可以在Mysql客户端执行SQL语句,而不用连接到MySQL数据库再执行,对于一些批处理脚本,这种方式尤其方便。
用户9615083
2022/12/25
1.4K0
MySQL 管理
MySQL通过 XtraBackup 备份恢复单个库
本文通过 XtraBackup 备份单个数据库,然后恢复到另一个实例,用于快速迁移大数据量,使用的软件版本为:
GreatSQL社区
2023/02/22
2.4K0
mysql基本操作以及python控制mysql(2)–mysql基础操作
学习了http://www.cnblogs.com/fnng/p/3565912.html
十四君
2019/11/28
7830
故障分析 | MySQL5.7 使用 mysqldump 重要闭坑事项
爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理。擅长数据库故障处理。对数据库技术和 python 有着浓厚的兴趣。
jeanron100
2020/11/17
1.1K0
MySQL从删库到恢复,还用跑路吗?
误删数据库应该如何恢复操作?怎样才能做好数据库的备份、恢复、容灾、HA?如果你身处数据库行业,最近可能会比较关注这几个问题
搜云库技术团队
2019/10/17
1.4K0
GreatSQL一个关于主从复制的限制描述与规避
分享一个在项目运维中遇到的一个主从复制限制的一个坑,项目的架构为主集群+灾备集群,每个集群为一主两从模式。主集群到灾备集群的同步为主从复制的方式,根据业务需求灾备集群需要忽略系统库跟某些配置表,所以才会触发此限制,而这个限制如果我们之前没有遇到过,那么排查起来也是相对不易的。
GreatSQL社区
2023/09/27
2130
GreatSQL一个关于主从复制的限制描述与规避
Linux下Mysql数据库的基础操作
Mysql数据库是一种关系型数据库管理系统,具有的优点有体积小、速度快、总体成本低,开源,可移植性(跨平台,在不同系统中使用),可以和开发语结合,属于轻量级数据库。
江湖有缘
2023/11/11
4280
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
今天分享一期 mysql中 备份之后发生灾难造成数据丢失 那么如何恢复中间的数据呢?
神秘泣男子
2024/06/03
3690
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
图文结合丨带你轻松玩转MySQL Shell for GreatSQL
MySQL Shell 是 MySQL 的一个高级客户端和代码编辑器,是第二代 MySQL 客户端。第一代 MySQL 客户端即我们常用的 MySQL 。除了提供类似于 MySQL 的 SQL 功能外,MySQL Shell 还提供 JavaScript 和 Python 脚本功能,并包括与 MySQL 一起使用的 API 。MySQL Shell 除了可以对数据库里的数据进行操作,还可以对数据库进行管理,特别是对MGR的支持,使用MySQL Shell 可以非常方便的对MGR进行搭建、管理、配置等
GreatSQL社区
2023/09/10
5600
图文结合丨带你轻松玩转MySQL Shell for GreatSQL
故障分析 | 使用 mysqldump 备份导致数据丢失
爱可生服务团队成员,负责处理客户在 MySQL 日常运维中遇到的问题;对数据库相关技术有浓厚的兴趣,喜欢钻研各种问题。
爱可生开源社区
2021/12/08
2.1K0
怎样快速地迁移 MySQL 中的数据?
我们通常会遇到这样的一个场景,就是需要将一个数据库的数据迁移到一个性能更加强悍的数据库服务器上。这个时候需要我们做的就是快速迁移数据库的数据。
程序猿川子
2023/01/16
2.3K0
Centos7安装MySQL8.0 - 操作手册
MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!
洗尽了浮华
2019/05/25
1.9K1
用mysql shell实战搭建MySQL主从集群
mysql 8.0.34和8.1发布了,好像有很大变化的样子,但是又没有,所以研究了一下Release Notes ,其中有一条非常有意思,
DBA札记
2023/08/04
1.1K0
用mysql shell实战搭建MySQL主从集群
Windows环境下部署MySQL主从并模拟升级到8.0
> * GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
GreatSQL社区
2022/02/10
3190
相关推荐
MySQL一主多从复制(基于GTID)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档