gpt4 book ai didi

mysql master log pos在全局锁期间发生变化?

转载 作者:行者123 更新时间:2023-11-29 04:58:53 26 4
gpt4 key购买 nike

我必须设置一个新的 mysql 复制来复制两个数据库。所以我有这个脚本可以锁定表,进行转储并解锁它们。

runme.sh

mysql -uxxx -pxxx < 1.sql >> logpos.txt
mysqldump -uXXX -pXXX db1 > db1.sql
mysqldump -uXXX -pXXX db2 > db2.sql
mysql -uxxx -pxxx < 2.sql >> logpos.txt

第一个sql文件锁定表并导出master状态:

1.sql

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

第二个文件导出主状态并解锁表

2.sql

SHOW MASTER STATUS;
UNLOCK TABLES;

结果是这样的:

日志文件.txt

File    Position        Binlog_Do_DB    Binlog_Ignore_DB
mysql-bin.000335 49106285 fli_search,flimmit
File Position Binlog_Do_DB Binlog_Ignore_DB
mysql-bin.000335 49139991 fli_search,flimmit

问题:表锁定时日志位置如何更改?

Server version:  5.0.51a-24+lenny4-log (Debian)

我可以为多个数据库执行 mysqldump 并添加 --master-data,但不知何故我感到不安全,因为涉及不同的数据库格式,而且我无法真正找出 mysqldump --master-data 在多个数据库中的行为方式。所以我有了这个脚本并获得了不同的日志位置……知道为什么吗?我不能用它来设置复制...

更新:

我最终决定使用 mysqldump --master-data --databases db1 db2 设置复制转储创建于今晚凌晨 1 点。今天上午 10 点左右,我设置了奴隶。我完全清除了数据库(删除了所有表)并导入了转储,这会自动正确设置主日志文件和日志位置。我检查了它与 sql 转储中的相同。一切看起来都很好。当然,我在导入之前停止了从属(否则我无法导入带有 change master to statement 的转储)。我启动了奴隶,一切看起来都很好。 log pos 增加,落后于 master 的秒数减少并变为 0,并且正确复制了一些测试数据。

但是从今天早上 7 点(转储创建和导入之间的时间窗口)开始的一个主要更新就丢失了。它从 table 上删除旧记录,在奴隶身上他们仍然存在......知道为什么吗?

需要任何其他信息吗?评论...

最佳答案

如果您想查看在这两个位置值之间写入二进制日志的内容,您可以使用 mysqlbinlog将相关二进制日志条目转换为 SQL 的工具。只需使用第一个 pos 作为起始位置,第二个 pos + 1 作为停止位置。这样您将看到在您的 FLUSH 之后发生的所有事件(它还会向您显示刷新之前发生的最后一个事件,因此请忽略第一个事件)。

使用你的例子:

mysqlbinlog --start-position=49106286 --stop-position=49139992 mysql-bin.000335

关于mysql master log pos在全局锁期间发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3765031/

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