mysqlimport使用转储

时间:2013-01-29 20:52:55

标签: mysql

我需要恢复转储的数据库,但不要丢弃表中的现有行。

转储我使用:

mysqldump -u root --password --databases mydatabase > C:\mydatabase.sql

要恢复我使用mysql命令,因为它会丢弃所有现有的行,但显然mysqlimport应该可以做到这一点。但是怎么样?运行:

mysqlimport -u root -p mydatabase c:\mydatabase.sql

表示“table mydatabase.mydatabase不存在”。为什么要寻找桌子?如何在不丢弃现有表中的现有行的情况下还原整个数据库的转储?如果mysqlimport想要它,我可以转储单个表。

怎么办?

3 个答案:

答案 0 :(得分:2)

如果你担心重做现有的行,你需要mysqldump它如下:

MYSQLDUMP_OPTIONS="--no-create-info --skip-extended-insert"
mysqldump -uroot --ppassword ${MYSQLDUMP_OPTIONS} --databases mydatabase > C:\mydatabase.sql

这将执行以下操作:

  • 删除CREATE TABLE语句并仅使用INSERT。
  • 它将一次只插入一行。这有助于缓解具有重复键的行

以这种方式执行mysqldump,现在可以像这样导入

mysql -uroot -p --force -Dtargetdb < c:\mydatabase.sql

试一试!!!

警告:使用--skip-extended-insert转储会使mysqldump非常大,但至少可以逐个控制每个重复项。这也将增加重新加载mysqldump的时间长度。

答案 1 :(得分:1)

我会在文本编辑器中编辑mydatabase.sql文件,删除引用删除表或删除行的行,然后正常使用mysql命令手动导入文件。

mysql -u username -p databasename < mydatabase.sql

mysqlimport命令是为使用mysql命令SELECT INTO OUTFILE而不是直接数据库转储创建的转储而设计的。

答案 2 :(得分:0)

这听起来比你描述的要复杂得多。

如果按照描述的方式进行备份,它将包含数据库中的所有记录。那么你说你不想删除数据库中的现有行并从备份中加载?为什么?备份文件(mysqldump的输出)具有drop和create table命令的原因是为了确保您不会使用两个数据副本。

正确的答案是使用mysql客户端加载mysqldump输出文件。如果你不想这样做,你必须解释为什么要得到更好的答案。