最近在嘗試基於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版本存在這種問題。

如再次遇到類似的問題,可以嘗試安裝軟體的不同版本,或變更安裝的路徑。