背景:
由於之前一個項目中用的數據庫版本是免安裝的mysql5.5.36,但是后來經過第三方測試公司測試出該數據庫存在很多漏洞需要升級數據庫才能解決。所以覺得將數據庫更換為mysql-5.7.21-winx64版本的,由於該項目數據量不是很大並且數據庫版本跨度比較大,所以采取了“先卸載,再安裝”的方式來進行對數據的升級、改造。
環境:
操作系統:server 2012 64bit
數據庫:主從設置
步驟:
一、卸載原有的Mysql數據庫
1. 刪除注冊表
(1)HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQL
(2)HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQL【不一定有】
(3)HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Application/MySQL【不一定有】
2. 刪除服務
(1) 用管理員身份啟動cmd,執行sc delete mysql服務名稱


3. 最后將目錄下原來的數據庫文件刪除即可
二、安裝數據庫:
1.將新的數據庫放到原來數據庫的目錄下。與mysql 5.6不同的是5.7版本中沒有data文件夾和my.ini文件。所以需要在mysql-5.7.22-winx64目錄下創建data文件夾以及my.ini文件。其中my.ini文件中內容為:
[mysql] # 設置mysql客戶端默認字符集 default-character-set=utf8 [mysqld] #設置3306端口 port = 3306
# 設置mysql的安裝目錄 basedir=E:/seegot/mysql-5.7.22-winx64 # 設置mysql數據庫的數據的存放目錄 datadir=E:/seegot/mysql-5.7.22-winx64/data # 允許最大連接數 max_connections=200 # 服務端使用的字符集默認為8比特編碼的latin1字符集 character-set-server=utf8 # 創建新表時將使用的默認存儲引擎 default-storage-engine=INNODB
2.以管理員身份運行cmd,將目錄切換到mysql安裝文件夾下的bin目錄下執行 mysqld install

3.bin目錄下,輸入 mysqld --initialize --user=root --console 下圖紅色下划線為root用戶的密碼(注意:這里的密碼通過復制來進行登錄,自己輸入可能會瘋掉。。。別問我怎么知道的)

4.重啟mysql服務。在bin目錄下,mysql -uroot -p,輸入初始化root密碼登錄。然后通過 set password=password('root') 修改密碼

5.導入之前的數據庫。
6.修改數據庫為遠程可以登錄,這個就不需要介紹了吧。(mysql ---user --localhost-->% 重啟數據庫服務)
7.最蛋疼的問題在導入數據庫的時候報錯了。。。 新版數據庫有一個坑,這個坑就是*****group by***full***什么鬼的,
兩種解決辦法:(1)select @@sql_mode ;查詢出的結果為
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重點就出現在這個ONLY_FULL_GROUP_BY 我們要做的就是刪除它。
set @@sql_mode =‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘;
上面這個改變的是全局的,也就是以后新創建的數據庫不存在這個問題,那么我們還需要修改已經存在的數據庫的這個問題,所以就用到了
set sql_mode =‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘;
最后,如果這幾種方式實在不行,那么試一試在mysql數據庫文件目錄下的my.ini
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
由於我的數據庫是需要開啟定時任務的,所以我們要檢查下數據庫是否開啟了定時任務。
-- 檢查是否開啟定時任務 SELECT @@event_scheduler; SHOW VARIABLES LIKE 'event%'; -- 如果未開啟,那么進行開啟 set GLOBAL event_scheduler = 1; SET GLOBAL event_scheduler = ON;
或者直接在my.ini的mysqld后面加上event_scheduler=ON 即可。
完成以上操作后,我們再將數據庫配置為主從庫即可。配置主從數據庫請參考之前的博客。
