我需要恢复转储的数据库,但不要丢弃表中的现有行。
转储我使用:
mysqldump -u root --password --databases mydatabase > C:\mydatabase.sql
要恢复我不使用mysql命令,因为它会丢弃所有现有的行,但显然mysqlimport应该可以做到这一点。但是怎么样?运行:
mysqlimport -u root -p mydatabase c:\mydatabase.sql
表示“table mydatabase.mydatabase不存在”。为什么要寻找桌子?如何在不丢弃现有表中的现有行的情况下还原整个数据库的转储?如果mysqlimport想要它,我可以转储单个表。
怎么办?
答案 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输出文件。如果你不想这样做,你必须解释为什么要得到更好的答案。