Docker

使用掛載儲存時,MariaDB docker“無法初始化 tc 日誌”

  • September 25, 2019

我正在初始化一個新的 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 卷的特殊問題是由於兩個不同軟體之間的衝突。

引用自:https://serverfault.com/questions/985485