最近在嘗試基於Ubuntu 16.04.1 LTS server 部署openstack ,在部署的過程中遇到mariadb 無法正常連結。
問題
參照openstack 官方文件安裝mariadb,安裝後遇到無法在本地登入的問題
$mysql -u root -p $mysql -h localhost -u root -p
報錯如下
mysql (mariadb) ERROR 1698 (28000): Access denied for user `root`@`localhost`
但使用如下方式卻可以登入
$sudo mysql -u root
遂解除安裝mariadb,但解除安裝方式比較暴力,導致再次安裝時報出類似如下錯誤
dpkg: warning: while removing mariadb-server-core-10.0, directory `/usr/share/mysql` not empty so not removed dpkg: error processing package mariadb-server-10.0 (--configure): subprocess installed post-installation script returned error exit status 1 Errors were encountered while processing: mariadb-server-10.0 E: Sub-process /usr/bin/dpkg returned an error cod E: Sub-process /usr/bin/dpkg returned an error code (1)
解決方案
先說下解除安裝方式,通過包管理器正確解除安裝軟體的方式如下
apt purge mariadb* mysql* apt autoremove apt autoclean
如重新安裝時遇上述錯誤,可嘗試強制安裝(apt install -f)、重新安裝(apt –reinstall install)、正確解除安裝方式(apt purge mariadb && apt autoremove && apt autoclean)
如遇依賴警告,直接安裝對應依賴
接下來說說對mariadb的解決方案
通過反覆多次嘗試,最後通過安裝更高版本解決。
之前的安裝是參照openstack 官方文件,安裝的是mariadb-server-10.0,多次嘗試後問題仍存在,就在想到mariadb官方找找文件看。
結果文件沒找到,反倒找到了官方的安裝文件,遂參考mariadb官方文件安裝了最新穩定版本mariadb-server-10.1
在安裝過程中,新版會要求設定mariadb root使用者口令,而10.0版本卻沒有。同樣在解除安裝過程中,也提示是否確認刪除所有資料庫檔案,這都是10.0版本沒有的。
安裝好10.1版本mariadb後,就可正常連線了。
總結
通過反覆嘗試,基本可以判斷是安裝的mariadb版本(或對應系統)不正確,同時也可能是10.0版本存在這種問題。
如再次遇到類似的問題,可以嘗試安裝軟體的不同版本,或變更安裝的路徑。