情況陳述
將centos的一個容器提交爲一個鏡像後,在新的鏡像上實例一個容器,發現裏面的mysql不能啓動。
看日誌報錯爲:
Fatal error: Can't open and lock privilege tables: Table storage engine for 'user' doesn't have this option.
問題分析
Docker內,實例化後的容器是有這新的hostname,改變的就是這個。而其他全都是一個鏡像出來的,不可能出現問題。
這就是Docker的好處之一。
另外,CSDN有個哥們也遇到這個問題,但是他的解決方式的命令行實在略微麻煩和沒有解決實質性問題。因此還是自己分析實際狀況,解決自己的問題。
問題解決
因爲變動了hostname主機名,MySQL data文件就要初始化。
因此我的做法是:
// MySQL初始化(要記錄下隨機密碼)
bin/mysqld --initialize --user=mysql --basedir=/home/software/mysql --datadir=/home/software/mysql/data
// 再次啓動
bin/mysqld_safe --defaults-file=/home/software/mysql/my.cnf &
// 登錄驗證和進程驗證都可以。