自動目錄
自從上週發生資料庫系統整個被撐爆,所有的資料庫死機起動不了的意外,可以參考 [Rocky9+Docker] Mariadb Cluster + HAPROXY + Docker compose@新精讚 裡的錯誤排除。
我幾天就開始很注意他的容量問題,結果發現資料庫log每天以600mb的速度在長大,我並不知道他到底為什麼長得這麼快,所以第一招就是不要寫入binlog的記錄:
關閉記錄檔
修改設定檔
skip-log-bin <==加入這行
log_bin ='/var/log/mysql/mariadb-bin'
binlog_format='row'
expire_logs_days=1
max_binlog_size = 10M <==加入這行
第一行加入 skip-log-bin [1] ,其它參數保留不要註解,以免出現其它的錯誤。
錯誤訊息
以上我並沒有測試容量是否就不會長大,接下來就前景啟動試試看,結果發現一直跳出大量的這個log,我感覺我發現原因了:
[ERROR] Incorrect definition of table mysql.column_stats: expected column 'hist_type' at position 9 to have type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB'), found type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB').
[ERROR] Incorrect definition of table mysql.column_stats: expected column 'histogram' at position 10 to have type longblob, found type varbinary(255).
上網查了很多解決,全部沒效,例如加入環境參數[2]:
....
- MARIADB_AUTO_UPGRADE=1
- MARIADB_INITDB_SKIP_TZINFO=1
沒效。
例如執行更新指令 docker-compose exec mariadb mysql_upgrade -uroot -ppassword 得到錯誤[3]
OCI runtime exec failed: exec failed: unable to start container process: exec: "mysql_upgrade": executable file not found in $PATH: unknown
沒效
解決
後來仔細看了錯誤,自己試著修改欄位的格式就解決了
進到資料庫下指令:
ALTER TABLE `column_stats` CHANGE `hist_type` `hist_type` ENUM('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB') CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL;
ALTER TABLE `column_stats` CHANGE `histogram` `histogram` LONGBLOB NULL DEFAULT NULL;
結果後面才發現有人的解法和我一樣[4],呵呵。
參考資料
[1] https://dba.stackexchange.com/questions/72770/disable-mysql-binary-logging-with-log-bin-variable
[2] https://github.com/docker-library/docs/issues/2164
[4] https://github.com/wallabag/wallabag/issues/6572