我们的一位MariaDB用户决定通过shell脚本复制数据库,该脚本将mysqldump的输出传递给另一个表。
如果将mysqldump恢复到以前没有创建的数据库,它就可以正常工作。但是,如果您删除该数据库,重新创建它,然后再次尝试运行该脚本,则会引发以下错误:
第25行的错误1005(HY000):无法创建表格
core_dev
。addresses
(错误:121"写入或更新时重复密钥") mysqldump:写错了32#
SHOW ENGINE INNODB STATUS产生以下见解:
2017-05-03 09:34:19 7f9929fb4b00外键约束出错 表格
core_dev
的创建。addresses
。一个外键约束 名称core_dev
。addresses_ibfk_2
已存在。 (注意 内部InnoDB添加了数据库名称'在用户定义的前面 约束名。)注意InnoDB的FOREIGN KEY系统表存储 约束名称不区分大小写,具有MySQL标准 latin1_swedish_ci整理。如果您创建表或数据库 名称仅在字符情况下有所不同,然后在约束中发生冲突 名字可以发生。解决方法:使用显式命名约束 独特的名字。
但是,core_dev数据库完全为空:
MariaDB [(无)]>在core_dev中显示表格; 空集(0.01秒)
问题是什么?我无法在任何其他MariaDB 10.1服务器上复制此问题。唯一的区别是这个特定的一个在CentOS 6上运行,而其他的在CentOS 7上运行。