天天看點

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

由于之前電腦上安裝的MySQL版本是比較老的了,大概是5.1的版本,不支援JSON字段功能。而最新開發部門開發的的編輯器産品,使用到了JSON字段的功能。 是以需要更新MySQL版本,更新的目标版本是MySQL 5.7.30(雖然最新版本已經到8.x,但是5.7基本夠用了)。 發現在更新安裝過程中,會有一些坑,是以使用本文記錄一下。

解除安裝老版本

首先需要解除安裝老的版本,解除安裝其實也挺簡單,隻需要移除MySQL服務即可,首先打開CMD,然後cd到MySQL的bin目錄,然後輸入下面的指令移除MySQL服務:

mysqld --remove mysql
//需要注意的是: “msyql” 是服務名稱,安裝的時候如果沒有指定服務名稱,
//預設名稱是MySQL(windows下不區分大小寫);
// 如果安裝的時候指定了名稱,上面的名稱需要修改為該指定的名稱。
           
mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

remove msyql

需要注意的一點是,我們删除了MySQL服務之後,有可能在windows的服務的清單裡面還有,保留在哪兒也沒啥影響,但是如果你又潔癖,一定要删除,就需要去删除系統資料庫中對應鍵,參考下圖。當然對于我們更新來說,後續還需要安裝windows服務,可以直接覆寫。

系統資料庫的圖

然後删除老的MySQL相關檔案夾,以及删除相關的環境變量的配置。

需要注意的是,如果資料檔案和MySQL程式在一個檔案夾下,需要保留資料

安裝5.7.30版本

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

下載下傳MySQL

下載下傳位址是:https://dev.mysql.com/downloads/mysql/

點選上面連結,進入到下載下傳頁面,由于最新的版本是8.x,是以預設是8.x的版本。可以通過點選“Looking for the latest GA

version ”選擇版本,然後下載下傳免安裝版本:

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

下載下傳

解壓MySQL

下載下傳完成後,解壓到你想要安裝的目錄,比如我的目錄是:

D:Program Files (x86)mysql-5.7.30-winx64

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

目錄

配置環境變量

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

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

環境變量

建立配置檔案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-winx64data
# 運作最大連接配接數
max_connections=200
# 服務端使用的字元集預設為8比特編碼的latin1字元集
character-set-server=utf8
# 參加新表時将使用的預設存儲引擎
default-storage-engine=INNODB
           

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

my.ini注意事項一

my.ini必須儲存為ANSI格式(配置檔案預設就是是ANSI編碼格式,可能會不小心儲存為其他格式,比如UTF-8),否正會出現後續的服務不能啟動的情況。 如果你不确定my.ini是什麼格式,可以另存為:

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

格式ANSI

my.ini注意事項二

如果是從低版本更新到5.7的版本,可能為了保留之前的配置,就直接把之前的配置檔案拷貝過來。這個時候就要注意了,因為以前很多低版本的參數,已經不适合高版本的。如果不修改過來,就會導緻後續的服務啟動失敗。

比如筆者遇到的一個導緻錯誤的參數是:

#table_cache=256  // 低版本的
table_open_cache=256 // 高版本的
           

如果一定要保留老版本的配置,又對于新版本的參數修改不是很熟悉,那麼可以再配置檔案中把日志功能假設,這樣再報錯的時候,可以通過檢視日志了解詳情。 如下配置日志路徑即可:

log_error=D:/mysql-5.7/error.log
           

然後啟動失敗後,可以通過日志檢視報錯,比如:

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

錯誤日志

更多可能的錯誤參數:

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

unknown variable 'table-cache=512'  //修改為table_open_cache即可。

unknown variable 'thread-concurrency=8' //去掉改項,5.7已結廢棄。
           
windows 服務啟動失敗,不會把錯誤詳情辨別出來,隻會簡單說一句服務啟動失敗。 隻能通過配置日志檔案來檢視。
mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

服務無法啟動

安裝MySQL服務

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

mysqld --install [服務名稱,預設是MySQL]
           

截圖如下:

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

安裝服務

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

注意事項一

需要注意的是,有可能出現Install/Remove of the Service Denied! 的提示錯誤。

原因:普通使用者模式權限下的cmd安裝mysql會出現這樣的報錯提示。通過管理者模式運作cmd即可:

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

管理者身份運作cmd

其他步驟如果出現沒有執行權限的情況,也都請用管理者省份運作即可。

注意事項二

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

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

錯誤

這種錯誤是由于未安裝 vcredist 引起的

下載下傳 vcredist 位址:https://www.microsoft.com/zh-CN/download/details.aspx?id=40784

安裝,位置預設即可,安裝成功之後,重新安裝服務即可。

初始化MySQL

MySQL5.7是不帶data目錄的,是以需要初始化MySQL,生産data目錄,也比較簡單,執行如下指令即可:

mysqld --initialize-insecure --user=mysql
           

需要注意的是,有的文章介紹的是此處用 “mysqld --initialize”, “mysqld --initialize-insecure”和 “mysqld --initialize”的差別在于前者會建立一個空密碼,而後者會建立一個随機密碼。 是以用 “mysqld --initialize”,最好加上 “--console”,可以把随機密碼列印出來(注意 “--console”僅限于windows)

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

console

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

console

--user=msyql 主要用于在linux或者unix系統下給與把data目錄授權給mysql賬号,在windows 下可以不必使用,帶上也無所謂。

資料初始化參考連結:https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/data-directory-initialization.html

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

注意事項一

如果初始化出現錯誤:“--initialize specified but the data directory has files in it. Aborting. ” 那是因為你可能手動建立了data目錄,并且裡面包含了檔案(比如更新可能這樣操作),此時要做的就是删除data目錄即可,至于更新,可以後續考慮。

此時說的data目錄,是指 my.ini檔案裡面 指定的目錄 ,未必是mysql安裝檔案下的目錄:

datadir=D:DevelopMySQLmysql-8.0.12-winx64data

啟動MySQL服務

windows下啟動MySQL服務,可以使用如下指令即可:

net start MySQL
           
mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

image.png

設定MySQL服務密碼

使用mysqladmin可以設定密碼。啟動MySQL服務之後,輸入如下指令:

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

密碼

輸入老的密碼(通過前面操作,老密碼為空),然後輸入新的密碼,确認新的密碼,即可設定成功。

注意事項一

如果前面初始化的時候未初始化未空密碼,又不小心忘記了初始化密碼,會出現下面的問題,無法登陸及修改密碼:

“Access denied for user 'root'@'localhost'”

通過如下步驟解決:

添加skip-grant-tables

再配置檔案my.ini中添加skip-grant-tables:

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

image.png

重新開機MySQL服務

先停止MySQL服務,然後再啟動MySQL服務,即可:

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

image.png

修改密碼

首先登陸mysql,此時不需要密碼,如下:

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

登陸

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

mysqlclient==1.3.7對應mysql版本_MySQL 5.7.30 的安裝/更新(所有可能的坑都在這裡)...

修改密碼

然後退出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對資料進行更新(也建議使用改指令更新,不然後續出問題,可能會不好定位)https://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html

//更新mysql,mysql_upgrade檢查不相容的表,更新grant表;
mysql_upgrade -uroot -p
           

更新速度具體看data目錄的大小情況而定。

以上全文。

更多精彩内容,請關注公衆号“ITman彪叔”。

繼續閱讀