背景介绍:我的mysql运行在Windows上的docker里的,有一天要把数据还原到另一台windows上的mysql.
由于我使用docker都习惯于使用powershell,所以导出时在powershell里:
docker exec -it mysql5.7 mysqldump -u -p databse > /database.sql
然后在另一台机上用mysql命令行还原,结果爆出如下错误
ERROR:
ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: '?-'.
一开始我以为编码集不对,导出时设置编码、导入时设置编码、powershell页编码都搞了一遍还是无效,知道按那个错误去搜索才找到https://blog.csdn.net/sinat_32768139/article/details/86585211,导出用powershell的锅。后来用cmd导出我用编辑器打开也没乱码了,就放心的导入,还原的时候又报sql第一行错误,我打开sql文件发现用docker还原的时候他把mysqldump的警告都输出来了
mysqldump: [Warning] Using a password on the command line interface can be insecure.
总结:windows下备份mysql不要用powershell,而且还原用powershell也不行,"<"是保留字符。用docker备份也要小心有没有把什么额外的警告都输出到sql文件了