gpt4 book ai didi

mysql - 这个查询如何破坏我的 mysql 复制?

转载 作者:搜寻专家 更新时间:2023-10-30 22:18:21 25 4
gpt4 key购买 nike

我有一个标准的单向主从设置。这些表具有 MyIsam 存储引擎。

版本是:

硕士服务器版本:5.1.41-3ubuntu12.10-log协议(protocol)版本:10

第一个奴隶:服务器版本:5.1.41-3ubuntu12.10协议(protocol)版本:10

第二个奴隶:服务器版本:5.1.49-1ubuntu8.1协议(protocol)版本:10

我已将专用复制用户旁边的所有用户设置为在从属设备上只读。

以下在主服务器上执行的语句未正确复制:

$insert = "INSERT INTO search_affiliate_product
(film_id, ext_id, affiliate_id, `status`, url, created_at)
SELECT film_id, LPAD(imdb, 7, '0'), $affiliate_id, 5, CONCAT('http://www.imdb.com/title/tt', LPAD(imdb, 7, '0'),'/'), NOW() FROM search_film_entity
WHERE film_id NOT IN (SELECT film_id FROM search_affiliate_product WHERE affiliate_id = $affiliate_id)
AND status IN (5, 9)
AND release_year BETWEEN 0 AND $year
AND imdb > 0";

从站得到这个错误:

Error 'Duplicate entry '271769' for key 'PRIMARY'' on query. Default database:     'flimmit_search_14'. Query: 'INSERT INTO `search_affiliate_product` (`affiliate_id`,     `ext_id`, `url`, `status`, `film_id`, `created_at`, `updated_at`) VALUES ('16', '1991/JohnnyStecchino', 'http://www.cineman.ch/movie/1991/JohnnyStecchino/review.html', '5', '102164', '2011-10-26 02:30:05', '2011-10-26 02:30:05')'

我还做了一些其他的观察:

  • 语句“按原样”通过 bin 日志(中继日志和主日志)传输,因此不包含插入的显式数据,但带有 select 和 subselect 的整个语句在slave,依赖本地数据。

  • 如果我查看主表和从表并按主键排序,我会在两台服务器上看到由上述语句生成的一系列插入。之前和之后的行是同步的。该语句生成的该范围内的许多行也是相等的。但也有出入。

我认为问题可能是由于并发sql事务引起的。因此插入过程会干扰其他插入,因此值会混淆,而在从站上不会发生这种情况,因为日志是按程序处理的。

我还注意到,在语句的插入过程中,似乎插入了一些在另一台服务器上没有插入的 ID,并且插入了一些重复项(在由另一台服务器的 imdb 字段填充的字段 ext_id 上重复表格,这是独一无二的...

我真的被困在这里了。

有什么建议吗?我真的很想了解为什么会这样。

我考虑过选择所有 ID 并在应用程序中制作单个插入语句或在执行之前锁定表。我认为这可以解决它,但我真的很想了解错误。

下一个奇怪的事情是第二个奴隶似乎运行良好!只有第一个奴隶有问题。我只是不明白。

最佳答案

这种复制只能在 innodb 下可靠地完成,并在客户端上进行以下设置

[mysqld]
innodb_flush_log_at_trx_commit=1
sync_binlog=1

关于mysql - 这个查询如何破坏我的 mysql 复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7915687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com