關於Relay Log無法自動刪除的問題(Neither,relayneither

來源:互聯網
上載者:User

關於Relay Log無法自動刪除的問題(Neither,relayneither

今天查看mysql err日誌,發現mysql重啟時總會有如下日誌出現:

[Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=liytest-relay-bin' to avoid this problem.


這個警告提示本身的意思,作為slave,為防止因為主機名稱變更導致relay log檔案名稱無效的問題,最好設定'--relay-log=liytest-relay-bin'

但問題時,我這機器根本就沒有開啟slave模式,而且資料目錄下一直有liytest-relay-bin.000001,relay的出現並且堆積,上網搜尋總結一下原因

該執行個體原先是一個Slave   -------導致relay-log 和 relay-log.index的存在

該執行個體目前已經不是Slave  -------由於沒有了IO-Thread,導致relay-log-purge 沒有起作用( 這也是其他Slave執行個體沒有這種情況的原因,因為IO-thread會做自動rotate操作)。

該執行個體每天會進行日常備份  -------Flush logs的存在,導致每天會產生一個relay-log

該執行個體沒有配置expire-logs-days ------導致flush logs時,也不會做relay-log清除

簡而言之就是: 一個執行個體如果之前是Slave,而之後停用了(stop slave),且沒有配置expire-logs-days的情況下,會出現relay-log堆積的情況。


順帶也和大家分享下MySQL 內部Logrotate的機制
Binary Log rotate機制:
Rotate:每一條binary log寫入完成後,都會判斷當前檔案是否超過 max_binlog_size,如果超過則自動產生一個binlog file
Delete:expire-logs-days 只在 執行個體啟動時 和 flush logs 時判斷,如果檔案訪問時間早於設定值,則purge file
 
Relay Log rotate 機制:
Rotate:每從Master fetch一個events後,判斷當前檔案是否超過 max_relay_log_size 如果超過則自動產生一個新的relay-log-file
Delete:purge-relay-log 在SQL Thread每執行完一個events時判斷,如果該relay-log 已經不再需要則自動刪除

因此建議當slave不再使用時,一定要通過reset slave來取消relaylog,不然即使重啟mysql,問題還是一樣存在。


怎刪除relay-log mysql

讓slave不要和主庫有延遲會自動刪的啊。
show slave status\G
看下有沒有延遲,有延遲的話,想辦法讓其追上吧。
沒有延遲還有relay-log,直接刪即可。
 
助:MYSQL的MASTER-SLAVE主從配置中,SLAVE機中relay-bin檔案可以儲存,如果不想自動刪除該怎配置?

在my.ini(window)或my.cnf(linux)裡設定
[mysqld]
relay_log_purge = 0
(1為自動刪除,0則不)
記得重新啟動喔
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.