【问题标题】:WARNING: The option --database has been used警告:选项 --database 已被使用
【发布时间】:2020-02-27 19:23:40
【问题描述】:

运行 mysqlbinlog 将二进制日志从一台服务器加载到另一台服务器。

不断收到消息:

警告:选项 --database 已被使用。它可以过滤部分交易,但无论如何都会包含 GTID。

嗯——好吗?所以??

也许这是一个愚蠢的问题,但我应该如何区分我想要的数据库的“GTID”和我不想要的数据库的“GTID”?换句话说,如何在关闭这个烦人的警告的同时指定特定数据库的事务?

尝试添加“--include-gtids”参数,但我认为它需要一个 GTID 列表。我没有 GTID 列表。我有一个数据库。为什么这么复杂?

【问题讨论】:

    标签: mysql mysqlbinlog gtid


    【解决方案1】:

    这很复杂,因为--database 并不意味着您可能认为的意思。

    这并不意味着只包括对命名数据库的更改。

    means:

    此选项使 mysqlbinlog 输出二进制日志(仅限本地日志)中的条目,这些条目是在 USE 选择 db_name 作为默认数据库时发生的。

    例如:

    USE db1;
    INSERT INTO db2.mytable ...
    

    如果您使用--database db2,则不会包含此内容,因为当此事务写入二进制日志时,db2 不是默认数据库。

    另一个例子:

    USE db3;
    UPDATE db1.mytable JOIN db2.myothertable
    SET db1.col1 = ...,
        db2.col2 = ...;
    

    如果您使用--database db2,是否应该包括由此产生的对db1.mytable 的更改?

    技巧问题:对既不表的更改将被包括在内,因为当前的默认数据库是db3

    【讨论】:

    • 您好,感谢您的回复。所以现在我知道为什么它很复杂了。我们使用的是 CakePHP 框架,据我所知,内部有两个“USE DB”;和“UPDATE DB.TABLE”语句在相当一致的基础上。除了测试时,没有其他数据库在使用。而且,尽管始终发出此警告,但进程确实似乎正在复制指定的数据库。
    • 是的,但是 MySQL 旨在与任何应用程序一起工作,而不仅仅是您的应用程序。 :-)
    • MySQL 无疑是一个很棒的数据库,没有争议,但我仍然想知道如何消除这个恼人的警告,同时仍然限制对指定数据库的更新。我目前已将 stderr 重定向到一个文件(否则它会通过电子邮件发送给我),但这似乎是不必要的混乱。此外,即使它在 99.9% 的时间里都能正常工作,但仍然存在这种不太可能的情况,即有人可能在忽略“USE DB”的情况下手动登录并更新表;先命令。我还需要捕获这些更新,正如您描述的过程,它们不会。
    • 我不知道有什么解决方案可以按照您的描述进行操作。 mysqlbinlog 中没有选项可以过滤对特定数据库中的表所做的更改,仅适用于在特定 default 数据库处于当前状态时所做的更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多