本章介紹如何在Windows下獨立安裝MySQL Server端程式。如果要在 Linux 下安裝 MySQL,請參考 ubuntu mysql 這篇說明。
Windows 下安裝 MySQL 雖沒什麼問題,但如果資料庫筆數太多 (比如超過百萬筆),效能就變差了,甚至會有開機無法自動啟動 MySQL 的 bug,故建議使用 Linux 來安裝 MySQL。
安裝環境
MySQL 安裝分為 Server 及 Client 二部份。Server 端是指隱藏在背後執行,隨時提供連線服數的常駐程式。 Client 端是指在前端供使用者操作的 UI 介面,比如 Workbench。
安裝 Python
不論是 Win10 或 Win7,都必需先安裝 Python 3.8.10 ,網址如下https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe
另外如果是 Win7 的作業系統,必需加裝如下套件
Visual C++ 2019 Redistribution 2019 : 下載
.NetFramework 4.7.2 : 下載
不過 MySQL 8.0.34 已不支援 win7 了喔
MySQL Server下載安裝
MySQL 其實有四個版本
Community : free
Cluster : 叢集, 應該是要錢的
Enterprise : 企業版, 聽說一年是U$599
Embedded : free
MySQL Community 到 2023 年 7 月已發展到了 8.0.34 版,另外還有一個 8.1.0 Innovation創新版。
建議選擇 8.0.34 Community 版,此版跟 Enterprise 都是一樣的,只是 Community 無法取得原廠的技術協助。
MySQL Community 下載網址 : https://dev.mysql.com/downloads/mysql/ ,然後在 “Select Version” 選取 8.0.34。
下圖有二種安裝方式,第一個是透過網路安裝,第二個是下載離線安裝,所以請選第二個。
下面是要求登入,請直接按下 “No thanks, just start my download.”
開始安裝
安裝時, 選取 Full 選項
然後再執行 Execute
安裝時要一段時間,尤其是在安裝 MySQL Shell 時,需比較久的時間。接下來的畫面都按 “Next”,並請注意不要亂動原本的設定。
到了 “Accounts and Roles” 畫面,請先設定 root 的密碼。因為 root 是最高權限,必需使用高強度密碼。
root 只能在本地端登入(localhost),不可透過網路登路。所以請再按下方的 Add user,新增一個可以透過網路登入的帳號。
輸入新的使用者帳號及密碼,如果忘了帳號及密碼,是會被抓去槍斃的。到目前的功力,如果忘了帳密,最快解決方式就是移除 MySQL,再重新安裝。
接下來的畫面,不是 “Next”,就是 “Execute” 或 “Finish”。
到 “Connect To Server” 畫面時,在 “Password” 輸入剛剛設定的 root 密碼,然後按下Check, 連線成功後,再按下 “Next”。
接下來,還是按 “Next”, “Exectue”,或 “Finish”。到最後會自動開啟 DOS 視窗及 Workbench,請把 DOS 視窗直接關掉。
路徑設定
mysql 常用的指令都在 c:\Program Files/MySQL/MySQL Server 8.0\bin 之下,如 mysql, mysqldump等。所以需手動設定 系統環境變數 path。
請由 “開始按右鍵/系統/進階系統設定/環境變數”,然後在系統變數選 path,再按編輯,新增如下路徑。
新增完後,請記得重新開啟 DOS 提示視窗。
C:\Program Files\MySQL\MySQL Server 8.0\bin
使用Workbench
操作資料庫的方式,可以在 DOS 命令模式、phpMyAdmin 或 Workbench。phpMyAdmin 超級難用的,所以建議使用 Workbench。請在 “開始/MySQL/MySQL Workbench 8.0 CE” 按一下,開啟 Workbench。
Workbench 預設可以使用 root 登入,但 root 是緊急救援用的,到目前為止絕對禁止使用 root 登入。請由下圖的 “+” 新增連線登入資料庫。
然後在如下地方輸入相關資訊
Connection Name : localhost
Hostname : localhost
Username : 安裝MySQL時所新增的 “帳號”
Store in Valut…: 安裝MySQL時,新增帳號的 “密碼”
最後再按 “OK”
最後在新增的 localhost 按一下,登入資料庫
登入後,按下 “Schemas” 切換到資料庫,然後再按下右上角的二個按鈕,把右邊及下邊的視窗關掉。
新增帳號及權限
若要新增其它使用者的帳號,則必需使 root 登入。請開啟 Workbench,由 root 帳號登入,然後按下左上角的 “SQL” 按鈕, 輸入如下指令,再按下 “閃電” 按鈕執行。
use mysql;
create user '帳號'@'%' identified by '密碼';
grant all privileges on *.* to '帳號'@'%';
唯讀權限
唯讀權限只能讀取,不能寫入,指令如下。
use mysql;
grant select on cloud.* to '帳號'@'%'
#刪除帳號
drop user 帳號
刪除帳號
刪除帳號只要使用 drop 即可,如下
use mysql; drop user 帳號;
變更帳號密碼
變更帳號的密碼指令如下
use mysql; set password for 'root'@'localhost'='1234'; set password for '帳號'@'%'='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
備份
備份資料庫的指令如下
mysqldump -u 帳號 -p --routines 資料庫名 > outputfile.sql
還原
首先使用 workbench 產生一個新的資料庫。請注意資料庫的語系必需為 utf8/utf8_unicode_ci.
然後在 DOS 命令視窗使用如下指令還原資料庫
mysql -u 帳號 -p --default-character-set=utf8 資料庫名 < outputifle.sql
Linux 與 Windows 轉換
但如果在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 的檔案,不需要我們手動去打字,所以沒關係。
使用 DOS 登入與登出
請在 Console Mode(DOS) 執行 mysql -u 帳號 -p。
登入成功後, 會出現 “mysql>” 提示符號。輸入 exit 即可登出。
c:\>mysql -u 帳號 -p mysql>exit;
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中文亂碼
資料表引擎
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 按右鍵/強制移除 即可.