National Yang Ming Chiao Tung University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try a Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

1

Local AI

--

Uedu Code

--

陽明交大 AQI 69 24°C PM2.5 26
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 01

安裝 MySQL

MySQL 8 的安裝、啟動服務與第一次登入
Interaction實作導覽 20 minute(s)

Learning Objectives

  • 說明 MySQL 伺服器(mysqld)與用戶端(mysql)的分工
  • 在 Ubuntu 24.04 用 apt 安裝 mysql-server,並查看、啟動、停止 mysql 服務
  • 說明 Ubuntu 上 root 為什麼用 sudo mysql 登入(auth_socket),並執行 mysql_secure_installation
  • 用 CREATE USER 與 GRANT 建立有密碼的管理帳號,指出 MySQL 8 已移除的舊語法
  • 在 mysql 用戶端使用分號、\G、\c、\q,並用 SELECT VERSION()、CURRENT_USER() 確認連線

伺服器與用戶端

MySQL 是一套主從式(client-server)的資料庫系統,分成兩個部分:

程式 角色 說明
mysqld 伺服器 在背景持續執行,負責保存資料、處理查詢、檢查帳號權限。Ubuntu 上以系統服務 mysql 的形式執行
mysql 用戶端 命令列工具,把你輸入的 SQL 送給伺服器,再把結果印成表格。也叫做 MySQL monitor

除了 mysql 命令列,MySQL Workbench、phpMyAdmin、Python 的 PyMySQL 也都是用戶端:它們透過網路或本機的 socket 連到同一個伺服器。 所以「安裝 MySQL」通常指安裝伺服器,連帶裝上命令列用戶端;「登入 MySQL」指用某個帳號從用戶端連上伺服器。

本課以 Ubuntu 24.04 的 mysql-server 套件為主(MySQL 8.0),Windows 的安裝方式放在後面補充。 本軌其他課的範例,輸出都比照這個環境。

原課程的 XAMPP 與現在的做法

早期的課程(MySQL 4.1/5 時代)常用 XAMPP:一個安裝檔同時裝好 Apache、PHP 與 MySQL,root 預設沒有密碼, mysql -u root 直接就能登入。這個做法現在不建議:

  • XAMPP 從 2015 年起附的資料庫是 MariaDB,不是 MySQL。兩者源自同一份程式碼,但 8.0 之後的帳號管理、預設驗證方式、資料字典都已經不同
  • root 沒有密碼、還有不需帳號就能登入的匿名帳號,只適合單機練習,不適合放在網路上
  • 課程原本的 SET PASSWORD … = PASSWORD('…')、GRANT … IDENTIFIED BY '…' 在 MySQL 8.0 都會出現語法錯誤(下面會實際執行看看)

Linux 伺服器上的標準做法是用作業系統的套件管理程式安裝。Ubuntu 24.04 的套件庫提供 MySQL 8.0, 指令是 apt install mysql-server;裝好之後就是系統服務,開機自動啟動,也會跟著系統更新收到安全性修補。

導覽:在 Ubuntu 24.04 安裝 MySQL Server

以下指令在 Ubuntu 24.04 的終端機執行(雲端主機或虛擬機都可以),提示字元 $ 不用輸入。輸出很長的地方只節錄重點,「…」代表省略的內容;版本號、PID、時間等數字是示意,實際以你的主機為準。

  1. 1

    更新套件清單並安裝 mysql-server

    apt update 先取得最新的套件清單,apt install -y mysql-server 安裝伺服器。它會連帶安裝 mysql-client-8.0(命令列用戶端)等相依套件。sudo 表示以系統管理員權限執行。

  2. 2

    確認版本

    mysql --version 印出用戶端的版本。0ubuntu0.24.04.1 是 Ubuntu 套件自己的修訂編號(示意),前面的 8.0.44 才是 MySQL 的版本。

  3. 3

    查看服務狀態

    伺服器以系統服務 mysql 執行。systemctl status 的重點是 Active: active (running)(正在執行)與 enabled(開機自動啟動)。按 q 離開。

  4. 4

    停止、啟動、重新啟動

    修改設定檔(第 12 課)之後要重新啟動服務才會生效。這些指令成功時沒有輸出,可以再用 status 確認。is-active 只印出一個字,適合寫在腳本裡判斷。

這段導覽完成了

root 用 sudo mysql 登入:auth_socket

Ubuntu 的 mysql-server 套件安裝時不會替 root 設定密碼,而是讓 root@localhost 使用 auth_socket 驗證方式:

  • 連線時,伺服器透過本機的 Unix socket 查詢「發出連線的作業系統使用者是誰」
  • 作業系統使用者是 root(也就是用了 sudo),就允許以 MySQL 的 root 登入,不必輸入密碼
  • 反過來,用一般帳號執行 mysql -u root -p,輸入什麼密碼都會被拒絕:ERROR 1698 (28000): Access denied for user 'root'@'localhost'

這樣做的好處是 root 沒有密碼可以被猜,只有能使用 sudo 的人才能管理資料庫。所以日常管理有兩種選擇:

  1. 需要 root 時用 sudo mysql
  2. 另外建立一個有密碼的管理帳號(下面的 admin),給 MySQL Workbench 這類需要帳號密碼的工具使用

帳號寫成 '帳號'@'主機':'root'@'localhost' 只能從這台主機連線;'%' 代表任何主機。 同一個名稱、不同主機是不同的帳號,可以有不同的密碼與權限。

其他平台(Windows 的 MySQL Installer、Oracle 官方的 Linux 套件)則是在安裝時要你設定 root 密碼,root 用一般的密碼驗證。

導覽:第一次登入與 mysql_secure_installation

先用 sudo mysql 登入看看,再執行安全設定。

  1. 1

    用 sudo mysql 登入

    出現歡迎訊息與 mysql> 提示字元就是登入成功。歡迎訊息第一行提醒:敘述以 ; 或 \g 結束。connection id 是伺服器替這條連線編的號碼。

  2. 2

    確認目前的帳號與驗證方式

    CURRENT_USER() 是伺服器認定的帳號;mysql.user 表格記錄所有帳號,plugin 欄位是驗證方式。root 是 auth_socket;debian-sys-maint 是 Ubuntu 套件維護用的帳號,mysql. 開頭的是伺服器內部帳號,都不要刪除。

  3. 3

    執行 mysql_secure_installation

    這支程式以問答的方式完成幾項基本的安全設定:密碼強度檢查元件(VALIDATE PASSWORD)、移除匿名帳號、禁止 root 從遠端登入、刪除 test 資料庫,最後重新載入權限表。原課程用 DELETE FROM user WHERE User='' 手動刪匿名帳號,現在交給這支程式或 DROP USER。

    密碼強度選 1(MEDIUM):至少 8 個字元,含數字、大小寫字母與符號。因為 root 使用 auth_socket,Ubuntu 版的程式會略過設定 root 密碼這一步。其餘問題都回答 y。

這段導覽完成了

建立有密碼的管理帳號

MySQL 8.0 建立帳號分成兩步:先 CREATE USER 建立帳號與密碼,再 GRANT 授予權限。

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Uedu#2026pass';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
  • ON *.* 是所有資料庫的所有表格;WITH GRANT OPTION 讓 admin 也能把權限授予別人。這是和 root 同等級的管理帳號,密碼要夠強
  • 密碼不會以原文保存:mysql.user 的 authentication_string 欄位存的是雜湊值(MySQL 5.7 以前的欄位名稱是 Password)
  • 新帳號預設用 caching_sha2_password 驗證(MySQL 8.0 的預設值,取代舊的 mysql_native_password)
  • 用 CREATE USER、GRANT、ALTER USER 修改帳號,權限立刻生效,不需要 FLUSH PRIVILEGES。 只有直接用 INSERT、UPDATE、DELETE 修改 mysql 資料庫的表格時才需要它,而這種做法本身就不建議

第 11 課會再詳細介紹權限層級,這裡先建立一個能用密碼登入的管理帳號。

建立 admin 帳號,再用它登入

右邊會顯示 mysql.user 表格,CREATE USER 新增的那一列標成綠色。第 5 行的 -- @user admin@localhost 是播放器的指令,代表換成 admin 帳號連線;在真實環境要先 \q 離開,再用 mysql -u admin -p 重新登入。

這裡的伺服器是模擬環境:root 顯示為 caching_sha2_password,真實的 Ubuntu 上是 auth_socket,也還會有 debian-sys-maint 帳號;mysql 資料庫只模擬了 user、db、tables_priv、columns_priv 四張表格。

導覽:用 admin 帳號登入

在 Ubuntu 上實際操作一次。

  1. 1

    建立帳號

    用 sudo mysql 登入後執行。啟用了 MEDIUM 密碼強度時,太簡單的密碼會被拒絕(ERROR 1819),換一個符合規則的密碼即可。

  2. 2

    用密碼登入

    -u 是帳號,-p 表示要輸入密碼。-p 後面不接密碼,程式會提示 Enter password:,輸入時畫面不會顯示。也可以寫成 -pUedu#2026pass(-p 和密碼之間不能有空格),但密碼會留在指令紀錄裡,不建議。連到另一台主機加 -h 主機名稱或 IP。

這段導覽完成了

MySQL 8 已移除的舊語法

原課程的寫法 MySQL 8.0 的寫法 說明
XAMPP,mysql -u root 不用密碼 apt install mysql-server,sudo mysql Ubuntu 的 root 用 auth_socket
SET PASSWORD FOR root@localhost = PASSWORD('…'); ALTER USER 'admin'@'localhost' IDENTIFIED BY '…'; PASSWORD() 函式在 8.0 移除。SET PASSWORD FOR … = '…'(直接寫密碼字串)仍可使用
GRANT ALL ON *.* TO fred@localhost IDENTIFIED BY '…'; 先 CREATE USER … IDENTIFIED BY '…',再 GRANT 8.0 的 GRANT 不能設定密碼,也不能順便建立帳號
DELETE FROM user WHERE User=''; 加 FLUSH PRIVILEGES DROP USER ''@'localhost'; 匿名帳號的名稱是空字串;用 DROP USER 會一併移除各層級的權限

在 Ubuntu 上不建議替 root 改用密碼登入,需要密碼登入時建立 admin 這類帳號即可。

舊語法的錯誤與現在的寫法

執行前已經建好 admin 帳號,也建了一個匿名帳號 ''@'localhost'(使用者名稱是空字串),模擬舊版安裝留下來的狀態。第 1 行是原課程的寫法,會出現 ERROR 1064 語法錯誤;後面依序改密碼、找出匿名帳號、刪除它。

想一想:安裝與帳號

1.

在 Ubuntu 24.04 剛裝好 mysql-server,用一般帳號執行 mysql -u root -p 怎麼輸入都登不進去,sudo mysql 卻可以直接登入。原因是什麼?

2.

在 MySQL 8.0 執行原課程的這一行,會得到什麼?

GRANT ALL ON *.* TO 'fred'@'localhost' IDENTIFIED BY 'Fred#2026pw';
3.

用 CREATE USER 建立帳號、GRANT 授予權限之後,還需要執行 FLUSH PRIVILEGES 嗎?

第 1 次作答

mysql 用戶端的基本操作

在 mysql> 提示字元下輸入的內容分成兩種:SQL 敘述送到伺服器執行;用戶端指令由 mysql 程式自己處理。

輸入 作用
; 或 \g 結束一個 SQL 敘述並送出。沒打分號就按 Enter,提示字元會變成 ->,表示敘述還沒結束
\G 送出敘述,結果改成直向顯示:每一列拆成好幾行,一行一個欄位。欄位很多、表格太寬時好用
\c 取消目前正在輸入、還沒送出的敘述
\q、quit、exit 離開 mysql,印出 Bye
\h、help 顯示用戶端指令的說明

提示字元會提醒你目前的狀態:'> 表示單引號還沒配對,"> 是雙引號,-> 是敘述還沒結束。 打錯而卡在這些提示字元時,先補上缺的引號,再用 \c 取消。

登入後先確認自己連到哪裡、是誰:

SELECT VERSION();        -- 伺服器的版本
SELECT CURRENT_USER();   -- 伺服器認定的帳號(帳號@主機)
SELECT USER();           -- 用戶端登入時提供的帳號與來源主機
SHOW DATABASES;          -- 這個帳號看得到的資料庫

SQL 的關鍵字不分大小寫,select version(); 也可以,本軌一律把關鍵字寫成大寫,方便和表格、欄位名稱區分。

導覽:多行輸入、取消與直向顯示

用 mysql -u admin -p 登入後試試看。

  1. 1

    一個敘述寫成好幾行

    沒有分號就按 Enter,mysql 只會換行並顯示 ->,等你繼續輸入。打上分號才會送出。

  2. 2

    用 \c 取消

    寫到一半發現寫錯了,輸入 \c 就丟掉這個敘述,回到 mysql>,不會送到伺服器。

  3. 3

    用 \G 直向顯示,再用 \q 離開

    把結尾的分號換成 \G,同一個查詢會改成一欄一行。

這段導覽完成了

確認連線的幾個查詢

這些查詢沒有讀取任何表格,所以右邊沒有表格。注意最後一個用 \G 結尾,結果改成直向顯示。模擬環境的 VERSION() 是 8.0.44,Ubuntu 的套件會在後面加上 -0ubuntu0.24.04.1 這類修訂編號;NOW() 固定為 2026-09-01 09:00:00(伺服器時區 UTC)。

想一想:用戶端操作

1.

輸入 SELECT CURRENT_USER() 後忘了打分號就按 Enter,畫面出現 ->。這代表什麼?

2.

用 mysql -u fred -p 登入後執行 SELECT CURRENT_USER();,結果是什麼?(帳號建立時寫的是 'fred'@'localhost')

3.

mysql -u admin -p Uedu#2026pass 這個指令有什麼問題?

第 1 次作答

補充:在 Windows 安裝

Windows 上的 MySQL 8.0 可以從 MySQL 官方網站下載 MySQL Installer 安裝。安裝時:

  1. 安裝類型選 Server only,或依需要加上 MySQL Workbench
  2. 驗證方式選預設的 Use Strong Password Encryption(caching_sha2_password)
  3. 設定 root 密碼,也可以在這一步新增其他帳號
  4. 設定成 Windows 服務,預設名稱是 MySQL80,開機自動啟動

程式預設裝在 C:\Program Files\MySQL\MySQL Server 8.0\bin,資料放在 C:\ProgramData\MySQL\MySQL Server 8.0\Data。 在「命令提示字元」切換到 bin 資料夾,或把它加進 PATH 之後,用 mysql -u root -p 輸入安裝時設定的密碼登入。 服務可以在「服務」管理工具裡啟動、停止,或以系統管理員身分執行 net stop MySQL80、net start MySQL80。

Windows 版和 Ubuntu 版有幾個差別要注意:root 用密碼驗證(不是 auth_socket);表格名稱不分大小寫(lower_case_table_names=1)。 本軌以 Ubuntu 為準:表格名稱區分大小寫,employeeSkills 不能寫成 employeeskills。

動手寫:建立 fred 帳號

請建立帳號 'fred'@'localhost',密碼用 Fred#2026pw,授予 employee 資料庫的所有權限(GRANT ALL PRIVILEGES ON employee.* …),再分別查詢 mysql.user 和 mysql.db 確認。比較兩個查詢的 Select_priv:權限只限 employee 資料庫,所以記在 mysql.db,mysql.user 的全域權限仍是 N。

你的輸出
預期輸出

重點整理

工作 Ubuntu 24.04(MySQL 8.0)
安裝 sudo apt install mysql-server
服務 sudo systemctl status/start/stop/restart mysql
root 登入 sudo mysql(auth_socket,不用密碼)
安全設定 sudo mysql_secure_installation
建立帳號 CREATE USER '帳號'@'主機' IDENTIFIED BY '密碼'; 再 GRANT …
修改密碼 ALTER USER '帳號'@'主機' IDENTIFIED BY '新密碼';
刪除匿名帳號 DROP USER ''@'localhost';
用密碼登入 mysql -u 帳號 -p,另一台主機加 -h 主機
  • 已移除:PASSWORD() 函式、GRANT … IDENTIFIED BY;XAMPP 附的是 MariaDB
  • 用戶端:; 送出、\G 直向顯示、\c 取消、\q 離開

下一課登入伺服器四處看看:有哪些資料庫、表格長什麼樣子。

這一課完成了!
Next lesson:快速導覽
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。