【tech】MySQLのbinログ削除メモ



自宅のNWはZabixx4.4で監視しているのですが、Zabbix-serverにディスク容量閾値超過のアラートが出ていたので、対応したメモです。

binログはOSから削除できてしまうのですが、直接消したところで、DISK容量が空くわけではないそうです。
気になったので試してみました。

環境

MYSQL Ver 8.0




・ディスク容量の確認
df -h


[root@zabbix mysql]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 900M 0 900M 0% /dev
tmpfs 915M 0 915M 0% /dev/shm
tmpfs 915M 17M 899M 2% /run
tmpfs 915M 0 915M 0% /sys/fs/cgroup
/dev/mapper/cl-root ** 14G 12G 1.9G 86% /**
/dev/vda1 976M 127M 782M 14% /boot
tmpfs 183M 0 183M 0% /run/user/0


ルートディレクトリが残り1.9GBまで減っています。
・ルートディレクトリでファイルサイズが100MB以上のものを確認
find / -size +100M | xargs ls -lh | sort -rn


[root@zabbix mysql]# find / -size +100M | xargs ls -lh | sort -rn
-rw-r----- 1 mysql mysql 977M Feb 11 05:02 /var/lib/mysql/binlog.000008
-rw-r----- 1 mysql mysql 761M Mar 14 09:43 /var/lib/mysql/binlog.000016
-rw-r-----. 1 mysql mysql 164M Mar 14 09:43 /var/lib/mysql/zabbixDB/history_uint.ibd
-rw-r-----. 1 mysql mysql 136M Mar 14 09:43 /var/lib/mysql/zabbixDB/history_text.ibd
-rw-r-----. 1 mysql mysql 132M Mar 14 09:43 /var/lib/mysql/zabbixDB/history.ibd
-rw-r----- 1 mysql mysql 1.1G Mar 6 23:08 /var/lib/mysql/binlog.000014
-rw-r----- 1 mysql mysql 1.1G Mar 2 18:01 /var/lib/mysql/binlog.000013
-rw-r----- 1 mysql mysql 1.1G Mar 11 06:03 /var/lib/mysql/binlog.000015
-rw-r----- 1 mysql mysql 1.1G Feb 27 19:56 /var/lib/mysql/binlog.000012
-rw-r----- 1 mysql mysql 1.1G Feb 23 23:50 /var/lib/mysql/binlog.000011
-rw-r----- 1 mysql mysql 1.1G Feb 19 21:21 /var/lib/mysql/binlog.000010
-rw-r----- 1 mysql mysql 1.1G Feb 15 10:39 /var/lib/mysql/binlog.000009
[root@zabbix mysql]#


1.1GBのbinlogがたまってしまっていました。

・binlogのディレクトリまで移動
cd /var/lib/mysql/

・ファイル確認
ls -lh |grep bin


[root@zabbix mysql]# ls -lh |grep bin
-rw-r----- 1 mysql mysql 977M Feb 11 05:02 binlog.000008
-rw-r----- 1 mysql mysql 1.1G Feb 15 10:39 binlog.000009
-rw-r----- 1 mysql mysql 1.1G Feb 19 21:21 binlog.000010
-rw-r----- 1 mysql mysql 1.1G Feb 23 23:50 binlog.000011
-rw-r----- 1 mysql mysql 1.1G Feb 27 19:56 binlog.000012
-rw-r----- 1 mysql mysql 1.1G Mar 2 18:01 binlog.000013
-rw-r----- 1 mysql mysql 1.1G Mar 6 23:08 binlog.000014
-rw-r----- 1 mysql mysql 1.1G Mar 11 06:03 binlog.000015
-rw-r----- 1 mysql mysql 759M Mar 14 09:21 binlog.000016
-rw-r----- 1 mysql mysql 144 Mar 11 06:03 binlog.index
[root@zabbix mysql]#




・binlogを削除 
 ※これは悪い例です。最新のbinlog(binlog.000016)は消さないようにしましょう。MySQLが起動しなくなります。
rm -i binlog.00001[3456]

・削除後の確認
ls -lh |grep bin


[root@zabbix mysql]# ls -lh |grep bin
-rw-r----- 1 mysql mysql 977M Feb 11 05:02 binlog.000008
-rw-r----- 1 mysql mysql 1.1G Feb 15 10:39 binlog.000009
-rw-r----- 1 mysql mysql 1.1G Feb 19 21:21 binlog.000010
-rw-r----- 1 mysql mysql 1.1G Feb 23 23:50 binlog.000011
-rw-r----- 1 mysql mysql 1.1G Feb 27 19:56 binlog.000012
-rw-r----- 1 mysql mysql 144 Mar 11 06:03 binlog.index
[root@zabbix mysql]#


・容量確認
df -h


[root@zabbix mysql]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 900M 0 900M 0% /dev
tmpfs 915M 0 915M 0% /dev/shm
tmpfs 915M 17M 899M 2% /run
tmpfs 915M 0 915M 0% /sys/fs/cgroup
/dev/mapper/cl-root 14G 8.3G 4.9G 63% /
/dev/vda1 976M 127M 782M 14% /boot
tmpfs 183M 0 183M 0% /run/user/0
[root@zabbix mysql]#


あれ、しっかり減ってましたね。インターネットを調べるとログを削除しただけだとDISK容量増えないと書いてあったのですが、消えるみたいですね。

正しいやり方は、以下のMySQLからの削除が正しいそうです。


MySQLからのbinlogの削除手順です!


・MySQLへログイン
mysql -u root -p
→PW入力

・バイナリログの確認
show master logs;


mysql> show master logs;
+---------------+------------+-----------+
| Log_name | File_size | Encrypted |
+---------------+------------+-----------+
| binlog.000008 | 1024407305 | No |
| binlog.000009 | 1075369878 | No |
| binlog.000010 | 1073741871 | No |
| binlog.000011 | 1076041745 | No |
| binlog.000012 | 1073741987 | No |
| binlog.000013 | 0 | No |
| binlog.000014 | 0 | No |
| binlog.000015 | 0 | No |
| binlog.000016 | 798802324 | No |
+---------------+------------+-----------+
9 rows in set (0.00 sec)


・現在のbinlogを確認
SHOW MASTER STATUS\g;


mysql> SHOW MASTER STATUS\g;
+---------------+-----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+-----------+--------------+------------------+-------------------+
| binlog.000016 | 799147773 | | | |
+---------------+-----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)




・最新のbinlogを指定してそれ以前を削除する。
PURGE MASTER LOGS TO 'binlog.000016';


mysql> PURGE MASTER LOGS TO 'binlog.000016';
Query OK, 0 rows affected (0.00 sec)


・バイナリログの確認
show master logs;


mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000016 | 318661 | No |
+---------------+-----------+-----------+
1 row in set (0.00 sec)

mysql>


削除後記




実は手順の検証中、最新のbinlogを削除してしまったせいでMySQLが起動しなくなってしまいました。

・ログの確認

[root@zabbix mysql]# cat /var/log/mysql/mysqld.log
mysqld: File './binlog.000016' not found (OS errno 2 - No such file or directory)
2020-03-14T14:02:49.563579Z 0 [System] [MY-010116] [Server] /usr/libexec/mysqld (mysqld 8.0.17) starting as process 29173
2020-03-14T14:02:50.469472Z 0 [ERROR] [MY-010958] [Server] Could not open log file.
2020-03-14T14:02:50.469489Z 0 [ERROR] [MY-010041] [Server] Can't init tc log
2020-03-14T14:02:50.469700Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-03-14T14:02:51.941213Z 0 [System] [MY-010910] [Server] /usr/libexec/mysqld: Shutdown complete (mysqld 8.0.17)  Source distribution.

binlog000016が見つからない。。。(さっき消しちゃったからか・・)

対処法は

ディレクトリ移動
cd /var/lib/mysql

binlog.indexの内容と、binlogファイルの実態を合わせてあげれば起動するようです。
コメントアウトだと、うまく起動しませんでした。


[root@zabbix mysql]# cat binlog.index
./binlog.000009
./binlog.000010
./binlog.000011
./binlog.000012
./binlog.000013
./binlog.000014
./binlog.000015
./binlog.000016
[root@zabbix mysql]#


→13~16を削除して、mysqlを再起動させたらうまくいきました!



久しぶりにみてみると、モバイルバッテリーもずいぶん安くなってるんですね!

皆さん既にやってると思いますが、 AmazonPrimeだとAmazon Music Unlimitedが月額780円でできるんですね!
最近知ってapple musicから乗り換えました。(200円ですが安い方がいいに越したことはないです笑)

下のPythonの本は kindle unlimitedで無料で読めますのでお勧めです!(30日無料期間に読んで解約もアリだと思います。笑)



【tech】pythonのpexpectモジュールをインストールしたメモ



Pythonの資格を取りました!

受験記です、試験を受けて足りなかったと思ったところをメモしているので、ぜひ見てください!

【tech】Python 3 エンジニア認定基礎試験を受けてみて(受験記)

先日書きましたが、このblogでインストール手順のメモ書きを公開している、Zabbix4.0のインストールをansibleで実行するという事に挑戦しているのですが、やっぱり一筋縄にはいかず(笑)とても苦戦しています。。泣

その中でansibleのモジュールとpythonのモジュールという概念に頭がこんがらがってしまったので手順メモも兼ねて、まだ完成してない段階ですが、メモ書きのblogを投稿しておきます。


環境

・ansibleをインストールする側のサーバ:ansible-serverと定義
・ansibleにより構成管理される側のサーバ:管理対象サーバと定義

・仮想環境 VirtualBox
・仮想サーバ(CentOS7.5)
 →IPアドレス:192.168.100.150
・python2.7.5
・ansible2.7.4
・用途 Zabbix4.0インストール用のmariadbの
    my_secure_installtaion用
・mariadbでsetするROOTpw:MariaDBRootPW
・pexpectは管理対象サーバへインストールする


ansibleで使用するのはexpectモジュール
expectモジュールが動作するために、使用するのがpythonのpexpectモジュール。
という風に理解・整理してるんですけどこれって合ってるんですかね・・?もう、、ほんとややこしすぎて頭がこんがらがってしまって大変です。笑

それでは、手順ですが



・python-pipのインストール
yum install -y python-pip

・pipのアップグレード
pip install pip --upgrade

・pexpectモジュールのインストール
pip install pexpect


でpexpectのインストールが完了できます。

この部分もplaybookに書けてはいるのですが、まだ処理をずらーーーっと書いてあるだけの、初心者丸出しplaybookなのでこれも徐々に上級者仕様にモジュールごとに切り出して、変数もがしがし使って汎用性の高いplaybookを書き上げたいと思います。

my_secure_installationの部分もansibleで自動化に成功したので、メモ程度ですが簡単に書いてみます。

---
- hosts: all
  tasks:
     - name: python-pipのinstall
       yum: name=python-pip

     - name: pipのupgrade
       shell: pip install --upgrade pip
       register: result

     - name: pip install pexpect
       shell: pip install pexpect
       register: result

     - name: "/usr/bin/mysql_secure_installationの実行"
       expect:
         command: /usr/bin/mysql_secure_installation
         responses:
           "Enter current password for root \\(enter for none\\): " : ""
           "Set root password\\? \\[Y\\/n\\] " : "Y"
           "New password: " : "MariadbRootPW"
           "Re-enter new password: " : "MariadbRootPW"
           "Remove anonymous users\\?" : "y"
           "Disallow root login remotely\\?" : "y"
           "Remove test database and access to it\\?" : "y"
           "Reload privilege tables now\\?" : "y"

Zabbix4.0のインストールまで全部自動化できたらまた新たに手順化してメモに起こします!

応援よろしくお願いいたします!笑



楽天トラベル

久しぶりにみてみると、モバイルバッテリーずいぶん安くなってるんですね!

皆さん既にやってると思いますが、 AmazonPrimeだとAmazon Music Unlimitedが月額780円でできるんですね!
最近知ってapple musicから乗り換えました。(200円ですが安い方がいいに越したことはないです笑)