本文完全是個人實踐經驗,包含了mysql8.0升級的全過程以及中間遇到的問題及解決方法。
整個過程中參考的有價值的文檔均有標註。
歡迎收藏,歡迎轉發,但希望註明出處https://blog.csdn.net/qq_34175893/article/details/79564604,原創不易
首先下載安裝所需安裝包,根據自己所需選擇(這裏以rhel7.4,64位爲例)
https://dev.mysql.com/downloads/mysql/8.0.html
解壓縮tar包
Tar -zxvf mysql-8.0.4-0.1.rc.el7.x86_64.rpm-bundle.tar
報錯
gzip: stdin: not in gzipformat
tar: Child returnedstatus 1
tar: Error is notrecoverable: exiting now
解決方法:
去掉z參數,使用 tar -xvf解壓正常
原因分析:
1、壓縮文件被人爲的改過名稱,比如:最初壓縮的並非.gz,被人爲的修改了後綴,這時可以去掉後綴再解壓,如:文件FMIS2600DMP.tar.gz,去掉gz後綴,再用tar -xvf 解壓
2、-z參數實際上是調用bz2的加壓或者解壓程序,去掉該參數,則同樣可以避免該問題
軟件包的安裝,
這裏就按照下面的做就行了,不然會出現很多軟件包的依賴問題。具體問題就不舉例了,我遇到的挺多的
將解壓得到的所有rpm包放在同一個空的文件夾下,mysql-community-server-miniaml-*除外,因爲會和server及client衝突,
然後使用如下命令安裝(我是建議直接全部裝了就好了,沒必要按照我下面的鏈接所給的那樣限定很多,因爲那樣會出現一些衝突問題,直接把9個rpm包都用yum安裝了就好了,建議一定要用yum裝,不要用rpm命令,因爲yum會自動檢測並解決安裝包之間的衝突和依賴問題)
sudoyum install mysql-community-*
安裝參考:https://dev.mysql.com/doc/refman/5.7/en/linux-installation-rpm.html
Can’t connect to local MySQL serverthrough socket ‘/var/lib/mysql/mysql.sock
解決步驟:
1 systemctl stop mysqld (停止服務)
2 rm -fr /var/lib/mysql/* (刪除/var/lib/mysql下的所有文件)
3 rm /var/lock/subsys/mysqld(刪除鎖定文件)
4 killall mysqld (殺死所有mysqld進程)
5 systemctl start mysqld (啓動mysql服務。)
參考鏈接:https://www.cnblogs.com/okstill/p/5667138.html
Root用戶無密碼登錄數據庫遇到
Access denied for user 'root'@'localhost' (using password: YES)
方法:
跳過root臨時密碼登錄數據庫修改密碼
1. 關閉mysql服務:
systemctl stop mysqld
2. 設置環境變量跳過權限檢查
systemctlset-environment MYSQLD_OPTS="--skip-grant-tables"
3. 重新啓動mysql服務
systemctl start mysqld
4.以root用戶登錄
mysql -u root
這時便可以成功登錄了
5. 設置root用戶密碼
UPDATE mysql.userSET authentication_string= PASSWORD('Root@123') WHERE User = 'root';
在mysql 5.6之後對密碼的強度進行了加強,推出了validate_password 插件(據某些地方說好像之前就有,不過現在成了必須的了)。支持密碼的強度要求。,通過如下命令查看validate_password的各參數配置要求,
MySQL密碼強度審計插件:validate_password的使用說明http://www.xuchanggang.cn/archives/1033.html
SHOW VARIABLES LIKE 'validate_password%';
使用如下命令可以自行配置參數,對密碼強度要求最重要的參數爲下面的policy
set global validate_password.policy=LOW;
重新執行
UPDATEmysql.user SET authentication_string = 'root123' WHERE User = 'root';
所以最終的修改密碼的命令爲
UPDATEmysql.user SET authentication_string = 'root123' WHERE User = 'root';
6. 停止mysql服務
systemctl stopmysqld
7. 取消之前設置的跳過權限檢查的選項
systemctl unset-environment MYSQLD_OPTS
8.正常啓動mysql
systemctl start mysqld
9. 使用前面設置的新密碼登錄
mysql -u root -p
登錄時遇到問題參考:http://blog.csdn.net/u014306472/article/details/78160427
查看默認密碼
grep "temporary password"/var/log/mysqld.log
下面是我把上面的命令寫在一塊,這樣copy執行只需一次,而不需3次
- 重新登錄前,設置跳過權限檢查 systemctl stop mysqld; systemctl set-environmentMYSQLD_OPTS="--skip-grant-tables"; systemctl start mysqld
- 重新設置
- 設置完成後,回覆權限檢查 systemctl stopmysqld; systemctl unset-environment MYSQLD_OPTS; systemctl start mysqld;