本文將介紹如何在 Ubuntu 22.04 LTS 上安裝 MySQL 資料庫伺服器,並進行基礎的安全設定與使用者管理。
前置準備
在開始安裝之前,請確保您具備以下條件:
- 一台運行 Ubuntu 22.04 的伺服器
- 具有 sudo 權限的非 root 使用者
- 穩定的網路連線
步驟一:更新系統套件
首先,更新系統的套件索引:
1
2
| sudo apt update
sudo apt upgrade -y
|
步驟二:安裝 MySQL Server
Ubuntu 22.04 的預設套件庫中包含 MySQL 8.0,使用以下指令進行安裝:
1
| sudo apt install mysql-server -y
|
安裝完成後,MySQL 服務會自動啟動。您可以使用以下指令確認服務狀態:
1
| sudo systemctl status mysql
|
若服務未啟動,可以手動啟動並設定開機自動執行:
1
2
| sudo systemctl start mysql
sudo systemctl enable mysql
|
步驟三:執行安全設定腳本
MySQL 提供了一個安全設定腳本 mysql_secure_installation,用於強化資料庫的安全性。執行此腳本:
1
| sudo mysql_secure_installation
|
腳本會引導您完成以下設定:
1. 設定 VALIDATE PASSWORD 元件
系統會詢問是否要設定密碼驗證元件(VALIDATE PASSWORD COMPONENT)。建議選擇 Y 啟用:
1
2
3
4
5
6
| VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Y
|
選擇密碼強度等級:
- 0 = LOW:密碼長度至少 8 個字元
- 1 = MEDIUM:包含數字、大小寫字母、特殊字元
- 2 = STRONG:包含字典檔檢查
1
2
3
4
5
6
7
| There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
|
2. 設定 root 密碼
接著設定 MySQL root 使用者的密碼:
1
2
3
4
| Please set the password for root here.
New password:
Re-enter new password:
|
3. 移除匿名使用者
建議移除匿名使用者以提升安全性:
1
| Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
|
4. 禁止 root 遠端登入
建議禁止 root 帳號從遠端登入:
1
| Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
|
5. 移除測試資料庫
移除預設的測試資料庫:
1
| Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
|
6. 重新載入權限表
最後,重新載入權限表使變更生效:
1
| Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
|
步驟四:調整 root 使用者驗證方式
在 Ubuntu 22.04 上,MySQL root 使用者預設使用 auth_socket 驗證方式。若要使用密碼登入,需要調整驗證方式。
首先,以 root 身份登入 MySQL:
查看目前的驗證方式:
1
| SELECT user, authentication_string, plugin, host FROM mysql.user;
|
將 root 使用者的驗證方式改為使用密碼:
1
| ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '您的密碼';
|
重新載入權限:
退出 MySQL:
現在您可以使用密碼登入:
步驟五:建立新使用者與資料庫
在正式環境中,建議為每個應用程式建立專屬的使用者和資料庫,而非使用 root 帳號。
建立新資料庫
1
| CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
建立新使用者
1
| CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY '安全密碼';
|
若需要允許遠端連線,可將 localhost 改為 % 或特定 IP:
1
| CREATE USER 'myapp_user'@'%' IDENTIFIED BY '安全密碼';
|
授予權限
授予使用者對特定資料庫的完整權限:
1
| GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';
|
若只需要特定權限:
1
| GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'myapp_user'@'localhost';
|
重新載入權限:
驗證使用者權限
1
| SHOW GRANTS FOR 'myapp_user'@'localhost';
|
常用 MySQL 指令
服務管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # 啟動 MySQL 服務
sudo systemctl start mysql
# 停止 MySQL 服務
sudo systemctl stop mysql
# 重新啟動 MySQL 服務
sudo systemctl restart mysql
# 查看服務狀態
sudo systemctl status mysql
# 設定開機自動啟動
sudo systemctl enable mysql
# 停用開機自動啟動
sudo systemctl disable mysql
|
資料庫操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| -- 顯示所有資料庫
SHOW DATABASES;
-- 選擇資料庫
USE database_name;
-- 顯示目前資料庫的所有資料表
SHOW TABLES;
-- 顯示資料表結構
DESCRIBE table_name;
-- 刪除資料庫
DROP DATABASE database_name;
|
使用者管理
1
2
3
4
5
6
7
8
9
10
11
| -- 顯示所有使用者
SELECT user, host FROM mysql.user;
-- 刪除使用者
DROP USER 'username'@'localhost';
-- 修改使用者密碼
ALTER USER 'username'@'localhost' IDENTIFIED BY '新密碼';
-- 撤銷權限
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'localhost';
|
資料備份與還原
1
2
3
4
5
6
7
8
| # 備份單一資料庫
mysqldump -u root -p database_name > backup.sql
# 備份所有資料庫
mysqldump -u root -p --all-databases > all_databases_backup.sql
# 還原資料庫
mysql -u root -p database_name < backup.sql
|
設定遠端連線(選用)
若需要從外部連線到 MySQL,需要進行以下設定:
1. 修改 MySQL 設定檔
編輯 MySQL 設定檔:
1
| sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
|
找到 bind-address 設定,將其改為伺服器的 IP 位址或 0.0.0.0(允許所有 IP):
2. 重新啟動 MySQL
1
| sudo systemctl restart mysql
|
3. 設定防火牆
開放 MySQL 預設埠號 3306:
1
| sudo ufw allow 3306/tcp
|
注意:開放遠端連線會增加安全風險,請確保使用強密碼並考慮使用 SSL/TLS 加密連線。
故障排除
無法登入 MySQL
若出現 Access denied for user 'root'@'localhost' 錯誤,嘗試使用 sudo:
忘記 root 密碼
停止 MySQL 服務:
1
| sudo systemctl stop mysql
|
以跳過權限檢查模式啟動:
1
| sudo mysqld_safe --skip-grant-tables &
|
登入 MySQL 並重設密碼:
1
2
| FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼';
|
重新啟動 MySQL:
1
| sudo systemctl restart mysql
|
結論
本文介紹了在 Ubuntu 22.04 上安裝和設定 MySQL 資料庫的完整流程,包括:
- 安裝 MySQL Server
- 執行安全設定腳本
- 調整驗證方式
- 建立使用者與資料庫
- 常用管理指令
透過遵循這些步驟,您可以建立一個安全且功能完整的 MySQL 資料庫伺服器。建議定期更新系統和 MySQL,並做好資料備份以確保資料安全。
參考資源