Docker
使用掛載儲存時,MariaDB docker“無法初始化 tc 日誌”
我正在初始化一個新的 MariaDB 數據庫。在我的主目錄中執行帶有捲的 docker 可以讓 MariaDB 正常啟動:
docker run -it --rm --name mymaria \ -e MYSQL_RANDOM_ROOT_PASSWORD=yes \ -e MYSQL_PASSWORD=p@$$w0rd \ -e MYSQL_DATABASE=myapp \ -e MYSQL_USER=myapp \ -v /home/myuser/mysql:/var/lib/mysql \ mariadb:10.2
但是,通過掛載目錄執行帶有捲的 mariadb 容器,如下所示:
docker run -it --rm --name mymaria \ -e MYSQL_RANDOM_ROOT_PASSWORD=yes \ -e MYSQL_PASSWORD=p@$$w0rd \ -e MYSQL_DATABASE=myapp \ -e MYSQL_USER=myapp \ -v /mnt/storage/mysql:/var/lib/mysql \ mariadb:10.2
此配置從
docker logs
輸出中返回:Initializing database 2019-09-23 5:12:13 139724696503616 [ERROR] Can't init tc log 2019-09-23 5:12:13 139724696503616 [ERROR] Aborting Installation of system tables failed! ...
**
tc.log
像一些人建議的那樣簡單地刪除是行不通的。**重新啟動 mariadb 將重新tc.log
寫入卷/var/lib/mysql
。也許這是一個權限問題?我覺得我已經嘗試
chown
了每個目錄的每一種組合。
10.2
我只在標籤上遇到這個問題,而不是latest
. 但是,對於我正在處理的編排,它建議mariadb:10.2
.
背景
在我的情況下,我使用mergefs將各種磁碟組合到一個文件系統中。它的功能之一是
direct_io
抑制mmap
並且可能是導致致命錯誤的原因。如mergefs 文件mmap
所指出的,與使用的其他軟體存在類似的衝突。Mmap在 MariaDB 中使用,並非所有文件系統都支持。我相信在以後的版本中不再使用 mmap,所以在我自己的測試中,我只遇到了這個問題
mariadb:10.2
。此背景可能有助於其他人使用
mergerfs
或遇到類似問題,從而導致MariaDB 中的 mmap 發生衝突。可能的解決方案
1.允許
mmap
工作在我的場景中,這需要禁用一個現已棄用的功能,稱為
direct_io
繞過頁面記憶體。根據mergerfs
文件,這是推薦的。2.啟動二進制日誌
這可以使用配置文件或作為容器程序的命令進行測試。我通過添加–log-bin命令對此進行了測試:
docker run -it --rm --name mymaria \ -e MYSQL_RANDOM_ROOT_PASSWORD=yes \ -e MYSQL_PASSWORD=p@$$w0rd \ -e MYSQL_DATABASE=myapp \ -e MYSQL_USER=myapp \ -v /mnt/storage/mysql:/var/lib/mysql \ mariadb:10.2 --log-bin --log-basename=some_hostname
3. 將音量移到別處
雖然不理想,但這是一種選擇。使用主機上的捲或其他磁碟。我對 MariaDB 卷的特殊問題是由於兩個不同軟體之間的衝突。