当前位置: 首页 > news >正文

MySQL从5.7升级到8.0步骤及其问题

MySQL从5.7升级到8.0步骤及其问题

前言

本文源自微博客,且以获得授权,请尊重版权。

一、需求背景

     Docker环境下,MySQL5.7升级到8.0,数据迁移时使用的是mysqldump方式迁移。

二、迁移步骤

  1. 数据备份:

    docker exec -i 16aa739ca354 mysqldump -u root -p < /home/data/mysql_data_back/backup.sql
    

    或者先进入到容器内部,然后进入目录:/usr/bin/(mysqldump所在目录),然后执行:

    mysqldump -u root -p < /home/data/mysql_data_back/backup.sql
    
  2. docker拉新的镜像然后创建容器

  3. 数据恢复:

    • 复制数据到容器中:

      docker cp /home/data/mysql_data_back/backup.sql 16aa739ca354:/tmp/
      
    • 恢复数据:

      docker exec -i 16aa739ca354 mysql -u root -p < /tmp/backup.sql
      

三、问题

     在执行最后一步的数据恢复过程中,出现:ERROR 3554 (HY000) at line 318: Access to system table 'mysql.innodb_index_stats' is rejected.

四、分析

     这个错误通常表示正在尝试导入一个包含对系统表(如 mysql.innodb_index_stats)的访问或修改操作的 SQL 文件,但当前用户没有足够的权限来执行这些操作。
     在 MySQL 中,系统表(如 mysql.innodb_index_stats)通常是为 MySQL 服务器内部使用而保留的,并且不应该由普通用户直接访问或修改。

     导出的sql语句也印证了这个情况:

image.png

五、解决

     经过上述分析,我们知道出现这个问题的根本原因就是因为我们执行了一些包含mysql.innodb_index_stats的语句,那么就可以对症下药了,有两个解决方案:

  1. 删掉其中关于 mysql.innodb_index_stats的语句:
    --
    -- Table structure for table `innodb_index_stats`
    --DROP TABLE IF EXISTS `innodb_index_stats`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `innodb_index_stats` (`database_name` varchar(64) COLLATE utf8_bin NOT NULL,`table_name` varchar(199) COLLATE utf8_bin NOT NULL,`index_name` varchar(64) COLLATE utf8_bin NOT NULL,`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`stat_name` varchar(64) COLLATE utf8_bin NOT NULL,`stat_value` bigint(20) unsigned NOT NULL,`sample_size` bigint(20) unsigned DEFAULT NULL,`stat_description` varchar(1024) COLLATE utf8_bin NOT NULL,PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;
    /*!40101 SET character_set_client = @saved_cs_client */;--
    -- Dumping data for table `innodb_index_stats`
    --LOCK TABLES `innodb_index_stats` WRITE;
    /*!40000 ALTER TABLE `innodb_index_stats` DISABLE KEYS */;
    INSERT INTO `innodb_index_stats` VALUES (...);
    /*!40000 ALTER TABLE `innodb_index_stats` ENABLE KEYS */;
    UNLOCK TABLES;
    
  2. 修改数据备份语句为:
    mysqldump -u root -p --all-databases --ignore-table=mysql.innodb_index_stats --ignore-table=mysql.innodb_table_stats > dump.sql
    

然后重新导入即可解决。

http://www.lryc.cn/news/376364.html

相关文章:

  • 中年帕金森:守护健康,从容面对生活挑战
  • oracle块跟踪
  • 【机器学习】第3章 K-近邻算法
  • 求和 最大值 最小值 reduce Math.min Math.max
  • MyBatis 源码分析--获取SqlSession
  • Upload-Labs:Pass - 1(JS前端白名单)
  • vue大作业-实现学校官网
  • 24面试记录002
  • cocos 按钮
  • 文件扫描工具都有哪些?职场大佬都在用的文本提取工具大盘点~
  • 【学习】程序员资源网站
  • 游戏缓存与异步持久化的完美邂逅
  • MySQL 高级 - 第十二章 | 数据库的设计规范
  • 【Python】AJAX
  • scikit-image安装报错
  • STM32(七)———TIM定时器(基本and通用)
  • Spring中网络请求客户端WebClient的使用详解
  • 那些年我为了考PMP踩过的坑.....
  • 邦芒解析:新人入职后存在的三种职场心理误区
  • MFC案例:利用SetTimer函数编写一个“计时器”程序
  • 2. 音视频H264
  • 烽宇团队回报社会,走进贵州山区公益行
  • 硬盘格式化NTFS好还是exFAT好 U盘存储文件用哪个格式好? 硬盘用exfat还是ntfs mac不能读取移动硬盘怎么解决
  • Elasticsearch机器学习初探:智能数据洞察
  • 贪心算法——赶作业(C++)
  • Python 数据可视化 多色散点图
  • C语言入门系列:数据类型之浮点数
  • 思科配置路由器,四台主机互相ping通
  • 个人博客测试用例设计
  • Java输入输出语句 和 保留字