Ubuntu MySQL 基本用法教學

2025-05-04

標籤: 架站

廣告

本教學涵蓋在 Ubuntu 系統上安裝、設定及使用 MySQL 資料庫的基本操作。

1. 安裝 MySQL Server

首先,更新你的套件列表,然後安裝 mysql-server 套件。

sudo apt update
sudo apt install mysql-server

安裝完成後,MySQL 服務通常會自動啟動。你可以使用以下指令檢查服務狀態:

sudo systemctl status mysql

2. 安全性設定 (建議執行)

剛安裝好的 MySQL 安全性較低,建議執行內建的安全性指令碼來強化設定。

sudo mysql_secure_installation

這個指令碼會引導你完成以下步驟:

  • 設定 root 密碼:為 MySQL 的 root 使用者設定一個強密碼 (注意:這與系統的 root 使用者不同)。
  • 移除匿名使用者:移除預設的匿名使用者帳號。
  • 禁止 root 遠端登入:基於安全考量,通常建議禁止 root 使用者從遠端登入。
  • 移除測試資料庫:移除預設建立的 test 資料庫及其存取權限。
  • 重新載入權限表:讓以上設定立即生效。

根據提示回答問題即可完成設定。

3. 連接 MySQL 伺服器

有兩種主要方式連接到本機的 MySQL 伺服器:

  • 使用系統 root 權限 (透過 Socket 認證):這是 Ubuntu 預設的 root 使用者登入方式。

    bash sudo mysql 進入 MySQL 提示字元 (mysql>) 後,即可開始執行 SQL 指令。

  • 使用 MySQL 使用者名稱和密碼:如果你已經設定了其他 MySQL 使用者,或是在 mysql_secure_installation 中為 root 設定了密碼並調整了認證方式,可以使用此方法。

    bash mysql -u your_username -p 系統會提示你輸入 your_username 對應的密碼。

離開 MySQL 提示字元:

mysql> 提示字元下輸入:

EXIT;
-- 或者
QUIT;

4. 基本 SQL 操作

連接到 MySQL 後,你可以執行 SQL (Structured Query Language) 指令來管理資料庫。

資料庫 (Database / Schema) 操作

  • 顯示所有資料庫: sql SHOW DATABASES;
  • 建立新資料庫: sql CREATE DATABASE database_name; -- 例如: CREATE DATABASE myapp_db;
  • 選擇要使用的資料庫: sql USE database_name; -- 例如: USE myapp_db;
  • 刪除資料庫 (請謹慎操作,資料會永久遺失!): sql DROP DATABASE database_name; -- 例如: DROP DATABASE myapp_db;

資料表 (Table) 操作 (需先 USE 選擇資料庫)

  • 顯示目前資料庫中的所有資料表: sql SHOW TABLES;
  • 建立新資料表: sql CREATE TABLE table_name ( column1 datatype constraints, column2 datatype constraints, ... PRIMARY KEY (one_or_more_columns) ); -- 例如: CREATE TABLE users ( id INT AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) );
  • 顯示資料表結構: sql DESCRIBE table_name; -- 或 DESC table_name; -- 例如: DESC users;
  • 刪除資料表 (請謹慎操作,資料會永久遺失!): sql DROP TABLE table_name; -- 例如: DROP TABLE users;

資料操作 (CRUD: Create, Read, Update, Delete) (需先 USE 選擇資料庫)

  • 插入資料 (Create): sql INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); -- 例如: INSERT INTO users (username, email) VALUES ('john_doe', 'john.doe@example.com');
  • 查詢資料 (Read): sql -- 查詢所有欄位和所有記錄 SELECT * FROM table_name; -- 查詢特定欄位 SELECT column1, column2 FROM table_name; -- 加上條件查詢 SELECT * FROM table_name WHERE condition; -- 例如: SELECT id, username, email FROM users WHERE username = 'john_doe';
  • 更新資料 (Update): sql UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; -- **警告:** 如果省略 `WHERE` 子句,將會更新表格中的 *所有* 記錄! -- 例如: UPDATE users SET email = 'john.d@newdomain.com' WHERE username = 'john_doe';
  • 刪除資料 (Delete): sql DELETE FROM table_name WHERE condition; -- **警告:** 如果省略 `WHERE` 子句,將會刪除表格中的 *所有* 記錄! -- 例如: DELETE FROM users WHERE username = 'john_doe';

5. 使用者管理

管理資料庫使用者及其權限。

  • 建立新使用者: sql CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; -- 'localhost' 表示該使用者只能從本機連接 -- '%' 表示該使用者可以從任何主機連接 (安全性較低)
  • 授予權限: sql -- 授予使用者對特定資料庫所有表格的所有權限 GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'localhost'; -- 授予更精細的權限 (例如 SELECT, INSERT) GRANT SELECT, INSERT ON database_name.table_name TO 'newuser'@'localhost'; -- 授予所有資料庫的權限 (通常不建議) -- GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
  • 使權限變更生效: sql FLUSH PRIVILEGES;
  • 顯示使用者權限: sql SHOW GRANTS FOR 'username'@'host'; -- 例如: SHOW GRANTS FOR 'newuser'@'localhost';
  • 撤銷權限: sql REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'host'; -- 例如: REVOKE INSERT ON myapp_db.users FROM 'newuser'@'localhost'; FLUSH PRIVILEGES;
  • 刪除使用者: sql DROP USER 'username'@'host'; -- 例如: DROP USER 'newuser'@'localhost';

6. 備份與還原

使用 mysqldump 工具進行備份和還原。

  • 備份單一資料庫: bash sudo mysqldump -u username -p database_name > backup.sql -- 輸入 username 的 MySQL 密碼 -- 例如: sudo mysqldump -u root -p myapp_db > myapp_db_backup.sql
  • 備份所有資料庫: bash sudo mysqldump -u username -p --all-databases > all_databases_backup.sql
  • 還原資料庫: bash # 先確保目標資料庫已存在 sudo mysql -u username -p database_name < backup.sql -- 輸入 username 的 MySQL 密碼 -- 例如: sudo mysql -u root -p myapp_db < myapp_db_backup.sql 如果備份檔案包含 CREATE DATABASE 語句 (例如 --all-databases 的備份),則可以直接還原: bash sudo mysql -u username -p < all_databases_backup.sql

7. 管理 MySQL 服務

使用 systemctl 管理 MySQL 服務。

  • 啟動服務: sudo systemctl start mysql
  • 停止服務: sudo systemctl stop mysql
  • 重新啟動服務: sudo systemctl restart mysql
  • 檢查服務狀態: sudo systemctl status mysql
  • 設定開機自動啟動: sudo systemctl enable mysql
  • 取消開機自動啟動: sudo systemctl disable mysql

8. 卸載 MySQL (若需要)

如果你需要完全移除 MySQL:

# 1. 停止服務
sudo systemctl stop mysql

# 2. 移除相關套件 (purge 會一併移除設定檔)
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*

# 3. 移除資料目錄 (警告:這會刪除所有資料庫資料!)
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql

# 4. 清理不再需要的相依套件
sudo apt autoremove

# 5. 清理 apt 快取 (可選)
sudo apt autoclean
廣告