我不小心用 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/