Chuyển hosting WordPress bằng SSH: đặc biệt phù hợp với website dung lượng lớn

Trong bài viết này tôi sẽ hướng dẫn các bạn cách chuyển hosting bằng SSH. Nó là hình thức chuyển hosting phức tạp nhất, yêu cầu tìm hiểu nhiều (hơn cả kiểu chuyển hosting thủ công) nhưng trong nhiều trường hợp cho tốc độ tốt nhất.

Video giới thiệu:

Ưu điểm của SSH như đã nói là tốc độ cao, bảo mật, tiết kiệm chi phí mua các plugin chuyển hosting vốn có giá không hề rẻ (ví dụ All in one Migration có thể khiến bạn phải rút ví gần 100$ với kiểu chuyển thông qua cloud). Thời gian downtime cũng ngắn hơn, nếu làm khéo bạn chỉ mất 5 – 10 phút gián đoạn ngay cả trên các website cực lớn.

Tài nguyên hữu ích: có thể bạn muốn tham khảo bài viết về 25 câu lệnh SSH thường dùng cho WordPress để biết ý nghĩa của các lệnh.

Để demo tôi sẽ sử dụng website kiencang.net và chuyển toàn bộ website này về tên miền demo có sub là demo.ducanhplus.com ở IP cũng như máy chủ khác. Tôi test trên môi trường VPS, bất cứ môi trường hosting nào khác mà có thể dùng SSH thì đều có thể sử dụng được.

PS: tên miền demo ducanhplus tôi sẽ không dùng nữa sau khi test xong, do vậy bạn có thể không truy cập được tên miền demo khi đọc bài viết này.

Các thông tin, công cụ cần thiết:

  • IP, username, pass của VPS cũ;
  • IP, username, pass của VPS mới;
  • Phần mềm puTTY để thao tác SSH được dễ dàng;
  • Ổ cứng ở cả host mới và host cũ có không gian dư đủ để phục vụ cho việc chuyển host.

Các thông tin về IP, username, pass của VPS thường bạn sẽ nhận được khi khởi tạo VPS. IP lúc nào cũng dễ biết, username thường là root, còn pass đôi khi rất dễ thấy như ở Vultr, còn DigitalOcean bạn phải ghi lại thông tin đó cho dễ tìm.

Xem thêm: các công cụ hỗ trợ việc chuyển hosting nhanh và dễ hơn.


Xác định rõ cấu trúc thư mục của website

Trước khi can thiệp bằng SSH, bạn cần nắm rõ cấu trúc thư mục của website, bởi sai lầm khi thao tác với SSH nhiều khi không nằm ở câu lệnh mà do chỉ định sai thư mục.

Cấu trúc chúng thường như thế này: Thư mục A > Thư mục website (tên website) > Thư mục B > wp-content

Để biết cấu trúc thư mục ở VPS, lúc đầu bạn nên đăng nhập vào FTP dưới user root, và truy cập vào website rồi lên, xuống một, hai cấp để xem họ tổ chức nó như thế nào.

Như trường hợp của tôi, thư mục A (mục ngay trên toàn bộ website) là home chứa toàn bộ các thư mục website tương ứng, thư mục B (ngay trên thư mục wp-content) là public_html (tôi dùng CyberPanel).

Trong bài viết này, thư mục website chứa thư mục public_html được tôi gọi là thư mục gốc của website.

Các thông tin như home, public_html mỗi một control panel có thể khác nhau, bạn cần nắm rõ thì mới thao tác thành công được.

Bước 1: tạo tên miền demo

Sử dụng Clouflare để trỏ DNS, sau đó bạn nhập tên miền demo vào host mới qua control panel. Tạo https cho tên miền demo.

Bước 2: tạo file nén cho toàn bộ website (chưa bao gồm database) trên host cũ

Lưu ý: trước khi nén bạn nên xóa các thông tin không cần thiết của website, như các file backup do plugin backup (All in one, UpdraftPlus) tạo ra (nếu bạn đang dùng), nó có thể có dung lượng lên đến hàng GB.

Sử dụng PuTTY đăng nhập vào VPS, sau đó bạn đi đến thư mục gốc của website- rồi sử dụng câu lệnh SSH sau để tạo file nén zip cho cả website:

zip -r ten-file-muon-dat.zip ten-thu-muc-web-chua-website

Với trường hợp của tôi là:

zip -r kiencang.zip public_html

Bạn Quân trong phần bình luận có nói để bảo mật hơn, chúng ta nên dùng câu lệnh sau, thay cho lệnh trên, anh chị em lưu ý nhé:

zip -rP my-passwd file.zip filename_folder

hoặc

zip -re my-passwd file.zip filename_folder

Tôi nhận thấy CPU của host cũ sẽ tăng trong quá trình này, trong khi RAM thì hầu như không đổi.

Quá trình tạo file zip:

quá trình tạo file zip

Để kiểm tra file zip có được tạo thành công hay không bạn sử dụng câu lệnh ls (bạn có thể thấy chữ màu đỏ kiencang.zip, cùng cấp thư mục với public_html).

file zip có tồn tại

Với 7 – 8 GB dữ liệu, khoảng 5 – 10 phút lệnh này đã tạo xong file zip.

Bước 3: xuất cơ sở dữ liệu của website

Phần trên có tất cả dữ liệu của website (ảnh, plugin, theme) nhưng chưa có database. Để xuất database, tại thư mục gốc của website bạn dùng lệnh sau:

mysqldump --add-drop-table -h localhost -u usr -p dbn > kiencang.sql

Trong đó usruser của database, còn dbntên của bảng database. Ngoài ra bạn cần biết cả mật khẩu của nó nữa.

Bài viết xuất database website WordPress bằng SSH sẽ hướng dẫn bạn chi tiết.

Một cải tiến mới so với bài viết ở link trên là tôi sẽ chỉ bạn cách đọc nội dung file wp-config.php thông qua SSH thay vì phải sử dụng FTP như cách cũ.

Cách làm, bạn đi vào thư mục chứa wp-config.php, trường hợp của tôi là public_html:

cd public_html

Mẹo: Sử dụng câu lệnh cd để vào sâu thư mục và cd .. để lên một cấp thư mục.

Kỹ hơn thì bạn dùng câu lệnh ls để biết file wp-config.php có nằm trong thư mục mà bạn nghĩ nó thuộc về hay không.

ls
kiểm tra wp-config

Tiếp đó bạn gõ lệnh sau để xem nội dung:

cat wp-config.php

Bạn tìm đến các dòng này:

<!-- wp:paragraph -->
<p>/** The name of the database for WordPress */<br>define( 'DB_NAME', 'dbn123456789' );</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>/** MySQL database username */<br>define( 'DB_USER', 'usr123456789' );</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>/** MySQL database password */<br>define( 'DB_PASSWORD', 'pa123456789' );</p>
<!-- /wp:paragraph -->

Sử dụng các thông tin trên để xuất database:

mysqldump --add-drop-table -h localhost -u usr123456789 -p dbn123456789 > kiencang.sql

Nếu nhập đúng nó sẽ hỏi mật khẩu, và bạn nhập nốt thông tin: pa123456789 vào là xong.

Tất cả user, tên bảng cơ sở dữ liệu, pass trên là demo, còn trên thực tế chuỗi này sẽ khó gõ hơn, như kiểu 12werHJKidhfKOL chẳng hạn, nên bạn cần nhìn kỹ để gõ cho chính xác, đỡ phải gõ lại nhiều lần.

Kiểm tra đã tạo thành công chưa, bạn lại dùng câu lệnh ls:

tạo database thành công
Bạn có thể thấy file kiencang.sql đã được tạo

Bước 4: chuyển file zip và database sang host mới

Chúng ta sẽ sử dụng câu lệnh SSH để chuyển file, và đây là phần giúp cho SSH có tốc độ nhanh hơn đáng kể so với các plugin chuyển host khác, với tốc độ tốt hơn từ 10 – 20 lần.

Bạn cần thoát đăng nhập khỏi host cũ, và chuyển đăng nhập bằng SSH trên host mới (cũng bằng PuTTY). Tại thư mục root của host mới, bạn gõ câu lệnh sau để chuyển file zip:

scp -r root@206.189.37.81:/home/kiencang.net/kiencang.zip /home/demo.ducanhplus.com/
  • Cái 206.189.37.81 chính là IP của host cũ;
  • Nếu user của VPS không phải là root thì bạn thay cái khác tương ứng vào;
  • /home/kiencang.net/kiencang.zip chính là đường dẫn file nén zip cần chuyển đi;
  • /home/demo.ducanhplus.com là đường dẫn của địa chỉ cần chuyển đến (bạn đã đăng nhập).

Nhập xong nó sẽ hỏi bạn pass vào VPS của host cũ.

Tốc độ chuyển rất nhanh, khoảng 7G dữ liệu có mất hơn 1 phút để chuyển (tốc độ khoảng 100MB/s – cùng location, còn khi VPS ở hai vị trí khác nhau như một cái ở Sing, một cái ở Nhật tôi test thấy tốc độ khoảng 30MB/s).

chuyển file zip

Tiếp theo bạn chuyển file sql:

scp -r root@206.189.37.81:/home/kiencang.net/kiencang.sql /home/demo.ducanhplus.com/

Để chắc chắn tôi vào trang demo và dùng câu lệnh ls để kiểm tra xem các file đã chuyển đến hết chưa:

kiểm tra trang đích

Giải nén file zip của website, bạn vào thư mục gốc của website trên host mới, rồi gõ lệnh sau:

unzip kiencang.zip

Lưu ý nếu bạn muốn giải nén file zip độ 7GB dữ liệu, thì host của bạn cần thuê phải có dung lượng ít nhất 15GB, còn dông dài thì phải 20GB. Thời gian giải nén cũng tương tự thời gian nén.


Bây giờ tới phần quan trọng là đẩy cơ sở dữ liệu lên host mới.

Trước hết bạn cần tạo database cho website ở host mới & nhớ ba thông tin về tên người dùng, tên bảng, cùng mật khẩu.

OK, giờ là câu lệnh nhập database:

mysql -u usr -p dbn < kiencang.sql
  • usr: tên người dùng database của website trên host mới;
  • dbn: tên bảng databse của website trên host mới;
  • enter câu lệnh trên, rồi bạn nhập pass database của website trên host mới.

Lệnh nhập database rất giống lệnh xuất, chỉ khác dấu > được thay bằng dấu <

Lúc này vào website bạn sẽ thấy thông báo thế này:

lỗi kết nối database

Đây là lỗi kết nối database, do file wp-config.php vẫn sử dụng thông tin từ database ở host cũ, bạn truy cập vào wp-config.php trên host mới và chỉnh lại tương ứng với thông tin trên host mới của bạn là ổn.

Phần bạn cần chỉnh nằm ở đây:

/** The name of the database for WordPress */
define( 'DB_NAME', 'dbn_cua_ban' );

/** MySQL database username */
define( 'DB_USER', 'usr_cua-ban' );

/** MySQL database password */
define( 'DB_PASSWORD', 'pa_cua_ban' );

Thay các thông tin tương ứng của bạn vào, rồi nhất lưu/save.

Nên sử dụng FTP hoặc qua giao diện của control panel để chỉnh, SSH cũng chỉnh được file nhưng tôi thấy không tiện lắm.

Sau đó bạn đăng nhập vào database của host mới, vào bảng wp_options và đổi lại tên site_urlhome tương ứng với tên miền demo (nếu đổi host giữ nguyên tên miền thì phần này bạn không cần sửa).

OK, như vậy là xong, bạn đã có website mới sao nguyên trên tên miền demo.

sao chép website thành công

Cuối cùng, bạn xóa các file .zip & .sql trên cả host mới và host cũ, vừa để bảo mật cũng như đỡ tốn dữ liệu lưu trữ không cần thiết.

Trong bài viết sắp tới, chúng ta sẽ cùng tìm hiểu cách hạn chế tối đa thời gian downtime khi chuyển hosting bằng SSH.

2 thoughts on “Chuyển hosting WordPress bằng SSH: đặc biệt phù hợp với website dung lượng lớn”

  1. Không nên sử dụng zip -r. Về bảo mật bác nên sử dụng thêm option là `e hoặc P` để an toàn hơn.

    VD:
    – zip -rP my-passwd file.zip filename_folder
    – zip -re my-passwd file.zip filename_folder

    Reply

Leave a Comment