从SQL文件恢复MySQL数据库遇sql-mode错误,求导入方法
解决MySQL导入数据时的sql-mode错误问题
错误原因
你碰到的错误是因为sql-mode参数拼写不完整——错误信息里的NO_ENGINE_SUBSTITUTIO少了最后一个字母N,正确的参数应该是NO_ENGINE_SUBSTITUTION。这个错误一般来自MySQL配置文件里的错误配置,或者命令行中误传了错误参数。
具体解决方法
方法1:修复配置文件(推荐)
- 找到MySQL的配置文件:
- Linux/macOS:常见路径是
/etc/my.cnf、/etc/mysql/my.cnf或者用户目录下的~/.my.cnf - Windows:一般在
C:\ProgramData\MySQL\MySQL Server X.X\my.ini(X.X是你的MySQL版本号)或者安装目录下的my.ini
- Linux/macOS:常见路径是
- 找到
sql-mode或sql_mode的配置行,把错误的参数修正为完整的正确配置:sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION" - 重启MySQL服务,然后重新执行导入命令:
mysql -u root -p my_db_t < my_db_t_2022_10_12.sql
方法2:命令行临时指定正确参数
如果不想修改配置或重启服务,可以直接在导入命令里指定正确的sql_mode(注意这里用下划线,命令行里短横线可能不被识别):
mysql -u root -p --sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION" my_db_t < my_db_t_2022_10_12.sql
方法3:临时跳过配置文件(应急用)
如果只是临时导入数据,也可以用--no-defaults参数跳过读取配置文件,避免加载错误的sql-mode设置:
mysql -u root -p --no-defaults my_db_t < my_db_t_2022_10_12.sql
注意:这个方法会让MySQL使用默认的sql-mode规则,可能和你日常的数据库配置不一致,只适合应急场景。
内容的提问来源于stack exchange,提问作者Blazej Kita
相关产品推荐
相关产品推荐

