我正在从我的服务器数据库导出一个表,这个表大约有几千行而且PHPMyadmin无法处理它。所以我切换到命令行选项
但是在执行mysqldump
命令后,我遇到了这个错误。错误是
Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064)
在对同一个搜索进行了一些搜索后,我在mysql 5.5版本中发现它为bug,不支持SET OPTION
命令。
我正在运行带有centos的EC2实例。我的mysql版本是5.5.31
(来自我的phpinfo)。
我想知道是否有解决方法,因为无法为此错误升级整个数据库。
或者,如果有任何其他替代方法进行出口或转储,请建议。
答案 0 :(得分:1)
未经过测试,但是这样:
cat yourdumpfile.sql | grep -v "SET OPTION SQL_QUOTE_SHOW_CREATE" | mysql -u user -p -h host databasename
这会将转储插入数据库,但会删除包含“SET OPTION SQL_QUOTE_SHOW_CREATE”的行。 -v
表示还原。
找不到SQL_QUOTE_SHOW_CREATE的英文手册条目来链接它,但是当你的表和数据库名称不包含特殊字符或其他东西时(根本不需要),你根本不需要这个选项加入引号。
更新:
mysqldump -u user -p -h host database | grep -v "SET OPTION SQL_QUOTE_SHOW_CREATE" > yourdumpfile.sql
然后,当您将转储插入数据库时,您不必做任何特别的事情。
mysql -u user -p -h host database < yourdumpfile.sql
答案 1 :(得分:1)
mysqldump的替代方法是SELECT的SELECT ... INTO形式,它允许将结果写入文件(http://dev.mysql.com/doc/refman/5.5/en/select-into.html)。
上述帮助页面中的一些示例语法是:
SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
然后可以使用LOAD DATA INFILE(http://dev.mysql.com/doc/refman/5.5/en/load-data.html)加载数据。
页面再次给出了一个例子:
LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test
FIELDS TERMINATED BY ',' LINES STARTING BY 'xxx';
有一个完整的工作示例对:
当您使用SELECT ... INTO OUTFILE与LOAD DATA INFILE一起使用时 将数据从数据库写入文件,然后读回文件 稍后进入数据库,两者的字段和行处理选项 陈述必须匹配。否则,LOAD DATA INFILE将不会解释 正确的文件内容。假设您使用SELECT ... INTO OUTFILE用于编写带逗号分隔的字段的文件:
SELECT * INTO OUTFILE 'data.txt' FIELDS TERMINATED BY ',' FROM table2;
要重新读取逗号分隔的文件,将使用正确的语句 是:
LOAD DATA INFILE 'data.txt' INTO TABLE table2 FIELDS TERMINATED BY ',';
答案 2 :(得分:0)
我使用了快速而肮脏的黑客。