【问题标题】:How to import a MySQL dump from command line WITH overwrite如何从命令行导入 MySQL 转储 WITH 覆盖
【发布时间】:2012-09-22 12:34:57
【问题描述】:

我用谷歌搜索了很多,但我一无所获!

[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 并重写那个表,有人可以帮我吗?

附言我知道,当您导出数据库时,您可以选择“DROP TABLE”选项,但如果我有备份,没有此声明?我怎么能强迫?谢谢

【问题讨论】:

    标签: mysql import overwrite


    【解决方案1】:

    当你做 mysqldump 添加 --add-drop-table (就像提到的 twihoX)。然后像往常一样进行导入。所以像:

    mysqldump --add-drop-table -u user -p db_1 > dumpfile.sql
    
    mysql -u user -p db_1 < dumpfile.sql 
    

    【讨论】:

    • 很抱歉没有发表评论,但情况恰恰相反。不是 mysql ... > dumpfile.sql。所以命令将是 mysqldump --add-drop-table -u user -p > dumpfile.sql 然后是 mysql -u user -p
    • 好收获。我已经修正了错误。
    • 谢谢。很高兴我们能够解决这个问题,以便其他人可以从准确的答案中受益。
    • 没错,我在那个方面有点快,抱歉
    • 在您的mysql 行上,您忘记将数据库名称放在-p 开关之后。它应该类似于:mysql -u user -p mydatabasename &lt; dumpfile.sql
    【解决方案2】:

    您是否要覆盖整个数据库?如果是这样,您可以手动删除所有表,然后运行导入脚本。这在 phpmyadmin 中很容易做到。如果您使用的是 CLI,最快的方法是使用 DROP DATABASE databasename,然后使用 create database,尽管我认为您必须为任何非 root 用户重新授予权限。

    另一种选择是打开您的转储文件并在每个 CREATE TABLE 命令之前添加DROP TABLE tablename。您可以使用一些聪明的正则表达式轻松地做到这一点。

    【讨论】:

    • 你好,奥克特恩!不,我希望只覆盖tables.sql中包含的表(在这个.sql中我导出了6个表,所以我希望只覆盖这些),从逻辑的角度来看是可能的还是我错过了什么?跨度>
    • 然后使用我的第二个建议并为tables.sql 中的每个CREATE TABLE 命令添加一个DROP TABLE 命令。您可以编写一个 shell 脚本来执行此操作,但如果只有 6 个表,您应该可以在一分钟内手动完成。
    【解决方案3】:

    我建议 --add-drop-table 选项。

    【讨论】:

    • 根据wordpress.stackexchange.com/a/62736/10453 --add-drop-table导出数据库的一个选项。因此,在此基础上,假设它对导入没有影响,如果要导入的 db 中还没有 drop table sql 命令。
    【解决方案4】:

    我知道这个问题有点老了,它已被标记为已正确回答,我只想在这里为那些在导出时不使用 --add-drop-table 的人(如我)添加这个。

    您可以做的是登录 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 继续导入任何新表并忽略“表已存在错误”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 2012-11-09
      • 2017-01-14
      • 1970-01-01
      相关资源
      最近更新 更多