สถานการณ์ที่ต้องย้าย Data Directory
- Disk เต็ม ต้องย้ายไป Volume ใหญ่กว่า
- Security: แยก Data ออกจาก Root Partition
- Performance: ใช้ Disk/SSD เร็วกว่าเฉพาะสำหรับ Database
ข้อกำหนดก่อนเริ่ม
- Ubuntu + User สามารถ sudo
- MySQL ติดตั้งและทำงานปกติ
- Volume/Location ใหม่พร้อมใช้งาน (ตัวอย่าง:
/mnt/data_vol/mysql)
ขั้นตอนการย้าย
1. หา Data Directory ปัจจุบัน
$ mysql -u root -p mysql> SELECT @@datadir; +-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+
2. หยุด MySQL Service
$ sudo systemctl stop mysql $ sudo systemctl status mysql # ต้องเป็น inactive (dead)
3. คัดลอกข้อมูลไป Location ใหม่ (rsync)
$ sudo rsync -av /var/lib/mysql /mnt/data_vol/ # -a: archive (preserve permissions, ownership, timestamps) # -v: verbose
4. Backup ไดเรกทอรีเก่า (Rename)
$ sudo mv /var/lib/mysql /var/lib/mysql_backup
5. แก้ไข Config MySQL (mysqld.cnf)
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf # หาบรรทัด datadir แก้เป็น: datadir = /mnt/data_vol/mysql/
6. แก้ไข AppArmor Alias (Ubuntu Security)
$ sudo vi /etc/apparmor.d/tunables/alias # เพิ่มบรรทัดท้ายไฟล์: alias /var/lib/mysql/ -> /mnt/data_vol/mysql/
$ sudo systemctl restart apparmor
7. สร้าง Directory Stub (สำหรับ Scripts ที่ Hardcode Path)
$ sudo mkdir -p /var/lib/mysql/mysql
8. เริ่ม MySQL และตรวจสอบ
$ sudo systemctl start mysql $ sudo systemctl status mysql # ต้องเป็น active (running)
$ mysql -u root -p -e "SELECT @@datadir;" +----------------------+ | @@datadir | +----------------------+ | /mnt/data_vol/mysql/ | +----------------------+
9. ลบ Backup เก่า (หลังยืนยันทำงานปกติ)
$ sudo rm -rf /var/lib/mysql_backup
ข้อควรระวัง
- SELinux (RHEL/CentOS): ต้องตั้ง Context:
semanage fcontext -a -t mysqld_db_t "/mnt/data_vol/mysql(/.*)?"+restorecon -Rv /mnt/data_vol/mysql - Permissions: Owner:Group ต้องเป็น
mysql:mysql(rsync -a รักษาไว้) - InnoDB Log Files: ต้องคัดลอก ib_logfile* ด้วย (rsync -a ทำได้)
- Test First: ทดสอบบน Non-Production ก่อน
สรุป
ย้าย MySQL Data Directory ได้ด้วย: Stop Service → Rsync → Update Config → Update AppArmor/SELinux → Restart → Verify → Cleanup