唯一约束违规会破坏MySQL复制

时间:2015-03-25 14:00:56

标签: php mysql pdo replication

我有一个有趣的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进行复制。 现在我不相信这么简单的事情可以阻止复制。任何人都面临类似的问题,并且愿意分享解决方案吗?

0 个答案:

没有答案