MySQL バイナリログの削除
Rev.1を表示中。最新版はこちら。
1. 概要
MySQLでレプリケーションを行っているとMasterにバイナリログが溜っていきディスクを圧迫するので定期的に削除してやる必要がある。
2. 手順
2.1 レプリケーション状態の確認
まず、どこまでバイナリログを削除してよいかを調べる。
Slave側でSHOW SLAVE STATUSを実行し、Slaveがバイナリログをどこまで読み取っているかを調べる。「Master_Log_File」が現在参照中のバイナリログ。以下の例ではskylancer00-bin.000084を使用していることになるので、skylancer00-bin.000083まで削除してしまってよいことになる。Slaveが複数いる場合は、全Slaveについて確認を行う。
mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: xxxx
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: skylancer00-bin.000084
Read_Master_Log_Pos: 65746708
Relay_Log_File: skylancer01-relay-bin.000362
Relay_Log_Pos: 65746851
Relay_Master_Log_File: skylancer00-bin.000084
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
<略>
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.00 sec)
2.2 バイナリログの削除
Master側でSHOW MASTER LOGSを実行すると、バイナリログの一覧が表示される。レプリケーションが順調に動作しているのであれば、最後のバイナリログと2.1で確認した「Master_Log_File」は同じものであるはず。
mysql> SHOW MASTER LOGS; +------------------------+------------+ | Log_name | File_size | +------------------------+------------+ | skylancer00-bin.000001 | 1074149684 | | skylancer00-bin.000002 | 1073741963 | | skylancer00-bin.000003 | 1073742026 | | skylancer00-bin.000004 | 1073741905 | : | skylancer00-bin.000083 | 1073742014 | | skylancer00-bin.000084 | 65746708 | +------------------------+------------+ 84 rows in set (0.00 sec)
ここでは、2.1で確認したskylancer00-bin.000084より前のバイナリログを削除するには、PURGE MASTER LOGS TO 'skylancer00-bin.000084'とすればよい。指定したファイルより前のログファイルが削除される。
mysql> PURGE MASTER LOGS TO 'skylancer00-bin.000084'; Query OK, 0 rows affected (2 min 8.51 sec) mysql> SHOW MASTER LOGS; +------------------------+------------+ | Log_name | File_size | +------------------------+------------+ | skylancer00-bin.000084 | 65746708 | +------------------------+------------+ 1 rows in set (0.00 sec)