导入mysql转储而不覆盖现有数据

时间:2013-11-16 06:50:24

标签: mysql sql database

我意外地用mysql替换了mysql表中某个字段的所有记录,并尝试恢复备份,以便在当前表和备份之间运行更新查询。我创建了一个名为db_bckup的新数据库,将其留空,然后尝试从命令行导入它:

mysql -u root -p db_bckup < mysqlbackupfile.sql

我认为这会将备份加载到我的db_bckup数据库,该数据库为空。令我惊讶的是,它覆盖了原始数据库而不是加载到db_bckup中。在查看sql文件的内容时,我注意到内容包括行:

Host: localhost     Database: db
-------------------------------------------
Server version      5.5.34-0ubuntu0.13.04.1

[SET a bunch of things]

Current Database: 'db'

CREATE DATABASE /*!32312 IF NOT EXISTS*/ 'db' /*!40100 DEFAULT CHARACTER SET latin1 */;

USE 'db';

[table specific stuff]

我怀疑sql文件中对'db'的引用是否覆盖了我的命令行导入代码。

我的问题是:sql文件或命令行是否导致覆盖?如果sql文件是原因,是手动编辑备份文件以将db名称更改为db_bckup还是有更多管理方法将文件中的所有“db”引用更改为“db_bckup”?我有点担心会弄乱备份文件,所以我想采用那些有经验的人推荐的最佳方法。

1 个答案:

答案 0 :(得分:0)

如果在mysqldump中指定db_name,则USE db_name将不会在其输出中打印。我想你曾尝试--databases--all-database

Usage: mysqldump [OPTIONS] database [tables]  <= you need to run mysqldump this way
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

和FYI,mysqldump提供了不创建表的选项。

  -t, --no-create-info Don't write table creation info.