microblog | 微博客
原创
访问
0
获赞
0
评论
相关推荐
暂无数据
最新文章
暂无数据
热门文章
暂无数据

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

写完bug就找女朋友 2024年06月18日 09:57:36 0 50 0
分类专栏: 学习笔记 个人记录 Mysql 文章标签: mysql mysql8.0

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

一、需求背景

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

二、迁移步骤

  1.       数据备份:

    docker exec -i 16aa739ca354 mysqldump -u root -p > /tmp/backup.sql

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

    mysqldump -u root -p > /tmp/backup.sql

          然后复制到宿主机

    docker cp 16aa739ca354:/tmp/backup.sql /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

      然后重新导入即可解决。



评论区

登录后参与交流、获取后续更新提醒

目录
暂无数据