首页 > 数据库 >MySQL5.7 通过逻辑备份迁移到GreatSQL注意事项

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

时间:2024-06-05 10:47:12浏览次数:26  
标签:-- MySQL5.7 GreatSQL greatsql 备份 mysql TABLE CREATE

一、背景概述

在将数据库从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;

在导入过程中有如下报错,从这里可以看出导入时有系统表被导入,并且部分系统表不支持被修改:

file

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

标签:--,MySQL5.7,GreatSQL,greatsql,备份,mysql,TABLE,CREATE
From: https://www.cnblogs.com/greatsql/p/18232511

相关文章

  • kylinV10SP3安装MySQL5.7.44
    需要的安装包:mysql-community-common-5.7.44-1.el7.x86_64.rpmmysql-community-libs-5.7.44-1.el7.x86_64.rpmmysql-community-client-5.7.44-1.el7.x86_64.rpmmysql-community-server-5.7.44-1.el7.x86_64.rpm开始安装,安装顺序:common->libs->client->serverrpm-ivhmysq......
  • PowerShell实现定时备份并清理文件夹数据
    脚本backup.ps1#设置执行策略以允许脚本运行Set-ExecutionPolicyBypass-ScopeProcess-ForceWrite-Host"正在备份文件,请勿关闭...."#设置源目录和目标备份目录#备份源文件路径$SOURCE_DIR="D:\data\app\images"#备份目标路径$BACKUP_DIR="D:\data\backup"$......
  • Azure SQL 备份无法还原至新服务器
    我正在为我的Azure应用程序创建一个简单的灾难恢复计划。该应用程序的RTO长达一周,因此它不是一个关键应用程序,所以我不需要设置主动/被动服务器或任何类型的自动故障转移。如果数据中心断电六个小时,我也不在乎。实际上,我只是为某些导致整个数据中心离线的事件(如火灾......
  • rsync备份项目
    rsync备份项目rsync的同步都不是实时同步的,操作一次才能同步一次,即使放定时任务,也不是实时同步。rsync项目1 rsync命令本地同步备份一使用rsync实现数据本地同步备份(前提:本地无需开启rsync服务,但要安装rsync命令)常见的备份时保持文件属性不变的选项:-avz,下面的-av,也可......
  • info信息备份
    Privacy-CameraUsageDescription<string>App申请访问您的相机,用于进行拍摄,如禁止将无法拍照拍摄图片上传信息</string>NSCameraUsageDescription="DuringtheKYCprocess,wewillneedaccesstoyourcameratocaptureyourIDandverifyyourinformationthroughfac......
  • resetlogs强制拉库失败并使用备份system文件还原数据库故障处理---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:resetlogs强制拉库失败并使用备份system文件还原数据库故障处理作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]接手一个库,在open的过程中遭遇到ORA-6002662错误SunMay2......
  • gitlab备份方法
    工具:gitlab社区版 一、修改配置文件 /etc/gitlab/gitlab.rb开启备份功能二、创建备份脚本backup.sh文件,内容如下,并给执行权限###backupgitlabgitlab-rakegitlab:backup:create>/dev/null2>&1if[$?-ne0];thenecho'Backupgitlabdataerror!'>/home......
  • Mysql-Xtrabackup备份恢复
    恢复准备1、安装Xtrabackup2、数据备份和拷贝 恢复步骤1、恢复全量备份2、恢复增量备份到全量备份注意:开始恢复的增量备份要添加--redo-only参数,最后一次增量备份去掉--redo-only参数3、对整体的完全备份进行恢复:停库——恢复——启动库恢复场景 全量备份恢复nohupin......
  • Hexo博客备份
    概述《基于GitHub和Hexo搭建博客》中总结了如何利用github和hexo搭建个人博客,但是github上上传的只是博客网站文件,像markdown笔记之类的源文件并没有备份,如果本地电脑坏了很难恢复以往的markdown笔记,所以需要连同markdown笔记在内的源文件都备份到github上。备份步骤创建新分支......
  • user.config文件的备份和恢复(winform)
    user.config文件的备份和恢复(winform)场景出现user.config文件内容破坏,全为0x00的问题。思路备份和恢复。启动时,如果user.config文件有效,则备份到备份文件,如果无效,则恢复备份文件到user.config文件。文件备份和恢复函数(Program.cs文件)privatestaticboolMonitorConfigFile......