エラー: MySQL partition is 100% full, MySQL won’t operate

Document created by Koichi_Ikarashi Employee on Jul 7, 2017Last modified by Koichi_Ikarashi Employee on Jul 24, 2017
Version 1Show Document
  • View in full screen mode

文書番号: JTEC002611

製品名: CA API Management Gateway

バージョン: 9.x, 8.x

 

この技術情報は既存のTEC1168083の内容を日本語で概要を案内するものです。

 

◆症状:

エラー: Mysql partition is 100% full, mysql won’t operate

 

MySQLパーティションはいくつかの理由でフルになることがあります。
1. 監査ログがDBを埋め尽くした場合、DBサイズが肥大しMySQLパーティションが100% fullとなります。
2. レプリケーションが正常動作せず、binログの肥大化が加速し、スペースを埋め尽くしてしまう。

 

これら2点についてはソリューションがあります。Binログと監査スクリプトを管理してコントロールするようにします。


システムを監視しない場合、またはcron-tabユーザ名・パスワードの期限切れでそれらのスクリプトが失敗する場合、異常動作していかのような状況となることがあります。

/dev/mapper/vg00-lv_db
21G 20G 0 100% /var/lib/mysql

 

◆環境:
RED HAT 5/6
VM appliance またはHardware appliance

 

◆原因:
1. 監査ログがDBを埋め尽くした場合、DBサイズが肥大しMySQLパーティションは100% fullとなります。
2. レプリケーションが正常動作せず、binログの肥大化が加速し、スペースを埋め尽くしてしまう。

 

◆解消方法:
このような事態が発生した直後は、レプリケーションの再構築するのではなく、以下の手順に従いレプリケーションを停止します。もし事態発生から時間がたっていて、MySQLが起動しない場合、レプリケーションは停止できませんので、手動でbinとリレーログを削除してインデクスファイルをリセットします。

 

クラスター上の両方のノードにおいて

1. プライマリDBノードとセカンダリDBのMySQLを停止します:

service mysql stop


2. プライマリDBノードとセカンダリDBのバイナリログと リレーログファイルを削除します:

find /var/lib/mysql -type f -regextype posix-extended -regex ".*[0-9]{6}" -exec rm {} \;

付記:明確化するために記載しますが、削除対象のログは以下に存在します:

/var/lib/mysql/

 

以下のようになります。
-rw-rw---- 1 mysql mysql 524288827 Jul 1 02:46 ssgbin-log.000001
-rw-rw---- 1 mysql mysql 56779582 Jul 1 09:04 ssgbin-log.000002
-rw-rw---- 1 mysql mysql 197 Jun 30 05:02 ssgrelay-bin.000003
-rw-rw---- 1 mysql mysql 254 Jun 30 05:02 ssgrelay-bin.000004

 

つぎに
3. バイナリログ インデクスをリセットします:

cat /dev/null > /var/lib/mysql/ssgbin-log.index


4. リレーログ インデクスをリセットします:

cat /dev/null > /var/lib/mysql/ssgrelay-log.index
cat /dev/null > /var/lib/mysql/ssgrelay-bin.index
cat /dev/null > /var/lib/mysql/ssgrelay-bin.info

5. プライマリDBノードとセカンダリDBのMySQLを起動します:

service mysql start

6. レプリケーションを停止して、再ビルドします。

 

レプリケーションの停止
1) プライマリデータベースをバックアップします。安全のため、セカンダリデータベースもバックアップします。つまり、両方のノードで以下のコマンドを実行します。

[root@host ~]# mysqldump --all-databases | gzip > ~/all.sql.gz

2) 両方のノードでスレーブレプリケーションを停止します。

[root@host ~]# mysqladmin stop-slave

3) 両方のノードでマスター/スレーブコンフィグレーションをリセットします。

[root@host ~]# mysql -e "reset master"
mysql -e "reset slave all"

 

レプリケーションの再ビルド
Gatewayを停止します:

service ssg stop  

4) セカンダリノードでcreate_slave.shスクリプトを実行します:

[root@host2 ~]# /opt/SecureSpan/Appliance/bin/create_slave.sh

5) プロンプトに対して、プライマリノードのFQDNを指定します。
6) ローカルデータベースをdropする要求を承認し、プライマリノードからデータベースをコピーします。
7) プライマリノードでcreate_slave.shスクリプトを実行します:

[root@host1 ~]# /opt/SecureSpan/Appliance/bin/create_slave.sh

8) プロンプトに対して、セカンダリノードのFQDNを指定します。
9) ローカルデータベースをdropする要求を拒否します。

 

Gatewayを起動します:

service ssg start  


10) レプリケーションのステータスを確認します。

[root@host ~]# mysql -e "show slave status\G"

11) 両方のノードが以下の行を返すことを確認します。

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

 

◆追加情報:

TEC1168083: MySQL partition is 100% full, MySQL won’t operate

Attachments

    Outcomes