我试图通过命令行导入mysqldump文件,但继续收到错误。我使用以下命令从我的其他服务器转储文件:
mysqldump -u XXX -p database_name > database.sql
然后我尝试使用以下内容导入文件:
mysql -u XXX -p database_name < database.sql
加载一小部分然后卡住。我收到的错误是:
ERROR at line 1153: Unknown command '\''.
我在文件中检查了那行:
awk '{ if (NR==1153) print $0 }' database.sql >> line1153.sql
它的大小恰好超过1MB,仅用于该行。
任何想法可能会在这里发生什么?
答案 0 :(得分:18)
您的数据库中有二进制blob,请尝试将--hex-blob添加到mysqldump语句中。
答案 1 :(得分:3)
你知道发生了什么 - 你的SQL中有一个额外的单引号!O
如果你有'awk',你可能有'vi',这将轻松打开你的line1153.sql文件,并允许你在数据库中找到导致问题的值。
或者......这条线可能很大,因为它包含多行。您还可以使用mysqldump的--skip-extended-insert
选项,以便每行都有一个单独的插入语句。
答案 2 :(得分:3)
我遇到了同样的问题,因为我的数据库中有中文字符。以下是我在一些中文论坛上发现的内容,它对我有用。
mysql -u[USERNAME] -p[PASSWORD] --default-character-set=latin1
[DATABASE_NAME] < [BACKUP_SQL_FILE.sql]
答案 3 :(得分:1)
我认为您需要使用path/to/file.sql
代替path\to\file.sql
此外,由于某些原因database < path/to/file.sql
对我不起作用 - 我必须使用use database;
和source path/to/file.sql;
。
答案 4 :(得分:0)
如果所有其他方法都失败了,请使用MySQLWorkbench进行导入。这为我解决了同样的问题。
答案 5 :(得分:0)
我在表名中有特殊字符,例如_\
,并且在尝试导入表时会出错。
我通过在转储的sql中将\
更改为\\
来修复它。
我的表名如rate_\
,我使用此命令来修复转储:
sed 's._\\._\\\\.g' dump.sql > dump2.sql
我没有替换所有反斜杠,因为我不确定数据库中是否存在一些不应替换的反斜杠。
表名中的特殊字符将在登录文件名中转换为@。 阅读http://dev.mysql.com/doc/refman/5.5/en/identifier-mapping.html
答案 6 :(得分:0)
与我有相同的错误
Unknown command '\▒'.
当我运行这个
mysql -u root -p trainee < /xx/yy.gz
所以我遵循了这些答案。但是我没有还原的数据库trainee
。然后发现
yy.gz
是zip
文件。所以我将文件解压缩后还原为:
mysql -u root -p trainee < /xx/yy.sql