如何在恢复 mysqldump 文件时跳过现有数据?

man*_*pal 5 mysql mysqldump command-line import restore

我使用此查询使用 MySQL Dump(命令提示符/命令行)导入数据

mysql -u root -p database_name < database_name.sql
Run Code Online (Sandbox Code Playgroud)

我想导入大型数据库(仅新的增量),现在我删除数据库并重新导入,但我只想导入新的增量。

Rol*_*DBA 4

我有四(4)条建议:

建议#1:重新创建转储INSERT IGNORE

使用--插入-忽略

编写 INSERT IGNORE 语句而不是 INSERT 语句。

重新加载会发生什么???

  • 新数据被插入。
  • 已存在的主键将被跳过

建议#2:更改INSERTINSERT IGNORE重新加载时

而不是正常加载

mysql -u root -p database_name < database_name.sql
Run Code Online (Sandbox Code Playgroud)

只需将转储通过管道传输到 sed 并重新加载,如下所示:

cat database_name.sql|sed 's/^INSERT/INSERT IGNORE/'|mysql -u root -p database_name
Run Code Online (Sandbox Code Playgroud)

建议#3:重新创建转储REPLACE INTO

使用--替换

编写 REPLACE 语句而不是 INSERT 语句。

重新加载会发生什么???

  • 新数据被插入。
  • 已经存在的主键将被删除并重新插入

建议#4:更改INSERT INTOREPLACE INTO重新加载时

而不是正常加载

mysql -u root -p database_name < database_name.sql
Run Code Online (Sandbox Code Playgroud)

只需将转储通过管道传输到 sed 并重新加载,如下所示:

cat database_name.sql|sed 's/^INSERT INTO/REPLACE INTO/'|mysql -u root -p database_name
Run Code Online (Sandbox Code Playgroud)

概括

  • 如果可以重新创建转储,请使用建议 1 或 3
  • 如果无法重新创建转储,请使用建议 2 或 4

试一试 !!!