當作業系統與 MySQL 共用機械硬碟時,磁碟 I/O 爭搶常成為效能瓶頸。將 MySQL 資料目錄遷移至獨立 SSD 能顯著降低延遲、提升吞吐。本文記錄在 Linux 下以 /dev/sdb 為例的完整遷移步驟。
/dev/sdb/var/lib/mysqlfdisk /dev/sdb
# 依序輸入:n (新分區) → p (主分區) → 1 (分區號) → Enter (起始柱面) → Enter (結束柱面,用全盤) → w (寫入)
產生 /dev/sdb1。
mkfs.ext4 /dev/sdb1
mkdir /ssd
mount /dev/sdb1 /ssd
echo '/dev/sdb1 /ssd ext4 defaults 0 0' >> /etc/fstab
# 停止服務
systemctl stop mysqld
# 若有 Web 服務同機器,建議一併停止
systemctl stop httpd nginx
# 完整複製(保留權限、屬性)
cp -Rp /var/lib/mysql /ssd/
# 重命名舊目錄備份
mv /var/lib/mysql /var/lib/mysql-backup
# 建立符號連結指向新位置
ln -s /ssd/mysql /var/lib/mysql
systemctl start mysqld
systemctl start httpd nginx
# 確認資料目錄生效
mysql -e "SHOW VARIABLES LIKE 'datadir';"
# 應顯示 /ssd/mysql
restorecon -Rv /ssd/mysql 或調整 mysqld_db_t 上下文,否則啟動失敗。/etc/apparmor.d/usr.sbin.mysqld 加入 /ssd/mysql/ r, /ssd/mysql/** rwk, 並重載 apparmor。cp -Rp 保留擁有者 mysql:mysql,若遺失請 chown -R mysql:mysql /ssd/mysql。/var/lib/mysql-backup。SSD 隨機讀寫 IOPS 通常為機械硬碟 50-100 倍,對於高併發 OLTP 負載(大量小塊隨機 I/O),遷移後 innodb_io_capacity 可適當調大(如 2000-5000),查詢延遲常降低 60-80%。
以符號連結方式遷移風險最低、回滾最快,是生產環境首選方案。