MySQL8.0 安裝

      在〈MySQL8.0 安裝〉中尚無留言

本章介紹如何在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/
請依下圖依續點選即可

mysql_download1

下圖有二種方式,第一個是透過網路安裝,第二個是下載離線安裝,當然選第二個

mysql_download2

下面是要求登入, 如果沒有帳號, 可以選擇註冊(Sign UP), 還有第三個是直接下載.

但MySQL被Oracle併購了嘛, 而Oracle又是惡名昭彰的死要錢. 所以以後是否能不登入就下載, 不得而知了.

mysql_download3

安裝時, 選取Developer Default即可

mysql_install1

設定root密碼的畫面中, 必需把密碼強度增強, 因為root是最高權限.

mysql_password1

另外通常我們會把root設定為只能在本地端登入(localhost), 不可透過網路登路. 所以請按下方的Add user, 新增一個可以透過網路登入的帳號

mysql_password2

然後接下去一直按下一步即可完成

登入與登出

請在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端的網址、登入帳號、密碼輸入,如下圖所示

workbench1

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,

mysql_bacup

備份的檔案 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 按右鍵/強制移除 即可.

geek 下載

發佈留言