如何在不删除任何表的情况下进行 mysqldump
问题的出现原因是在使用mysqldump命令备份数据库时,会默认在生成的SQL文件中包含DROP TABLE语句,导致在还原数据库时会先删除原有的表,再重新创建表。然而,如果数据库中已经存在同名的表,执行DROP TABLE语句会导致数据丢失。因此,需要找到一种方法来避免生成DROP TABLE语句。
解决方法是在使用mysqldump命令时添加--skip-add-drop-table
选项。这样,生成的SQL文件中将不再包含DROP TABLE语句。下面是一个示例命令:
$ mysqldump -uuser -p -hhost -Ddatabase --skip-add-drop-table > C:\TEMP\db_2018-04-05.sql
在使用该命令生成的SQL文件中,将不会出现DROP TABLE IF EXISTS语句。
但是需要注意的是,即使不包含DROP TABLE语句,SQL文件中仍然会包含CREATE TABLE语句。如果数据库中已经存在同名的表,执行CREATE TABLE语句时会报错,如ERROR 1050 (42S01) at line 24: Table 'my_table' already exists
。因此,在还原数据库时需要注意处理这些错误。
问题出现的原因是,用户想要使用mysqldump命令只导出表中的数据,而不包括任何表信息。解决方法是在mysqldump命令中添加一些选项。具体方法如下:
如果只想导出表中的数据,可以使用--no-create-info
选项,命令如下:
mysqldump --no-create-info ...
如果使用了触发器,可以使用--skip-triggers
选项,命令如下:
mysqldump --skip-triggers ...
如果使用了--databases ...
选项,可以使用--no-create-db
选项,命令如下:
mysqldump --no-create-db ...
如果想要去除额外的注释,可以使用--compact
选项,命令如下:
mysqldump --compact ...
通过添加上述选项,即可实现只导出表中数据而不包括任何表信息的需求。