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

标签 mysql sql database

我不小心用 NULL 替换了 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_bckup,或者是否有更管理的方法将文件中的所有“db”引用更改为“db_bckup”?我有点担心弄乱备份文件,所以我想采取那些有更多经验的人推荐的最佳方法。

最佳答案

如果在 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]

仅供引用,mysqldump提供了不创建表的选项。

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

关于mysql - 导入 mysql 转储而不覆盖现有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20015675/

相关文章:

php - MySQL 查询 WordPress 数据库

mysql - 如何从计数中选择具有最大产值的行

sql - PostgreSQL:选择一周中某一天、特定时区发生的行

php - MySQL "lock"一个表条目

sql-server - 当分配的空间阻止您更改 Azure SQL 数据库层时,最好的方法是什么?

mysql - SQL - 连接中的重复项

php - 并非所有字段都插入到 MySQL 表中

php - CakePHP:带有 Containable 的 findById() 未返回预期的关联

database - MERGE 也可以DELETE 吗?示例仅显示 INSERT/UPDATE

swift - 如何将帖子 ID 传递给评论 VC - Swift