MySQL 5.7.30 的安裝/升級(全部可能的坑都在這裏)

楔子

因爲以前電腦上安裝的MySQL版本是比較老的了,大概是5.1的版本,不支持JSON字段功能。而最新開發部門開發的的編輯器產品,使用到了JSON字段的功能。 所以須要升級MySQL版本,升級的目標版本是MySQL 5.7.30(雖然最新版本已經到8.x,可是5.7基本夠用了)。 發如今升級安裝過程當中,會有一些坑,因此使用本文記錄一下。html

卸載老版本

首先須要卸載老的版本,卸載其實也挺簡單,只須要移除MySQL服務便可,首先打開CMD,而後cd到MySQL的bin目錄,而後輸入下面的命令移除MySQL服務:mysql

mysqld --remove mysql
//須要注意的是: 「msyql」 是服務名稱,安裝的時候若是沒有指定服務名稱,
//默認名稱是MySQL(windows下不區分大小寫);
// 若是安裝的時候指定了名稱,上面的名稱須要修改成該指定的名稱。
複製代碼

remove msyql

須要注意的一點是,咱們刪除了MySQL服務以後,有可能在windows的服務的列表裏面還有,保留在哪兒也沒啥影響,可是若是你又潔癖,必定要刪除,就須要去刪除註冊表中對應鍵,參考下圖。固然對於咱們升級來講,後續還須要安裝windows服務,能夠直接覆蓋。linux

註冊表的圖redis

而後刪除老的MySQL相關文件夾,以及刪除相關的環境變量的配置。sql

須要注意的是,若是數據文件和MySQL程序在一個文件夾下,須要保留數據數據庫

安裝5.7.30版本

接下來就是安裝5.7.30版本,第一步是下載。windows

下載MySQL

下載地址是:dev.mysql.com/downloads/m… 點擊上面連接,進入到下載頁面,因爲最新的版本是8.x,因此默認是8.x的版本。能夠經過點擊「Looking for the latest GA version 」選擇版本,而後下載免安裝版本: bash

下載

解壓MySQL

下載完成後,解壓到你想要安裝的目錄,好比個人目錄是: D:\Program Files (x86)\mysql-5.7.30-winx64編輯器

目錄

配置環境變量

在系統變量path後面追加D:\Program Files (x86)\mysql-5.7.30-winx64\bin,如圖所示。 編碼

環境變量

建立配置文件my.ini

5.7.30版本的安裝包默認是不帶配置文件my.ini的。因此須要建立本身建立一個my.ini的文件。手動建立my.ini文件,而後輸入以下內容:

[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8

[mysqld]
# 設置3306端口
port = 3306
# 設置mysql安裝目錄
basedir=D:\Program Files (x86)\mysql-5.7.30-winx64
# 設置mysql數據庫的數據存放目錄
datadir=D:\Program Files (x86)\mysql-5.7.30-winx64\data
# 運行最大鏈接數
max_connections=200
# 服務端使用的字符集默認爲8比特編碼的latin1字符集
character-set-server=utf8
# 參加新表時將使用的默認存儲引擎
default-storage-engine=INNODB
複製代碼

此處會有一些坑,須要避免。

my.ini注意事項一

my.ini必須保存爲ANSI格式(配置文件默認就是是ANSI編碼格式,可能會不當心保存爲其餘格式,好比UTF-8),否正會出現後續的服務不能啓動的狀況。 若是你不肯定my.ini是什麼格式,能夠另存爲:

格式ANSI

my.ini注意事項二

若是是從低版本升級到5.7的版本,可能爲了保留以前的配置,就直接把以前的配置文件拷貝過來。這個時候就要注意了,由於之前不少低版本的參數,已經不適合高版本的。若是不修改過來,就會致使後續的服務啓動失敗。

好比筆者遇到的一個致使錯誤的參數是:

#table_cache=256 // 低版本的
table_open_cache=256 // 高版本的
複製代碼

若是必定要保留老版本的配置,又對於新版本的參數修改不是很熟悉,那麼能夠再配置文件中把日誌功能假設,這樣再報錯的時候,能夠經過查看日誌瞭解詳情。 以下配置日誌路徑便可:

log_error=D:/mysql-5.7/error.log
複製代碼

而後啓動失敗後,能夠經過日誌查看報錯,好比:

錯誤日誌

更多可能的錯誤參數:

unknown variable 'key-buffer=256M' //去掉改項便可。

unknown variable 'table-cache=512'  //修改成table_open_cache便可。

unknown variable 'thread-concurrency=8' //去掉改項,5.7已結廢棄。
複製代碼

windows 服務啓動失敗,不會把錯誤詳情標識出來,只會簡單說一句服務啓動失敗。 只能經過配置日誌文件來查看。

服務沒法啓動

安裝MySQL服務

最重要的一步就是安裝MySQL服務。 首先進入cmd界面,CD到MySQL的bin目錄(注意此處必定要到bin目錄下去執行),執行以下命令:

mysqld --install [服務名稱,默認是MySQL]
複製代碼

截圖以下:

安裝服務

執行命令後,會提示服務安裝成功。

注意事項一

須要注意的是,有可能出現Install/Remove of the Service Denied! 的提示錯誤。 緣由:普通用戶模式權限下的cmd安裝mysql會出現這樣的報錯提示。經過管理員模式運行cmd便可:

管理員身份運行cmd
其餘步驟若是出現沒有執行權限的狀況,也都請用管理員省份運行便可。

注意事項二

有些電腦會出現找不到MSVCP120.dll的錯誤:

錯誤
這種錯誤是因爲未安裝 vcredist 引發的 下載 vcredist 地址: www.microsoft.com/zh-CN/downl… 安裝,位置默認便可,安裝成功以後,從新安裝服務便可。

初始化MySQL

MySQL5.7是不帶data目錄的,因此須要初始化MySQL,生產data目錄,也比較簡單,執行以下命令便可:

mysqld --initialize-insecure --user=mysql
複製代碼

須要注意的是,有的文章介紹的是此處用 「mysqld --initialize」, 「mysqld --initialize-insecure」和 「mysqld --initialize」的區別在於前者會建立一個空密碼,然後者會建立一個隨機密碼。 所以用 「mysqld --initialize」,最好加上 「--console」,能夠把隨機密碼打印出來(注意 「--console」僅限於windows)

console

console

--user=msyql 主要用於在linux或者unix系統下給與把data目錄受權給mysql帳號,在windows 下能夠沒必要使用,帶上也無所謂。

數據初始化參考連接:dev.mysql.com/doc/mysql-i…

初始化完成後,會生成data目錄。

注意事項一

若是初始化出現錯誤:「--initialize specified but the data directory has files in it. Aborting. 」 那是由於你可能手動建立了data目錄,而且裏面包含了文件(好比升級可能這樣操做),此時要作的就是刪除data目錄便可,至於升級,能夠後續考慮。

此時說的data目錄,是指 my.ini文件裏面 指定的目錄 ,未必是mysql安裝文件下的目錄: datadir=D:\Develop\MySQL\mysql-8.0.12-winx64\data

啓動MySQL服務

windows下啓動MySQL服務,可使用以下命令便可:

net start MySQL
複製代碼

image.png

設置MySQL服務密碼

使用mysqladmin能夠設置密碼。啓動MySQL服務以後,輸入以下命令:

密碼

輸入老的密碼(經過前面操做,老密碼爲空),而後輸入新的密碼,確認新的密碼,便可設置成功。

注意事項一

若是前面初始化的時候未初始化未空密碼,又不當心忘記了初始化密碼,會出現下面的問題,沒法登錄及修改密碼: 「Access denied for user 'root'@'localhost'」

經過以下步驟解決:

添加skip-grant-tables

再配置文件my.ini中添加skip-grant-tables:

image.png

重啓MySQL服務

先中止MySQL服務,而後再啓動MySQL服務,便可:

image.png

修改密碼

首先登錄mysql,此時不須要密碼,以下:

登錄

經過sql語句修改密碼,首先 use mysql ;而後update 更新密碼:

修改密碼

而後退出mysql便可。

刪除skip-grant-tables 重啓MySQL服務

首先從my.ini中刪除skip-grant-tables ,而後 net stop mysql, net start mysql 重啓服務。

MySQL老數據升級到5.7

要升級老數據,若是是從5.x版本升級上來,基本上只須要把相關的數據文件拷貝到data文件夾下。須要注意的是,若是使用了 innodb,還須要把「ibdata」等文件拷貝過來。 否正會報表不存在的狀況:

error: 1146: Table 'a_content' doesn't exist 複製代碼

innodb是MYSQL數據庫一種流行的數據庫引擎,支持事務(行級),ibdata用來儲存文件的數據,而庫名的文件夾裏面的那些表文件只是結構而已,因爲新版的mysql默認試innodb,因此ibdata1文件默認就存在了,少了這個文件有的數據表就會出錯。

若是升級過程當中,存在數據損壞,可使用repair命令進行修復:

repair table tablename
複製代碼

正常通過上述操做,就能夠了,若是還有問題,能夠嘗試使用升級命令mysql_upgrade對數據進行升級(也建議使用改命令升級,否則後續出問題,可能會很差定位) dev.mysql.com/doc/refman/…

//升級mysql,mysql_upgrade檢查不兼容的表,更新grant表;
mysql_upgrade -uroot -p
複製代碼

升級速度具體看data目錄的大小狀況而定。

以上全文。

更多精彩內容,請關注公衆號「ITman彪叔」。

ITman彪叔公衆號
相關文章
相關標籤/搜索