Hướng Dẫn Migrate VPS Sang Provider Mới Không Downtime 2026 - Chuyển Dữ Liệu An Toàn

📅 05/2026 · ⏱ 12 phút đọc · 🏷 Hướng Dẫn

VPS hiện tại chậm, đắt, hoặc support kém? Bạn muốn chuyển sang provider tốt hơn nhưng sợ downtime, mất dữ liệu, khách hàng không truy cập được? Bài viết này hướng dẫn migrate VPS không downtime, từng bước một, áp dụng cho WordPress, PHP, Node.js, database.

🔄 Nguyên tắc: Set up VPS mới hoàn chỉnh trước → đồng bộ dữ liệu → test kỹ → đổi DNS. Website vẫn chạy trên VPS cũ trong suốt quá trình. Chỉ khi DNS propagate xong (~5-30 phút) mới tắt VPS cũ. Tổng downtime: 0 phút.

Bước 1: Chuẩn Bị VPS Mới

# Trên VPS mới (TrumVPS)
apt update && apt upgrade -y
apt install nginx php8.2-fpm mariadb-server redis-server certbot python3-certbot-nginx -y

Cài đặt cùng stack với VPS cũ (cùng version Nginx, PHP, MySQL) để tránh lỗi tương thích. Ghi lại version VPS cũ:

# Trên VPS cũ
nginx -v && php -v && mysql --version

Bước 2: Đồng Bộ File Website

Dùng rsync (nhanh nhất)

# Từ VPS cũ, đồng bộ sang VPS mới
rsync -avzP -e "ssh -p 22" /var/www/yourdomain.com/ root@NEW_IP:/var/www/yourdomain.com/

Rsync chỉ copy file thay đổi — lần đầu copy toàn bộ, lần sau chỉ copy delta. Với 10GB data, lần đầu ~10-30 phút, lần sync cuối ~1-2 phút.

Dùng tar + scp (nếu không có rsync)

tar -czf - /var/www/yourdomain.com | ssh root@NEW_IP "tar -xzf - -C /"

Bước 3: Đồng Bộ Database

# Trên VPS cũ — dump database
mysqldump -u root -p --all-databases > /tmp/all-db.sql

# Copy sang VPS mới
scp /tmp/all-db.sql root@NEW_IP:/tmp/

# Trên VPS mới — import
mysql -u root -p < /tmp/all-db.sql
# Tạo lại user + grant permissions nếu cần

Với database đang chạy (có user truy cập), dùng mysqldump --single-transaction để không lock bảng.

Bước 4: Đồng Bộ Cấu Hình Server

# Copy Nginx config
rsync -avz /etc/nginx/ root@NEW_IP:/etc/nginx/

# Copy PHP config
rsync -avz /etc/php/ root@NEW_IP:/etc/php/

# Copy cron jobs
crontab -l > /tmp/crontab.txt
scp /tmp/crontab.txt root@NEW_IP:/tmp/
ssh root@NEW_IP "crontab /tmp/crontab.txt"

# Copy SSL certificates
rsync -avz /etc/letsencrypt/ root@NEW_IP:/etc/letsencrypt/

Bước 5: Test VPS Mới

Trước khi chuyển DNS, test VPS mới bằng cách thêm domain vào file hosts local:

# Trên máy tính của bạn (Windows: C:\Windows\System32\drivers\etc\hosts, Mac/Linux: /etc/hosts)
1.2.3.4 yourdomain.com

Mở browser → https://yourdomain.com (bỏ qua cảnh báo SSL nếu có) → kiểm tra mọi thứ hoạt động. Test: đăng nhập admin, đặt hàng, form liên hệ, upload file... Đảm bảo không có lỗi gì.

Bước 6: Chuyển DNS — Bước Quan Trọng Nhất

  1. Giảm TTL DNS xuống 300 (5 phút) ít nhất 24h trước khi migrate, để DNS propagate nhanh
  2. Sync dữ liệu lần cuối (rsync delta + mysqldump cuối)
  3. Đổi DNS A record về IP VPS mới
  4. Đợi 5-30 phút cho DNS propagate
  5. Kiểm tra: DNS đã trỏ về IP mới chưa: dig yourdomain.com
  6. Giữ VPS cũ chạy thêm 24-48h để đảm bảo không mất traffic
  7. Tắt VPS cũ sau khi xác nhận mọi thứ OK
⚠️ Quan trọng: Sau khi đổi DNS, VPS cũ vẫn nhận traffic trong 5-30 phút (do DNS cache). Nếu database bị ghi dữ liệu mới trên VPS cũ trong thời gian này, bạn sẽ mất dữ liệu đó. Giải pháp: tắt write trên VPS cũ sau khi sync cuối (đặt WordPress về maintenance mode, tắt MySQL write).

WordPress: Migrate Đặc Biệt

Nếu chuyển domain hoặc IP, cần update WordPress:

# Update site URL trong database
mysql -u root -p wordpress
UPDATE wp_options SET option_value='https://yourdomain.com' WHERE option_name='siteurl';
UPDATE wp_options SET option_value='https://yourdomain.com' WHERE option_name='home';
# Hoặc dùng WP-CLI
wp search-replace 'http://old-domain.com' 'https://new-domain.com'

Bước 7: Timeline Migrate Chuẩn — Timeline 48 Giờ

Dưới đây là timeline migrate VPS KHÔNG downtime được các sysadmin chuyên nghiệp sử dụng:

Thời điểmCông việcAi làmThời gian
T-48hGiảm TTL DNS xuống 300s, thuê VPS mớiAdmin30 phút
T-24hCài stack trên VPS mới, rsync lần đầuAdmin1-2 giờ
T-12hImport database, cấu hình Nginx/PHPAdmin1 giờ
T-6hTest VPS mới qua file hosts, sửa lỗiAdmin + Dev2-3 giờ
T-2hThông báo team/khách hàng về migratePM/Support15 phút
T-30minBật maintenance mode, sync database cuốiAdmin5-10 phút
T-0Đổi DNS → IP mớiAdmin1 phút
T+5minKiểm tra DNS propagate: dig +short yourdomain.comAdmin1 phút
T+30minTắt maintenance mode trên VPS mới, test toàn bộAdmin + Dev30 phút
T+24hTheo dõi log lỗi, kiểm tra backup chạy đúngAdmin30 phút
T+48hXác nhận mọi thứ OK, tắt VPS cũAdmin15 phút

Bước 8: Database Replication — Đồng Bộ Thời Gian Thực

Với website có nhiều user đang hoạt động, sync database 1 lần chưa đủ. Dùng MySQL Replication để đồng bộ liên tục từ VPS cũ → VPS mới:

# Trên VPS cũ (Master) - /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_database
# Tạo user replication
CREATE USER 'repl'@'NEW_VPS_IP' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'NEW_VPS_IP';
FLUSH PRIVILEGES;
# Trên VPS mới (Slave) - /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
read_only = 1  # Không cho ghi trực tiếp
# Import database từ master, rồi:
CHANGE MASTER TO
  MASTER_HOST='OLD_VPS_IP',
  MASTER_USER='repl',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=12345;
START SLAVE;
SHOW SLAVE STATUS\G  # Kiểm tra Seconds_Behind_Master = 0

Với replication, database VPS mới luôn đồng bộ với VPS cũ. Khi đổi DNS, chỉ cần: dừng slave → tắt read_only → promote làm master mới. Downtime: 0 giây.

Bước 9: Migrate Email Server

Nếu VPS cũ đang chạy mail server (Postfix/Dovecot), cần migrate email data:

# Sync email data
rsync -avz /var/mail/ root@NEW_IP:/var/mail/
rsync -avz /etc/postfix/ root@NEW_IP:/etc/postfix/
rsync -avz /etc/dovecot/ root@NEW_IP:/etc/dovecot/
# Đừng quên update MX record trong DNS!

Lưu ý: Email rất nhạy cảm với downtime. Nên set up VPS mới làm MX backup (priority thấp hơn) trong 24-48h để không mất email nào trong quá trình chuyển DNS.

Các Lỗi Thường Gặp & Cách Khắc Phục

1. Website Hiển Thị Sai Sau Migrate

2. SSL Không Hoạt Động

3. Email Không Gửi/Nhận Được

4. Database Import Bị Lỗi

Migration Checklist — Đừng Bỏ Sót Bước Nào

  1. ✅ Ghi lại toàn bộ version: OS, Nginx, PHP, MySQL, Redis, Node.js...
  2. ✅ Backup toàn bộ VPS cũ (snapshot hoặc tar toàn bộ)
  3. ✅ Giảm TTL DNS về 300s, đợi 24h cho propagate
  4. ✅ Cài đúng stack trên VPS mới
  5. ✅ Rsync file code
  6. ✅ Dump & import database
  7. ✅ Copy cấu hình Nginx, PHP, Cron, SSL
  8. ✅ Test qua file hosts local
  9. ✅ Bật maintenance mode trên VPS cũ
  10. ✅ Sync database lần cuối
  11. ✅ Đổi DNS → IP mới
  12. ✅ Theo dõi DNS propagate (dùng whatsmyDNS.net)
  13. ✅ Tắt maintenance mode, test toàn bộ
  14. ✅ Cập nhật SPF/DKIM/DMARC nếu có mail server
  15. ✅ Theo dõi 48h, giữ VPS cũ chạy
  16. ✅ Tắt VPS cũ sau khi xác nhận OK

Câu Hỏi Thường Gặp (FAQ)

Migrate VPS mất bao lâu?

Với website nhỏ (1-2GB data): 2-4 giờ. Website lớn (10-50GB data): 1-2 ngày (chủ yếu do rsync lần đầu). Database >10GB: dùng replication để tránh downtime khi dump. Tổng downtime thực tế: 0 phút (nếu làm đúng).

Có cần thuê người migrate không?

Nếu bạn hiểu Linux cơ bản và làm theo hướng dẫn này → tự làm được. Nếu website có revenue (bán hàng, SaaS) hoặc database >5GB → nên thuê sysadmin (500K-1.5M/lần) để an toàn. TrumVPS có team hỗ trợ migrate miễn phí nếu bạn chuyển về.

Provider cũ có hỗ trợ migrate đi không?

Thường là KHÔNG (họ không muốn mất khách). Bạn phải tự làm hoặc nhờ provider mới. TrumVPS hỗ trợ migrate vào miễn phí — ngược lại, nhiều provider không hỗ trợ migrate ra.

Làm sao để biết DNS đã propagate xong?

Dùng WhatsMyDNS.net — check A record của bạn từ 20+ locations toàn cầu. Khi tất cả đều trỏ về IP mới → propagate hoàn tất. Thường mất 5-30 phút với TTL 300s.

Migrate Về TrumVPS — Nhanh Hơn, Rẻ Hơn

NVMe SSD, CPU Platinum, test trước khi mua. Team hỗ trợ migrate miễn phí.

🚀 Chuyển Về TrumVPS