У меня есть интересная проблема с репликацией MySQL. Среда состоит из двух узлов MySQL, реплицированного Master-Master через стандартные механизмы Mysql и простой базы данных со следующей структурой:
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
,
Сейчас я не верю, что такая простая вещь могла остановить репликацию. Кто-нибудь сталкивался с подобной проблемой, и хотите поделиться решением?
Задача ещё не решена.
Других решений пока нет …