use*_*160 5 mysql mysql-5 mysqldump backup restore
抱歉,我看到了类似的帖子,但我仍然找不到它解决我的问题,另外,我需要更多关于此的信息。
要求:创建现有数据库“db3”的精确副本“db4”。
程序如下:
第二步抛出错误:
ERROR 1062 (23000) at line 5524: Duplicate entry '600806' for key 1"
Run Code Online (Sandbox Code Playgroud)
我用 --force 再次运行了第二步。恢复完成,但有 2 个额外的类似错误:
ERROR 1062 (23000) at line 6309: Duplicate entry '187694' for key 1
ERROR 1062 (23000) at line 6572: Duplicate entry '1567400' for key 1
Run Code Online (Sandbox Code Playgroud)
完成后,当我查询 db4 数据库的某些表时,我能够看到丢失的记录。
题:
这是否表明 db3 数据库已损坏/有问题?
如何继续创建 db3 的“一致/工作”副本 (db4)?
如果(2)失败,如何排除故障并找出其发生的原因?
谢谢,
我建议这确实表明db3
. 默认情况下,mysqldump 生成“扩展”插入语句,每行包含多于一行的插入。
INSERT INTO table_name VALUES (...), (...), (...), ...;
Run Code Online (Sandbox Code Playgroud)
这是一种优化,因为在单个语句中多次插入比执行单个插入语句要快得多。
但是,您可以使用该--skip-extended-insert
选项禁用此行为。
使用该选项进行备份不是一个好主意,因为它们的恢复速度要慢得多,但是此选项确实使转储文件更容易用你的眼球阅读,并且更容易使用grep
或类似工具搜索特定记录.
使用此选项转储数据库,然后在文件中搜索抛出错误的重复键,您似乎很可能会找到重复的行或具有重复键的行,这些行应该是唯一的......这意味着底层表有问题db3
.
我想不出这可能发生的方式,InnoDB
但MyISAM
显然有可能。
还有一些其他mysqldump
选项也可能有用:
--replace
生成一个文件写报表REPLACE INTO
,而不是INSERT INTO
这将导致在以后的文件替换发生冲突的记录早在文件中出现中出现的重复键的记录,不产生错误--insert-ignore
生成一个文件,其语句编写为INSERT IGNORE INTO
而不是INSERT INTO
,这将导致文件中较早出现的重复键记录保留在恢复的表中,因为稍后的冲突记录将被忽略,不会插入,并且不会产生错误。 归档时间: |
|
查看次数: |
17274 次 |
最近记录: |