我有一个有趣的MySQL复制问题。该环境由两个MySQL节点组成,通过标准的Mysql机制复制Master-Master,以及具有以下结构的简单数据库:
CREATE DATABASE `replication_test` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci */;
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(65) COLLATE utf8_polish_ci DEFAULT NULL,
`value` int(11) DEFAULT NULL,
`timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `value_UNIQUE` (`value`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
现在这一切都完美无瑕,直到我遇到某种常见情况,这是唯一的约束违规。简单的代码,如下面的
try {
$stmtL = $this->connectionL->prepare('INSERT INTO test (name, value) VALUES (:name, :value)');
$stmtL->bindParam(':name', "name", PDO::PARAM_STR);
$stmtL->bindParam(':value', 1, PDO::PARAM_INT);
echo $stmtL->execute(), "<br/>";
//usleep($delay);
$stmtL = $this->connectionL->prepare('INSERT INTO test (name, value) VALUES (:name, :value)');
$stmtL->bindParam(':name', "name", PDO::PARAM_STR);
$stmtL->bindParam(':value', 1, PDO::PARAM_INT);
echo $stmtL->execute(), "<br/>";
} catch (Exception $ex) {
echo $ex->getMessage(), "<br>";
}
按预期工作,即抛出PDO异常,但同时使用Slave SQL: Error 'Duplicate entry
进行复制。
现在我不相信这么简单的事情可以阻止复制。任何人都面临类似的问题,并且愿意分享解决方案吗?