今天在操作将MySQL 5.7的mysqldump的转储文件导入到MySQL 8.0的环境中遇到如下的报错
mysql -u dba_admin -p -h 127.0.0.1 -P4306 < /tmp/db_20210127.sql ERROR 1231 (42000) at line 8373: Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'
从报错信息看,是由于参数sql_mode不能设置NO_AUTO_CREATE_USER值的问题导致的,那么我们来根据报错信息提示的行,查看一下相关的信息
检查报错的行8373相关内容
-- -- Dumping routines for database 'tgp_db' -- /*!50003 DROP PROCEDURE IF EXISTS `CopyFsmInfoToNewFsm` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8 */ ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
原因:MySQL 8取消了sql_mode的NO_AUTO_CREATE_USER,而从57.版本导出的SQL文件中存在存储过程,存储过程前,添加有sql_mode的相关参数设置
解决方案:把.sql文件里的 ‘NO_AUTO_CREATE_USER’删掉,然后重新导入即可