Answers:
如果您的从站不是主站,则从站根本不需要二进制日志记录。您可以为从站积累的中继日志空间量设置上限。为了限制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点离开师父。
如果您有任何隔夜的批量处理要做,也许应该SET SQL_LOG_BIN=0;
在会话开始时在主服务器上运行批量处理。当然,这不会复制到从站。您可以并行执行两个从站的相同批量加载。
您可以做的另一件事来管理主二进制日志的累积。
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复制中
如果您故障转移到从站,并且想要使其成为主站
log-bin=mysql-bin
在从站上添加到/etc/my.cnf您将必须设置其他从站到新升级的主站的复制,并确保从站上的数据与新升级的主站匹配。
根据MySQL文档on relay-log
option,您应该对其进行定义。原因如下:
由于MySQL解析服务器选项的方式,如果指定此选项,则必须提供一个值。仅当未实际指定选项时,才使用默认基名。如果使用--relay-log选项而不指定值,则可能会导致意外行为;此行为取决于所使用的其他选项,指定它们的顺序以及是否在命令行或选项文件中指定它们。有关MySQL如何处理服务器选项的更多信息,请参见第4.2.3节“指定程序选项”。