Raj*_* ML 11 mysql data-import mysql-workbench
我正在使用MySQL Workbench 8.0.我试图将测试数据转储到DB,包括所有表,存储过程和数据视图.
当我尝试导入它时说导入完成了一个错误,错误是
变量'sql_mode'不能设置为'NO_AUTO_CREATE_USER'的值使用exitcode 1操作失败
如果我检查数据库,导入后,只有表已经到来,但根本没有存储过程.
怎么解决这个问题?
Dil*_*lon 30
从MySQL Workbench 6.1 CE导出我的数据库然后尝试将其导入更新版本的MySQL WorkBench 8.0.11后,我最近也遇到了这个问题.每个都安装了社区服务器安装程序msi.
在做了一些搜索之后,我在MySQL网站上看到了这个错误报告: 在8.0.11上用5.7.22创建的Restaure转储
对我有用的修复是手动浏览我的转储文件并删除语句:
'NO_AUTO_CREATE_USER'位于转储文件中的每个例程转储之上. 声明删除图像示例
我这样做后,我收到了错误
错误1418(HY000)在第318行:此函数在其声明中没有DETERMINISTIC,NO SQL或READS SQL DATA,并且启用了二进制日志记录(您可能希望使用安全性较低的log_bin_trust_function_creators变量)
但在提到这个已回答的问题之后: 此函数在其声明中没有DETERMINISTIC,NO SQL或READS SQL DATA,并且启用了二进制日志记录 ,只需输入:
SET GLOBAL log_bin_trust_function_creators = 1;
在MySQL命令行中,客户端解决了这个问题,最后允许我使用所有转储的表,数据,例程和函数正确导入我的数据库.
希望这能节省一些时间.
查找和替换的最佳方法。找到NO_AUTO_CREATE_USER并在不打开文件的情况下将其替换为空。
如果 *.sql 文件很大而无法打开,Linux sed实用程序是最好的选择。
sed -i 's/FIND_TEXT/REPLACE_TEXT/' file.sql
sed -i 's/NO_AUTO_CREATE_USER//' file.sql
Run Code Online (Sandbox Code Playgroud)
-i 代表 --in-place[=SUFFIX]
-s 代表 --separate
错误已修复
重要更改:当使用 8.0 服务器不支持的 SQL 模式时,将转储从MySQL 5.7服务器导入运行MySQL 8.0的服务器通常会失败
ER_WRONG_VALUE_FOR_VAR。由于NO_AUTO_CREATE_USER在 MySQL 5.7 中默认启用但在 MySQL 8.0 中不支持,这可能经常发生。服务器在这种情况下的行为现在取决于
pseudo_slave_mode系统变量的设置。如果这是错误的,服务器将拒绝模式设置ER_UNSUPPORTED_SQL_MODE。如果pseudo_slave_mode为 true,则服务器忽略不支持的模式并发出警告。请注意,mysqlbinlogpseudo_slave_mode在执行任何 SQL 之前设置为 true。(错误#90337,错误#27828236)
来源:MySQL 发行说明。
我连接到 MySQL,然后默认选择了我的架构,我在 Workbench SQL 选项卡中运行了以下命令:
SET pseudo_slave_mode = true;
SET @@SESSION.pseudo_slave_mode = true;
Run Code Online (Sandbox Code Playgroud)
为了确保它有效,我在其他选项卡中使用其他命令对其进行了验证:
SHOW VARIABLES;
Run Code Online (Sandbox Code Playgroud)
它向我展示了变量列表,我过滤了它,输入ps来查找pseudo_slave_mode变量
是啊pseudo_slave_mode是ON现在(当先前未OFF)
然后我运行.sql并NO_AUTO_CREATE_USER再次向我显示错误,但这次它创建了.sql文件中所需的所有内容
然后我将模式转储到另一个 sql 文件以验证它:
mysqldump -u root -p --no-data --routines my_database > schema.sql
一切正常。这次它用修改后的sql_mode
我希望这对你有帮助。
| 归档时间: |
|
| 查看次数: |
15846 次 |
| 最近记录: |