本章介紹如何在Windows下獨立安裝MySQL Server端程式。致於如何在Linux 下安裝 MySQL 請參考 ubuntu mysql 這篇說明。
雖然 Windows 下安裝MySQL沒什麼問題,但如果資料庫筆數太多時 (比如超過百萬筆資料),Windows版的效能奇差無比,甚至會有開機無法自動啟動 MySQL 的bug,所以 Windows 版的 MySQL 是無法應付一般公司的需求。在此強烈建議,一定要使用 Linux來安裝MySQL。
安裝環境
MySQL安裝分為Server及Client二部份. Server端是指隱藏在背後執行, 隨時提供連線服數的常駐程式. Client端是指在前端供使用者操作的UI介面:Workbench
安裝 Python
不論是 Win10 或 Win7,都必需先安裝Python 3.7.9 的版本, 如下網址 https://www.python.org/ftp/python/3.7.9/python-3.7.9-amd64.exe
接下來如果是 Win10就不需安裝,但如果是 Win7必需加裝如下套件
Visual C++ 2019 Redistribution 2019 : 下載
.NetFramework 4.7.2 : 下載
MySQL Server下載安裝
MySQL 到2022年已發展到了8.0.29,分為四個版本
Community : free
Cluster : 叢集, 應該是要錢的
Enterprise : 企業版, 聽說一年是U$599
Embedded : free
選擇Community版即可,此版跟Enterprise都是一樣的,只是Community無法取得原廠的技術協助而以。
MySQL Installer下載網址 : https://dev.mysql.com/downloads/mysql/
請依下圖依續點選即可
下圖有二種方式,第一個是透過網路安裝,第二個是下載離線安裝,當然選第二個
下面是要求登入, 如果沒有帳號, 可以選擇註冊(Sign UP), 還有第三個是直接下載.
但MySQL被Oracle併購了嘛, 而Oracle又是惡名昭彰的死要錢. 所以以後是否能不登入就下載, 不得而知了.
安裝時, 選取Developer Default即可
設定root密碼的畫面中, 必需把密碼強度增強, 因為root是最高權限.
另外通常我們會把root設定為只能在本地端登入(localhost), 不可透過網路登路. 所以請按下方的Add user, 新增一個可以透過網路登入的帳號
然後接下去一直按下一步即可完成
登入與登出
請在Console Mode(DOS)執行 mysql -u 帳號 -p. 登入成功後, 會出現 mysql>提示符號. 然後輸入 exit即可登出
c:\>mysql -u root -p mysql>exit;
新增刪除帳號及權限
請先使用root 登入,再下達如下指令
mysql -u root -p
use mysql;
create user 'account'@'%' identified by 'password';
grant all privileges on *.* to ‘帳號’@’%’;
#若只要新增某個資料庫(cloud)的讀取權限, 如下
grant select on cloud.* to '帳號'@'%'
#刪除帳號
drop user 帳號
範例下載 : cmddev.sql world.sql
變更帳號密碼
在 DOS 下登入 mysql
mysql -u root -p
登入資料庫後
use mysql; set password for 'root'@'localhost'='1234'; set password for 'student'@'%'='1234';
請注意,現在密碼都有加密了,所以不能使用底下的方法
update user set password='1234' where user='root'
變更MySQL資料庫目錄
MySQL8.0 資料庫預設目錄為 C:\ProgramData\MySQL\MySQL Server 8.0\Data.
要變更此目錄需操作如下步驟
1. 使用系統管理員身份進入Console mode, 執行如下命令
net stop mysql80
2. 修改 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data 更改為 datadir=D:/server/mysql
3. 將C:/ProgramData/MySQL/MySQL Server 8.0/Data 目錄 copy 到 d:/server/之下,並把 Data目錄改為 mysql。
4. 重啟mysql
net start mysql80
Workbench
Client的工作平台是方便使用者操作資料庫的UI環境,一個好的UI介面可以讓使用者省下不少力氣。常見的介面有網頁版的phpMyAdmin,以及官網所開發的 Workbench。
在上述的Mysql install裏, 即已包含了workbench,所以不需要獨立安裝此程式。但如果 Client 不需安裝Server,則可由下面網址獨立安裝Workbench
https://www.mysql.com/products/workbench/
安裝好後,打開workbench,選取 “MySQL Connections” ,再將Server端的網址、登入帳號、密碼輸入,如下圖所示
Workbench中文化
workbench是一套很好用的資料庫操作介面,只可惜沒有中文版。網路上找到的,也都是大陸人漢化的簡体版。
另網路上也有教人從Edit/Preference/Apperance,再更改為Simplfied Chinese,這都是沒用的。
要中文化,需打開 C:\Program Files\MySQL\MySQL Workbench 8.0 CE\data 底下的main_menu.xml, 然後進行更改,比如把下面的那一段改掉
<value type="string" key="caption">_File</value> 改成 <value type="string" key="caption">檔案(_F)</value>
儲存後,重新啟動workbench即可看到結果了。
路徑設定
由於常需要使用一些mysql指令,如mysqldump,所以請先設定系統環境變數 path,新增如下路徑
C:\Program Files\MySQL\MySQL Server 8.0\bin
備份
mysqldump -u 帳號 -p --routines 資料庫名 > outputfile.sql
還原
首先使用workbench產生一個資料庫。請注意資料庫的語系必需為 utf8/utf8_unicode_ci.
如果選用其他語系,而且在storage procedure 若有如下代碼
update 員工資料 set userAccount=caccount
此時就會出現下面的錯誤
Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
解決方式必需在每個 “=” 變數之後使用 collate utf8_general_ci 進行轉換, 非常的麻煩
update 員工資料 set
userAccount=caccount collate utf8_general_ci,
備份的檔案 outputfile.sql, 請使用Workbench先建立一個空白的資料庫,然後使用如下指令還原。
mysql -u 帳號 -p --default-character-set=utf8 資料庫名 < outputifle.sql
但如果在Linux備份, 然後在Windows下還原, 有可能會報ERROR 1064(42000)的語法錯誤. 這其中的一個原因是匯出的預設編碼跟匯入的預設編碼不一樣所致. 此時就要加入 –default-character-set=utf8 (最好mysqldump時也一併加入)
如果資料庫太大,在還原時會產生連線逾時的錯誤,請更改my.ini 如下設定
[wampmysqld64]
max_allowed_packet = 5000M
中英文資料庫/資料表
在建立資料庫時,切記資料庫名不可以使用中文,但建立資料表時則可以使用中文。
建立資料庫時,其實就是新增一個目錄,而建立資料表時,則是建立一個檔案。若使用中文時,建立在硬碟的目錄或檔案會被轉成 utf-8 的文字碼,如”@5eab@5b58@7ba1@7406@54e1.ibd”。
好,問題來了,備份資料表 mysqldump -u 帳號 -p 資料庫名 > output.sql,這個資料庫名被轉成了 utf-8 碼,是要怎麼打啊!! 所以資料庫名絕對不能使用中文。
但為什麼資料表又可以使用中文呢!! 因為在備份後,系統自動去抓那些 utf-8 的檔案,不需要我們手動去打字,所以沒關係。
常見問題
中文亂碼
請參加本站另一篇說明 : MySQL中文亂碼
資料表引擎
MyISAM將資料表分成三個檔, 查詢速度快, 但功能少, 不能roll back
InnoDB是新型技術, 只有一個檔, 但支援的功能多. 其實依目前狀況來看, 建議直接選用InnoDB.
日期格式
使用 date or datetime格式,日後方便使用日期查詢
效能調校
幾個常見的設定, 可讓MySQL效能加速,
在ubuntu下請更改 /etc/mysql/mysql.conf.d/mysqld.cnf
若在Windows下, 請更改C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
更改完後,重新啟動mysql
ubuntu : sudo service mysql restart
Windows : net stop mysql80/net start mysql80
innodb_log_buffer_size = 128M
innodb_log_file_size = 128M
innodb_autoextend_increment = 1000
innodb_flush_log_at_trx_commit = 0 #加速效能很有效
max_allowed_packet = 1024M #查詢過久斷線解決方式(Lost connection while query)
skip-log-bin #取消 binary logging
innodb_buffer_pool_size=4G #緩衝區, 可大輻減少磁碟負載, 而且可加速查詢效能, 尤其是在select count(*),但設太大會造成開機時無法自動啟動。
key_buffer_size = 64M
[mysql]
default-character-set = utf8
character_set_server = utf8
binary loggin
binary loggin會一直讀寫硬碟. 造成硬碟負載過大, 所以在系統調校穩定後, 最好把這個設定取消.
在Linux之下, 只要在mysqld.cnf 加入 skip-log-bin即可.
但在Windows下, my.ini的設定中, 需先把 log-bin=”xxx” 刪除, 然後加為 skip-log-bin
#log-bin="DESKTOP-D35ACP3-bin" skip-log-bin
相容php7.2
php7.2不認得MySql 8.0 的認証及字元碼, 所以必需更改 /etc/mysql/mysql.conf.d/mysql.cnf
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log default_authentication_plugin=mysql_native_password character_set_server = utf8
然後要登入mysql 8.0 修改帳號
ALTER USER '帳號'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';
儲存後, 重啟mysql : service mysql restart
安全更新
新版MySQL在更新刪除時,如果條件所使用的欄位非索引鍵時,就會出現安全更新的問題。此時需把SQL_SAFE_UPDATES設為0 (關勢),待更新刪除完畢後,再設為 1(打開)。
SET SQL_SAFE_UPDATES=0; update table set field1=value where condition; SET SQL_SAFE_UPDATES=1;
移除MySQL
mysql installer也可以移除MySQL. 但 mysql for visual studio 1.2.8 無法移除, 這個是官方認定的已知issue, 要移除這個, 可以使用geek這套軟体. 下載解壓縮後, 直接執行 geek.exe,然後在 mysql for visual studio 按右鍵/強制移除 即可.