安裝MySQL5.7.18遇到的坑
最近才註意到MySQL的各個版本之間差別還挺大的,比如5.5.x版本的timestamp類型列只能有一個設置為default CURRENT_TIMESTAMP的,於是嘗試了換成一個新版本是mysql,但是不想動本地原來的數據庫,於是想在我的win7系統上安裝兩個MySQL數據,於是踩了以下好幾個坑。
我安裝的版本是mysql-5.7.18-winx64解壓版,另外網上安裝的教程很多,我就不在這裏廢話了。我參考了一個寫的比較詳細文檔:MySQL安裝教程,寫的不錯,不過這裏說的my.ini放在bin下不是很準確,實際上放在和bin同級別的主目錄下,當然了這個目錄位置是可以配置的。
坑一:運行mysqld直接報msvcr120.dll找不到,解決方式:網上有可以下載https://www.microsoft.com/en-us/download/confirmation.aspx?id=40784,然後在開始->啟動運行“regsvr32 msvcr120.dll”完成註冊,很多帖子不講這個,不知道居心何在?
坑二:由於我本地已經安裝了MySQL,因此這個新安裝的名字服務不能叫mysql,於是我在用mysqld -install安裝的時候起名叫:mysql5.7,結果啟動的時候發現說“發生系統錯誤 2。系統找不到文件。”。網上很多人說是因為註冊表的原因,老夫查了註冊表發現的確註冊表的“ImagePath”屬性指定的mysqld可執行文件不對,指向了C盤,我的實際上是在D盤,於是乎按照網上的要求修改了,結果不報文件找不到的錯誤了,但是啟動還是失敗,更加不幸的是這次啥錯誤也不報,只是報啟動失敗,後來我刪掉重新搞,最後我仔細比較發現網友安裝的時候起的服務名都沒有“.”,於是我這次起名叫“mysql7”,果然搞定了,服務啟動成功,很顯然這是無意中碰到的一個bug,網友說的是一種情況,我遇到的又是更加復雜的一種情況,結論:服務的名稱不要加“.”,我覺得最好也不要用其他的特殊符號(這裏估計操作系統有要求,沒有細查,若幹年前遇到一個類似的問題,是因為起的服務名稱過長)。
坑三:在使用“Navicat”導入的時候,報“2006 - mysql server has gone away”錯誤,這次是因為sql_mode設置的不對,這個原因是:MySQL5.7的默認值不兼容的問題。解決辦法:在[mysqld]下面添加如下列:“sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
坑四:2006 - mysql server has gone away,這個是因為max_allowed_packet的值太小,解決辦法,在[mysqld]下面添加如下列:max_allowed_packet = 256M,這樣導入數據的速度也明顯提高。
坑五:1265 - Data truncated for column,這是因為倒出的數據列的值不對,比如性別使用的是enum類型的,但是導入的數據值卻是空。我這裏用Navicat導入psc格式的備份數據,解決辦法:使用Navicat備份裏的“提取SQL”導出到文本文件中修改下這個列的值即可。
cd bin
mysqld --install mysql
net start mysql
下載MySQL
https://dev.mysql.com/downloads/mysql/5.1.html#downloads
個人機子是64位的,所以選擇下載:Windows (x86, 64-bit), ZIP Archive 版本
解壓並安裝
將下載下載的包解壓到指定目錄,(本人)解壓到:D:\Program Files (x86) 目錄下。
因此,MySQL的(安裝)包的完整路徑為:D:\Program Files (x86)\mysql-5.7.18-winx64
解壓後,配置好系統環境變量。
新增系統環境變量:
鍵名:MYSQL_HOME
值為:D:\Program Files (x86)\mysql-5.7.18-winx64
接著在 Path 中添加:%MYSQL_HOME%\bin
解壓後,準備好 my.ini 文件。
註意:(據說)以前版本解壓後,在解壓目錄下都會有 my-default.ini 或 my.ini 文件,不過,v5.7.18 版本中解壓後,是沒有這些文件的。因此,需要手動創建好 my.ini 文件,文件的具體(完整的)內容如下:
按 Ctrl+C 復制代碼
[client]
port=3306
default-character-set=utf8
[mysqld]
port=3306
character_set_server=utf8
basedir=%MYSQL_HOME%
datadir=%MYSQL_HOME%\data
[WinMySQLAdmin]
%MYSQL_HOME%\bin\mysqld.exe
按 Ctrl+C 復制代碼
編輯好 my.ini 文件後,將 my.ini 放在 bin 目錄下
以管理員身份打開 cmd 命令窗口,將目錄切到MySQL安裝包下的bin目錄下
安裝MySQL數據庫,執行如下命令:
mysqld.exe -install
執行命令後,提示:Service successfully installed. 表示安裝成功
初始化mysql數據,並創建一個具有空密碼的root用戶,執行如下命令:
mysqld --initialize-insecure --user=mysql
註意:最後的參數 --user=mysql 在 windows 也可以不用添加,但在 unix 等系統下好像很重要。
執行命令後,等一會後,系統會自動生成相應的 data 目錄,並自動創建好空密碼的 root 用戶。此時表示初始化成功。
啟動 mysql 服務,執行如下命令:
net start mysql
執行後,提示:
MySQL服務正在啟動..
MySQL服務已經啟動成功。
註意:要想登錄使用 mysql,服務是必需要先啟動的。以後也一樣。
在服務啟動後,因為剛創建的 root 用戶是空密碼的,因此,需要先進行密碼設定。可執行如下命令:
mysqladmin -u root -p password 此處輸入新的密碼
Enter password: 此處輸入舊的密碼
執行完以上兩條命令後,只要 Enter password: 後輸入的舊密碼正確,則 root 用戶的新密碼就算設定成功了。此後,要想登錄 root 用戶,則都需要使用新密碼。
註意:剛創建的 root 用戶是空密碼的,因此,在第一次修改 root 用戶的密碼時,在 Enter password: 後面不需要輸入任何密碼,直接回車即可。
至此,MySQL v5.7.18 的解壓安裝就已經全部完成,因此,需要把先前已經啟的 MySQL 服務給停止掉,執行如下命令:
net stop mysql
登錄並使用MySQL
前面已經完成對MySQL數據庫的安裝,只要安裝成功後,就可以正常登錄 root 用戶,並進行數據的相關操作,如:建表、增、刪、改、查等等。下面是簡單的流程:
以管理員身份打開 cmd,並切到 mysql 安裝目錄的 bin 目錄下
net start mysql // 說明:該命令是啟動 mysql 服務
mysql -u root -p // 說明:該命令是登錄 root 用戶
Enter password: 先前設置的 root 用戶的密碼
正確登錄後,就可以對數據進行操作了如:增、刪、改、查等等。示例:
mysql> show databases; // 顯示所有數據庫
mysql> select 語句............
...
不再使用數據庫時,要退出用戶,並停止服務,執行如下命令:
mysql> quit;
net stop mysql
刪除數據庫
如果不再想用mysql了,則可以執行如下命令:
mysqld --remove
安裝MySQL5.7.18遇到的坑