mysqldump的参数–databases引起的血案

需要把一个数据库xxx导到另外一台机器中,另外一台机器已有此db,新导入的放到xxx_old。使用mysqldump导出再导入的方式。

导出时使用了如下命令:

mysqldump --databases xxx > db.sql

然后没有查看导出的sql文件,就使用以下命令导入。

mysql xxx_old < db.sql

进去后发现并没有xxx_old数据库,这才发觉是覆盖了原来的数据库。

查看mysql –help,发觉–databases是如下含义:

  -B, --databases     To dump several databases. Note the difference in usage;
                      In this case no tables are given. All name arguments are
                      regarded as databasenames. 'USE db_name;' will be
                      included in the output.

因为–databases是为多数据库导出而设,所以会在sql里添加USE db_name语句。因为导出时db还是叫xxx,所以有USE xxx语句,自然就use了已有数据库,并drop create table导入数据了。

总结:

  1. 对于单个数据库的导出,切记不要使用–databases。
  2. 导入前,均需要仔细查看将要操作的sql。