在复制环境中删除bin日志


13

我有一个关于在复制环境中删除二进制日志的问题:

我们有一个具有1个主设备和2个从设备的环境(运行mysql 5.5)。有时,在繁重的处理时间中,我们遇到了空间问题,因此bin日志目录已满。日志每3天过期一次。我想知道,是否有理由将所有主机(包括主机和从机)上的日志保存3天?例如,将日志在主服务器上保留3天,在从属服务器上保留1天是否有意义?最好的方法是什么?

谢谢!


欢迎使用DBA.SE。这个问题值得+1,因为二进制日志和中继日志的增长通常被认为是理所当然的,如果不加以检查,可能会成为许多问题的根源。
RolandoMySQLDBA'8年

Answers:


12

奴隶

如果您的从站不是主站,则从站根本不需要二进制日志记录。您可以为从站积累的中继日志空间量设置上限。为了限制4G的中继日志,relay_log_space_limit请在每个从站上将其添加到/etc/my/.cnf

[mysqld]
relay_log_space_limit=4G

然后重启mysql

如果您不能设置此项,至少您应该具有某种警报功能SHOW SLAVE STATUS\G并检查Relay_Log_Space(中继日志消耗的总字节数)的值。

至于师父,您可以设置expire_logs_days为1,但是我有一个严重警告给您...

如果复制中断,则您有1天的时间来修复它。否则,主服务器上的二进制日志可能会旋转,并且您无法运行任何CHANGE MASTER TO命令来重新对齐复制。我会expire_logs_days在3点离开师父。

建议#1

如果您有任何隔夜的批量处理要做,也许应该SET SQL_LOG_BIN=0;在会话开始时在主服务器上运行批量处理。当然,这不会复制到从站。您可以并行执行两个从站的相同批量加载。

建议#2

您可以做的另一件事来管理主二进制日志的累积。

SHOW SLAVE STATUS\G在两个从站上运行。看看Relay_Master_Log_File。这表示在从站上执行了最后一条命令的主站上的二进制日志。

*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 10.4.92.250
                Master_User: replicant
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.009677
        Read_Master_Log_Pos: 855227755
             Relay_Log_File: relay-bin.000674
              Relay_Log_Pos: 757296783
      Relay_Master_Log_File: mysql-bin.009590
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB:
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 757296646
            Relay_Log_Space: 94274010765
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 80561
1 row in set (0.00 sec)

在此示例中,Relay_Master_Log_File是mysql-bin.009590。可以从Master删除所有之前的所有二进制日志。您可以在Master上运行此命令:

PURGE BINARY LOGS TO 'mysql-bin.009590';

这将清除较旧的日志,并且仍然保持复制不变。

警告

二进制日志是作为SQL语句或行更改以串行方式编译(如FIFO队列)所有已完成的SQL事务的文件。中继日志是一个从远程服务器(也称为主服务器)收集二进制日志条目的文件。

在MySQL复制中

  1. 主服务器必须启用其二进制日志
  2. 从站编译中继日志
  3. 处理中继日志中的所有SQL后,将其删除
  4. 在从站上,当一个DB Server上有多个中继日志时,这可能表明复制落后了,因为IO线程从Master收集SQL的速度快于SQL线程可以处理中继日志的速度。
  5. 使用relay_log_space_limit可以防止复制堆积和可能填满磁盘。中继日志根据规则#3轮换
  6. DB Server可能既是主服务器又是从服务器。这是唯一一个必须启用从属日志的从属环境。在这种情况下,数据库服务器将同时具有二进制日志和中继日志。

如果您故障转移到从站,并且想要使其成为主站

  • 服务mysql停止
  • log-bin=mysql-bin在从站上添加到/etc/my.cnf
  • 服务mysql启动

您将必须设置其他从站到新升级的主站的复制,并确保从站上的数据与新升级的主站匹配。

更新2012-08-13 17:47 EDT

根据MySQL文档on relay-logoption,您应该对其进行定义。原因如下:

由于MySQL解析服务器选项的方式,如果指定此选项,则必须提供一个值。仅当未实际指定选项时,才使用默认基名。如果使用--relay-log选项而不指定值,则可能会导致意外行为;此行为取决于所使用的其他选项,指定它们的顺序以及是否在命令行或选项文件中指定它们。有关MySQL如何处理服务器选项的更多信息,请参见第4.2.3节“指定程序选项”。


评论不作进一步讨论;此对话已转移至聊天
保罗·怀特9
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.