因爲以前電腦上安裝的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下不區分大小寫);
// 若是安裝的時候指定了名稱,上面的名稱須要修改成該指定的名稱。
複製代碼
須要注意的一點是,咱們刪除了MySQL服務以後,有可能在windows的服務的列表裏面還有,保留在哪兒也沒啥影響,可是若是你又潔癖,必定要刪除,就須要去刪除註冊表中對應鍵,參考下圖。固然對於咱們升級來講,後續還須要安裝windows服務,能夠直接覆蓋。linux
註冊表的圖redis
而後刪除老的MySQL相關文件夾,以及刪除相關的環境變量的配置。sql
須要注意的是,若是數據文件和MySQL程序在一個文件夾下,須要保留數據數據庫
接下來就是安裝5.7.30版本,第一步是下載。windows
下載地址是:dev.mysql.com/downloads/m… 點擊上面連接,進入到下載頁面,因爲最新的版本是8.x,因此默認是8.x的版本。能夠經過點擊「Looking for the latest GA version 」選擇版本,而後下載免安裝版本: bash
下載完成後,解壓到你想要安裝的目錄,好比個人目錄是: D:\Program Files (x86)\mysql-5.7.30-winx64編輯器
在系統變量path後面追加D:\Program Files (x86)\mysql-5.7.30-winx64\bin,如圖所示。 編碼
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必須保存爲ANSI格式(配置文件默認就是是ANSI編碼格式,可能會不當心保存爲其餘格式,好比UTF-8),否正會出現後續的服務不能啓動的狀況。 若是你不肯定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服務。 首先進入cmd界面,CD到MySQL的bin目錄(注意此處必定要到bin目錄下去執行),執行以下命令:
mysqld --install [服務名稱,默認是MySQL]
複製代碼
截圖以下:
執行命令後,會提示服務安裝成功。
須要注意的是,有可能出現Install/Remove of the Service Denied! 的提示錯誤。 緣由:普通用戶模式權限下的cmd安裝mysql會出現這樣的報錯提示。經過管理員模式運行cmd便可:
其餘步驟若是出現沒有執行權限的狀況,也都請用管理員省份運行便可。有些電腦會出現找不到MSVCP120.dll的錯誤:
這種錯誤是因爲未安裝 vcredist 引發的 下載 vcredist 地址: www.microsoft.com/zh-CN/downl… 安裝,位置默認便可,安裝成功以後,從新安裝服務便可。MySQL5.7是不帶data目錄的,因此須要初始化MySQL,生產data目錄,也比較簡單,執行以下命令便可:
mysqld --initialize-insecure --user=mysql
複製代碼
須要注意的是,有的文章介紹的是此處用 「mysqld --initialize」, 「mysqld --initialize-insecure」和 「mysqld --initialize」的區別在於前者會建立一個空密碼,然後者會建立一個隨機密碼。 所以用 「mysqld --initialize」,最好加上 「--console」,能夠把隨機密碼打印出來(注意 「--console」僅限於windows)
--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
windows下啓動MySQL服務,可使用以下命令便可:
net start MySQL
複製代碼
使用mysqladmin能夠設置密碼。啓動MySQL服務以後,輸入以下命令:
輸入老的密碼(經過前面操做,老密碼爲空),而後輸入新的密碼,確認新的密碼,便可設置成功。
若是前面初始化的時候未初始化未空密碼,又不當心忘記了初始化密碼,會出現下面的問題,沒法登錄及修改密碼: 「Access denied for user 'root'@'localhost'」
經過以下步驟解決:
再配置文件my.ini中添加skip-grant-tables:
先中止MySQL服務,而後再啓動MySQL服務,便可:
首先登錄mysql,此時不須要密碼,以下:
經過sql語句修改密碼,首先 use mysql ;而後update 更新密碼:
而後退出mysql便可。
首先從my.ini中刪除skip-grant-tables ,而後 net stop mysql, net start mysql 重啓服務。
要升級老數據,若是是從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彪叔」。