我意外地用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”?我有点担心会弄乱备份文件,所以我想采用那些有经验的人推荐的最佳方法。
答案 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.