通过管道迁移MySQL数据库到其他服务器时执行脚本出现报错
故障原因
- 核心问题是脚本换行符格式不兼容:你创建的脚本使用了Windows风格的CRLF(
\r\n)作为换行符,而Linux系统仅识别LF(\n)换行,导致命令行末尾多出了一个不可见的回车符\r。 - 报错里的
'RROR 1102 (42000): Incorrect database name 'kodi_video119是典型的回车符导致的显示异常:mysql实际读取到的数据库名是kodi_video119\r,属于非法库名;输出报错时\r会让光标回到行首,后续的单引号覆盖了原ERROR的首字母E,才会显示为奇怪的'RROR开头。 - 后续的
mysqldump: Got errno 11 on write是管道断裂报错:mysql进程因库名错误提前退出,mysqldump往管道写入数据时没有接收进程,触发写入错误。
解决方法
- 先确认问题存在:执行
cat -v test查看脚本内容,如果每行末尾出现^M标识,就证明存在多余的回车符。 - 转换脚本换行符格式:
- 安装dos2unix工具后执行:
dos2unix test - 没有dos2unix也可以用sed直接处理:
sed -i 's/\r$//' test
- 安装dos2unix工具后执行:
- 可选优化:在脚本第一行加上
#!/bin/bash声明,避免系统用不兼容的shell解析脚本。 - 额外安全优化:可以将数据库账号密码写入
~/.my.cnf配置文件,避免命令行明文写密码触发安全警告。
内容的提问来源于stack exchange,提问作者user9118749
相关产品推荐
相关产品推荐

