代码之家  ›  专栏  ›  技术社区  ›  The Surrican

Mysql主日志位置在全局锁定期间发生更改?

  •  0
  • The Surrican  · 技术社区  · 14 年前

    运行名.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
    

    1.sql语言

    FLUSH TABLES WITH READ LOCK;
    SHOW MASTER STATUS;
    

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

    2.sql语言

    SHOW MASTER STATUS;
    UNLOCK TABLES;
    

    结果如下:

    logpos.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并添加主数据,但我不知何故感到不安全,因为涉及到不同的数据库格式,我无法真正了解mysqldump主数据在多个数据库中的行为。所以我有了这个脚本,得到了不同的日志位置。。。。知道为什么吗?我不能用这个来设置复制。。。

    更新:

    我最后决定用 mysqldump --master-data --databases db1 db2 垃圾场是今晚凌晨1点建立的。 今天上午10点左右,我安排了奴隶。我完全清除了数据库(删除了所有表)并导入了dump,这将自动正确设置主日志文件和日志位置。我检查了它是否与sql转储中的相同。一切看起来都很好。 当然,在导入之前我已经停止了从服务器(否则我就不能用changemaster to语句anway导入转储)。

    知道为什么吗?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Ike Walker    14 年前

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

    以您的例子:

    mysqlbinlog --start-position=49106286 --stop-position=49139992 mysql-bin.000335
    
        2
  •  1
  •   The Surrican    14 年前

    看来我还得做:

    FLUSH TABLES WITH WRITE LOCK;
    

        3
  •  1
  •   Symmetric    13 年前

    manual

    警告-使发出FLUSH TABLES语句的客户机保持运行,以便读锁保持有效。如果退出客户端,锁将被释放。