為何選擇源碼編譯?
- 版本可控,避免套件管理器版本滯後
- 編譯參數可定製(字符集、儲存引擎、安裝路徑)
- 深度理解元件關係,故障排查更得心應手
環境準備
# 安裝核心依賴
sudo apt-get update
sudo apt-get install -y build-essential cmake libaio1 libaio-dev libncurses5-dev
# 建立專用使用者/群組(無登入權限,提升安全性)
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false -M mysql
下載與解壓
cd /usr/local
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
tar xzf mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
ln -s mysql-5.6.51-linux-glibc2.12-x86_64 mysql
cd mysql
資料目錄初始化(關鍵步驟)
# 權限設定:先全給 root,再把 data 給 mysql
sudo chown -R root:mysql .
sudo chown -R mysql:mysql data
# 初始化系統表(5.6 使用 mysql_install_db)
sudo scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
# 還原權限:程式檔給 root,資料目錄給 mysql
sudo chown -R root:mysql .
sudo chown -R mysql:mysql data
啟動與驗證
# 啟動
sudo bin/mysqld_safe --user=mysql &
# 驗證連線
bin/mysqladmin version
bin/mysqlshow
bin/mysql -e "SELECT User,Host,plugin FROM mysql.user"
安全加固四步驟
1. 設定 root 密碼(三種方式擇一)
-- 方式 1:SET PASSWORD(推薦,逐主機設定)
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('StrongPass#2024');
SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('StrongPass#2024');
SET PASSWORD FOR 'root'@'::1' = PASSWORD('StrongPass#2024');
FLUSH PRIVILEGES;
-- 方式 2:UPDATE mysql.user(一次搞定所有 root)
UPDATE mysql.user SET Password=PASSWORD('StrongPass#2024') WHERE User='root';
FLUSH PRIVILEGES;
2. 清理匿名帳號
DROP USER ''@'localhost';
DROP USER ''@'主機名';
FLUSH PRIVILEGES;
3. 移除測試資料庫
DELETE FROM mysql.db WHERE Db LIKE 'test%';
DROP DATABASE test;
FLUSH PRIVILEGES;
4. 限制遠程存取(如非必要)
-- 僅允許本地連線
UPDATE mysql.user SET Host='localhost' WHERE User='root' AND Host='%';
FLUSH PRIVILEGES;
常見問題排查
Can't connect to local MySQL server through socket → 建立 socket 目錄、軟連結、配置 my.cnf 指定 socket 路徑
- libaio 缺失 →
apt-get install libaio1
- 權限拒絕 → 檢查 data 目錄擁有者是否為 mysql 使用者