我搜索了很多,我一无所知!
[root@someday backups]# mysql -u username_1 -p db_1 < tables_to_import/tables.sql
ERROR 1050 (42S01) at line 19: Table 'ps_customer' already exists
与mysql -f
的是相同的。我希望简单地导入.sql并重写那些表,有人可以帮助我吗?
P.S。我知道当你导出数据库时你可以选择选项“DROP TABLE”,但如果我有一个备份,没有这个声明?我该怎么办?感谢
答案 0 :(得分:27)
当你做mysqldump时添加--add-drop-table(就像提到的twihoX)。然后像往常一样进行导入。如下所示:
mysqldump --add-drop-table -u user -p > dumpfile.sql
mysql -u user -p < dumpfile.sql
答案 1 :(得分:5)
您是否试图覆盖整个数据库?如果是这样,您可以手动删除所有表,然后运行导入脚本。这在phpmyadmin中很容易做到。如果您正在使用CLI,最快的方法是使用DROP DATABASE databasename
然后使用create database
,但我认为您必须为任何非root用户重新授予权限。
另一种选择是打开转储文件并在每个CREATE TABLE命令之前添加DROP TABLE tablename
。你可以用一些聪明的正则表达式轻松地做到这一点。
答案 2 :(得分:2)
我建议使用--add-drop-table选项。
答案 3 :(得分:0)
我知道这个问题有点老了,它被标记为正确回答,我只想在这里为那些在导出时不使用--add-drop-table的人(像我一样)添加这个。 / p>
您可以做的是登录MySQL并删除计划覆盖的表,然后在导入时使用--force。
因此登录到MySQL
mysql -h HOSTNAME - USERNAME -p
然后告诉mysql您希望使用哪个数据库
mysql> use DATABASE_NAME
删除要覆盖的表
mysql> DROP TABLE my_images;
然后您就可以导入了,因此退出mysql并返回上载SQL文件的位置并运行以下命令
$ mysql --force -uDB_USER -p DB_NAME < myuploadedfile.sql
这将强制MySQL继续导入任何新表,并忽略“表已存在错误”