Migrate MySQL database từ EC2 sang RDS

2020.06.04

Chào các bạn. Ở blog lần này mình sẽ giới thiệu cách di chuyển (migrate) một MySQL database được host bởi EC2 (Amazon Elastic Compute Cloud) sang Amazon RDS (Amazon Relational Database Service). Cụ thể hơn, trong bài viết mình sẽ nói về việc di chuyển MySQL database của 1 LAMP Web Server trên Amazon Linux 2 sang RDS.

Mục đích

Trong hầu hết các trường hợp thì bạn sẽ có lợi trong việc sử dụng RDS cho database của bạn thay vì EC2. Một trong những lý do quan trọng nhất đó là Amazon RDS cung cấp cơ sở dữ liệu, cập nhật các phiên bản và bảo mật một cách tự động. Amazon sẽ thay bạn làm những việc đó. Bạn sẽ có thể tập trung vào công việc của mình hơn là quan tâm tới những vấn đề đó.

Chuẩn bị

Chúng ta cần có 1 LAMP Web server trên EC2 và host 1 trang WordPress Blog với Amazon Linux. Các bạn có thể tham khảo cách tạo ở tutorial trên trang chủ của AWS tại  đường linh sau:

  • Cài đặt 1 LAMP Web Server trên Amazon Linux 2:

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html

  • Host 1 WordPress Blog trên server vừa tạo:

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hosting-wordpress.html

  • Làm đúng các bước trong hướng dẫn và không phát sinh lỗi, chúng ta sẽ có 1 trang WordPress được host trên EC2 server với giao diện như sau:

Trang Homepage

Trang Admin

1. Tạo 1 AWS RDS Instance

Trước khi tạo RDS Instance, cần chú ý tới Region, vì chúng ta nên tạo RDS Instance trong cùng Region với EC2 Instance để có được kết nối với độ trễ thấp.

Trong Dashboard RDS ấn Create database, chọn Engine options MySQL

Kéo xuống phần Settings phía dưới, thiết lập và take note các mục Master username, Master password cho thao tác migration phía sau.

Ấn Create database sau khi hoàn thành thiết lập, chờ vài phút để RDS Instance được khởi tạo.

Sau khi RDS Instance được khởi tạo xong, thiết lập thêm kết nối MYSQL/Aurora tại Security Group của RDS để EC2 Instance có thể kết nối được với RDS (Tại Source, chọn Security group đang gắn với EC2 Instance)

2. Tạo 1 database bên trong AWS RDS Instance

1.SSH tới EC2

2.Kết nối tới RDS Instance bằng câu lệnh dưới đây (nếu làm bước trên, bạn có thể kết nối từ EC2 tới RDS Instance bình thường)

$mysql -u admin -p -h xxxxxxx.us-east-2.rds.amazonaws.com

Với xxxxxxx.us-east-2.rds.amazonaws.com là rds endpoint. Bạn có thể copy từ AWS Management Console.

3.Tạo 1 database theo như câu lệnh dưới đây:

CREATE USER `wp-user` IDENTIFIED BY `wp-password`;
CREATE DATABASE `wordpress-db`;
GRANT ALL PRIVILEGES ON `wordpress-db`.* TO `wp-user`;
FLUSH PRIVILEGES;
exit

Chú ý thay thế phù hợp với database của bạn:

  • wp-user: Tên user
  • wp-password: Password
  • wordpress-db: Tên database

3. Tạo 1 bản backup database trên EC2

SSH tới EC2

$mysqldump -u wp-user -p wordpress-db > wordpress.sql

Chú ý thay thế phù hợp với database của bạn:

  • wp-user: Tên user
  • wordpress-db: Tên database
  • wordpress.sql: Tên bản backup database

4. Migrate database sang RDS Instance

Sử dụng câu lệnh dưới đây

$mysql -u rds-user -p -h xxxxxxx.us-east-2.rds.amazonaws.com rds-db < wordpress.sql

Chú ý thay thế phù hợp với database của bạn:

  • rds-user: Tên username rds database đã tạo từ bước 1
  • xxxxxxx.us-east-2.rds.amazonaws.com: rds endpoint
  • rds-db: Tên database đã tạo ở bước 2
  • wordpress.sql: Tên bản backup database đã tạo ở bước 3

5. Thiết lập file wp-config.php

#vim /var/www/html/wp-config.php

Thay thế những thông tin sau

define (‘DB_NAME’, ‘wordpress-db’) => define (‘DB_NAME’, ‘rds-db’)
define (‘DB_USER’, ‘wp-user’) => define (‘DB_USER’, ‘rds-user’)
define (‘DB_PASSWORD’, ‘wp-password’) => define (‘DB_PASSWORD’, ‘rds-password’)
define (‘DB_HOST’, ‘localhost’) => define (‘DB_HOST’, ‘xxxxxxx.us-east-2.rds.amazonaws.com’)

Chú ý thay thế phù hợp với database của bạn:

  • wordpress-db, rds-db: Tên wordpress database và tên rds databse
  • wp-user, rds-user: Tên wordpress username và rds username
  • wp-password, rds-password: Password wordpress và rds
  • xxxxxxx.us-east-2.rds.amazonaws.com: RDS Endpoint

Sau bước này, để kiểm tra bạn có thể mở lại trang WordPress của bạn. Nếu bạn có thể truy cập bình thường thì có nghĩa bạn đã thành công migrate database từ EC2 sang RDS.

6. Thiết lập trang phpMyAdmin

Cuối cùng, bạn có thể thiết lập trang phpMyAdmin chỉ tới database mới trên rds của bạn bằng cách như sau:

Thay đổi thiết lập trong file config.inc.php dưới quyền root

#vim /var/www/html/phpMyAdmin/config.inc.php

Thêm dòng sau đây vào sau phần config host

$i++;
$cfg['Servers'][$i]['host'] = 'xxxxxxx.us-east-2.rds.amazonaws.com';
$cfg['Servers'][$i]['port'] = '3306';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';

Với xxxxxxx.us-east-2.rds.amazonaws.com là rds endpoint

Vào lại trang phpMyAdmin của bạn với username và password của RDS Kết quả như sau:

Có thể thấy phần dữ liệu ứng với trang Homepage ban đầu đã được migrate sang rds database.

Chúc bạn thành công!