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