站羣服務器環境:CentOS 7.4.14
問題:MySQL 無法正常啓動
檢視日誌
2018-02-23T02:10:08.371209Z 0 [System] [MY-010116] /usr/sbin/mysqld (mysqld 8.0.4-rc-log) starting as process 27702 …
2018-02-23T02:10:08.737713Z 1 [ERROR] [MY-011096] No data dictionary version number found.
2018-02-23T02:10:08.737989Z 0 [ERROR] [MY-010020] Data Dictionary initialization failed.
2018-02-23T02:10:08.738038Z 0 [ERROR] [MY-010119] Aborting
後來發現,升級後預設啓用了 caching_sha2_password 身份認證機制,以前的資料是不能直接執行的。
只能先恢復原版本,將資料從原版本匯出,重新匯入使用,或再升級匯入。
一、解除安裝 MySQL8.0.4
備份資料
mv /var/lib/{mysql,mysql.bak}
chown -R mysql:mysql /var/lib/mysql.bak
chmod 755 -R  /var/lib/mysql.bak
直接 yum 解除安裝
rpm -qa|grep ‘^mysql’
然後將查詢出的 8.0.4 的包全部 yum 解除安裝
二、安裝 MySQL8.0.3
從官方下載 8.0.3
下載打包版 mysql-8.0.3-0.1.rc.el7.x86_64.rpm-bundle.tar
解壓
tar -xvf mysql-8.0.3-0.1.rc.el7.x86_64.rpm-bundle.tar
然後依次安裝 common 、 libs 、 client 、 server
rpm -ivh mysql-community-common-8.0.3-0.1.rc.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.3-0.1.rc.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.3-0.1.rc.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.3-0.1.rc.el7.x86_64.rpm
啓動 mysql
systemctl start msyqld.service
此時/var/lib/重新生成了一個新的 mysql 資料夾
三、資料匯出
修改/etc/my.cnf 指向舊資料
[mysqld]
innodb_force_recovery = 6
datadir=/var/lib/mysql.bak
Forcing InnoDB Recovery 提供了 6 個等級的修復模式
全庫匯出:
mysqldump -uroot -p –all-databases > /home/sqlfile.sql
四、資料恢復
修改/etc/my.cnf 資料路徑,去掉修復模式,修復模式下不可寫
[mysqld]
datadir=/var/lib/mysql
檢視臨時密碼
[root@soft]# cat /var/log/mysqld.log|grep password
2018-02-23T08:06:36.785974Z 5 [Note] A temporary password is generated for root@localhost: Leyk2qO_75ER
用臨時密碼登入 mysql,修改密碼
放棄升級,直接匯入資料
mysql -uroot -p
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘root’@’localhost’ IDENTIFIED BY ‘abcdef@’ WITH GRANT OPTION;
mysql>flush privileges;
mysql>source /home/sqlfile.sql;
重啓後,一切正常。升級前一定要備份, 一定要經常備份。