Published on

Sử dụng MySQL server miễn phí với TiDB cloud

Authors

[Feb/2024] Bài viết này là bài đầu tiên mình viết trực tiếp bằng Markdown và deploy lên Cloudflare Pages. Mình cũng dự định đi đến đảo Phú Quý, tỉnh Bình Thuận vào cuối tháng sau. Xin phép đổi hình đại diện để có không khí.

Phú Quý, Việt Nam
Credit: @Thalia Tran 🔗 for a great photo.


Trong bài viết giới thiệu về máy chủ EC2 miễn phí để chạy WordPress, mình có giới thiệu qua một cấu hình server EC2 miễn phí để bạn có thể chạy website WordPress của bạn. Đây là một loại hình dịch vụ tuyệt vời để bạn có thể học cách sử dụng server Linux và làm quen với AWS.

Tuy nhiên, cấu hình của server t4g.small này khá hạn chế, chỉ có 2GB RAM nên nếu cài đặt nhiều phần mềm kèm theo như MySQL database, Redis, Apache/Nginx sẽ dễ dẫn đến tình trạng thiếu RAM, nhất là đối với database.

Bài viết này cũng hướng đến các bạn sinh viên/developer đang cần một database server để sử dụng chung cho các dự án dùng MySQL. Hoặc đơn giản là cần một server ổn định để học về MySQL.

Khó khăn khi sử dụng remote database server

Thông thường trong một dự án yêu cầu độ ổn định cao, chúng ta thường chia ra làm hai loại server khác nhau, một là application server và loại còn lại là database server.

Mô hình 2 lớp application server và database server

Ảnh DigitalOcean.com

Để hiểu hơn về database server nằm riêng với application server, các bạn có thể đọc qua bài viết Cấu hình remote database cho WordPress, để có cái nhìn toàn diện hơn về mô hình này. Mình nhắc đến bài viết cũ để muốn bạn biết được sự phức tạp khi cài đặt mà bạn có thể thấy trong video, để trong bài viết mới này chúng ta sẽ cùng khám một cách cài đặt đơn giản hơn, thậm chí là miễn phí.


TiDB Cloud: Cloud server tương thích MySQL

Trong một lần tìm kiếm các database engine hỗ trợ scaling cho Kubernetes, Tuấn tìm thấy một engine khá thú vị là Vitess 🔗. Nhưng không dừng lại ở đó, người ta đưa ra thêm một bài viết so sánh giữa Vitess và TiDB 🔗, một giải pháp về cơ sở dữ liệu có thể scaling dễ dàng, rất hứa hẹn cho các dự án sắp tới.

Đặc biệt hơn nữa, TiDB tương thích với MySQL và hỗ trợ cloud service, thậm chí có gói miễn phí. Đó chính là lí do mà mình muốn giới thiệu TiDB Cloud đến các bạn.

Bài viết này nhằm giới thiệu một option cho việc tối ưu chi phí sử dụng cloud service cho các website Wordpress. Vì vậy mức độ kĩ thuật trong bài viết sẽ không cao, mình sẽ không nhắc đến vấn đề scaling hay cài đặt trên Kubernetes.

TiDB là gì?

TiDB được giới thiệu là một giải pháp cơ sở dữ liệu mã nguồn mở của Pingcap. Thiết kế theo dạng NewSQL, kết hợp tốc độ/khả năng mở rộng của NoSQL cũng như tính ACID của các cơ sở dữ liệu quan hệ, đồng thời tương thích với các câu lệnh MySQL.

Nói tóm lại, TiDB là một giải pháp cơ sở dữ liệu hoàn toàn có thể được sử dụng cho WordPress hay cho các mục đích học tập.

TiDB Cloud là gì? TiDB có hạn chế gì không?

TiDB Cloud - Serverless 🔗 là một dịch vụ cơ sở dữ liệu được quản lý (managed), bạn chỉ việc tạo và quản lý data của bạn, còn mọi vấn đề về setup server và cấu hình bảo mật, scaling, backup đều đã được TiDB Cloud xử lý giúp. Chi phí được tính cho lượng dữ liệu bạn tạo ra và cách bạn xử lý ví dụ như read, write, transfer,...

TiDB Cloud có gói miễn phí hoàn toàn 🔗, nhưng đi kèm đó là một số giới hạn về dung lượng lưu trữ và số lượng operation (read, write, transfer) mà mình sẽ giải đáp chi tiết hơn bên dưới. Tuy nhiên theo đánh giá nhanh của mình thì những website về blog, tin tức, shop nhỏ sẽ không đạt tới giới hạn này.

Đầu tiên, nếu bạn đang phân vân lựa chọn nhà cung cấp nào, dung lượng database ra sao hay chỉ muốn kiểm thử khả năng tích hợp với MySQL thì chuyển sang sử dụng TiDB Cloud là hoàn toàn hợp lý. Ưu điểm của TiDB Cloud như sau:

  • Miễn phí. Bạn có thể hủy server bất kì lúc nào rồi tạo lại mà không bị tính phí.
  • Bạn không cần phải quản lý database server, tất cả đã được TiDB lo rồi. Bạn chỉ việc kết nối và sử dụng.
  • Bạn không phải phụ thuộc vào nhà cung cấp AWS, DigitalOcean, GCP. Bạn đặt server application ở bất kì đâu cũng kết nối được đến TiDB.

Tuy nhiên, xin lưu ý giúp Tuấn một số điểm bên dưới:

  • TiDB Cloud miễn phí 5GB dữ liệu cho một server, và miễn phí tạo 5 server như vậy. Như vậy bạn có thể sử dụng cho 5 database dự án, mỗi dự án 1 server hoặc 10 database dự án nhỏ, hai dự án 1 server. Hoàn toàn tự do cho bạn sắp xếp để tiết kiệm chi phí.

  • TiDB giới hạn 50 triệu RUs (Request Unit), tổng cộng 250 triệu RUs cho 5 server. Để hiểu thêm cách tính RUs, mời bạn đọc qua https://www.pingcap.com/tidb-serverless-pricing-details/ 🔗. Nếu bạn vượt hạn mức, bạn sẽ bị limit về 10 RU/s. Vì vậy việc áp dụng cache để giảm tải database là việc nên làm. Bạn có thể tham khảo qua bài viết sử dụng object cache để giảm tải database của mình luôn nhé.

  • TiDB hoàn toàn có thể thay đổi cách tính RUs hoặc thậm chí loại bỏ hoàn toàn gói free. Tuy nhiên nhờ vào tính tương thích, bạn chắc chắn có thể backup lại database và restore vào bất kỳ MySQL nào đó để sử dụng tiếp, không nhất thiết phải tiếp tục sử dụng giải pháp của TiDB.

  • Các bạn nếu sử dụng cho các dự án thực tế thì nên xem qua:

Theo Tuấn mức độ tương thích này đủ để làm sử dụng cho các dạng blog, tin tức, WooCommerce đơn giản. Như vậy cũng phù hợp với nhu cầu sử dụng miễn phí.

Cách tạo TiDB Cloud

Đơn giản lắm. Các bạn chỉ việc vào đường dẫn https://tidbcloud.com 🔗 và đăng ký một tài khoản TiDB. Khi đăng ký xong, TiDB sẽ tạo luôn cho bạn một cluster, gọi là Cluster0 để sử dụng. Như vậy là xong rồi, bạn có thể cấu hình ứng dụng của mình kết nối đến cluster theo cách sau:

  1. Nhấn vào nút Connect this cluster ở màn hình này.

true

  1. Chúng ta sẽ kết nối theo các thông tin bên dưới.

Những thông tin này bao gồm host, port, tên đăng nhập. Phần database test bạn có thể bỏ qua và tạo tên bạn muốn sau này. Lưu ý nhấn Generate Password để tạo mật khẩu cho tài khoản.

Mật khẩu này sẽ không bao giờ hiển thị lại đâu nha. Nếu cần reset thì bạn hãy làm lại bước connect từ đầu và tạo mật khẩu mới. Lúc này mật khẩu cũ sẽ không sử dụng được nữa.

true

Vậy là xong rồi. Bây giờ tiếp tục kết nối WordPress hay các ứng dụng của chúng ta với TiDB thôi :).

Cách thay đổi region

Mặc định TiDB sẽ tạo cluster ở region (khu vực) gần nơi mà mình đăng ký nhất. Nếu ở Việt Nam chắc chắn bạn sẽ được tạo cluster ở Singapore. Tuy nhiên với những trường hợp website bạn đang được host ở Mỹ hoặc Châu Âu, hãy tạo một cluster mới để được chọn region nhé.

true

Chính vì vậy, hãy tạo cluster mới nếu bạn cần thay đổi region và bỏ qua Cluster0 không cần sử dụng nữa nhé.

Kết nối WordPress đến TiDB

Nếu đang sử dụng một database engine khác, hãy backup và restore database hiện tại của bạn lên TiDB bằng bất kỳ công cụ nào: Workbench, DBeaver hay kể cả MySQL.

Như mình đã chia sẻ, tất cả các kết nối đến TiDB đều yêu cầu SSL nên nếu sử dụng DBeaver, các bạn hãy chuyển sang tab SSL và nhập như bên dưới nhé.

true

Sau khi đã restore xong database lên TiDB, chúng ta cần tiếp tục chỉnh một vài cấu hình của WordPress vào file wp-config.php như bên dưới để đảm bảo WordPress có thể chạy được.

<?php

...

// Yêu cầu connect SSL đến TiDB cluster. Nếu không sử dụng
// TiDB nữa, hãy comment dòng này đi.
define( 'MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL );

// Bởi vì TiDB chỉ hỗ trợ một số collate nhất định, chúng ta cần chỉ định
// WordPress sử dụng đúng các collate này
define( 'DB_COLLATE', 'utf8mb4_general_ci' );

...

Chúc mừng bạn, sau khi cấu hình wp-config.php xong thì website đã thực sự hoạt động với TiDB rồi. Các bạn có thể bật Query Monitor để xem thông tin database mà bạn đang kết nối đến nhé. Nếu server MySQL không sử dụng nữa thì chúng ta có thể tắt nó đi để tiết kiệm một chút tài nguyên.

true

Ngoài ra, để sử dụng một cách hoàn hảo nhất, bạn nên cài đặt thêm plugin TiDB Compatibility Plugin for WordPress 🔗. Mục đích của plugin này là tự động replace hàm SQL_CALC_FOUND_ROWS mà MySQL 8.x và TiDB không hỗ trợ thành các hàm mà các database server hỗ trợ bạn nhé.


Phân tích các giới hạn của TiDB

RUs

Mình có cài đặt thử một website WordPress trắng. Cài đặt các plugin WooCommerce, Wordfence, Yoast SEO,.. Sau đó cài đặt theme Flatsome và import toàn bộ demo content. Không sử dụng bất kì plugin cache nào thì RUs mình "đạt được" là tầm 600.000 RU, tức là 1% của mức giới hạn. Cũng khá ổn để dùng cho các site có dữ liệu ít.

true

WordPress plugin/theme

  • WooCommerce: Đây là plugin theo mình thấy có độ phức tạp cao và tạo ra nhiều data. Tuy nhiên quá trình cài đặt và import sample product 🔗 diễn ra rất trơn tru. Mình không có nhiều plugin liên quan đến WooCommerce nên không test phần này.

  • Wordfence là một plugin cũng tạo rất nhiều bảng trong database. Tuấn không gặp vấn đề gì khi cài đặt cũng như khi sử dụng plugin

  • Yoast SEO không sử dụng quá nhiều resource của database. Mình chỉ thử cài đặt xem sao thôi, cũng không có vấn đề gì.

Các platform khác

  • Laravel: Tuấn có thử chạy một project mẫu của Laravel tại https://github.com/albinvar/simple-social-media 🔗. Toàn bộ quá trình init data và seed data đều hoạt động bình thường.

  • Strapi là một headless CMS giúp xây dựng, quản lý nội dung dễ dàng bằng các Rest API. Mình tạo project bằng câu lệnh yarn create strapi-app my-project, cấu hình cài đặt kết nối đến TiDB và có thể kết nối bình thường.

true

Các tính năng của TiDB

Serverless

Như Tuấn đã chia sẻ ở trên, sử dụng serverless là bạn đang tận hưởng một dịch vụ mà bạn không cần quan tâm về cấu hình server, vị trí đặt server hay nâng cấp, vá lỗi gì cả. Tuấn hiện tại cũng đã chuyển blog về serverless rồi, cảm giác không cần quản lý gì về server rất tuyệt vời.

Chat2Query

Một tính năng khác khá hay ho là TiDB có tính năng cho phép bạn cấp quyền ChatGPT kết nối vào database của bạn. Mục đích là cho phép ChatGPT có thể quét cấu trúc database của bạn và có thể gợi ý những câu query như hình bên dưới.

Chat2Query các câu tìm kiếm đơn giản của WordPress

Cá nhân mình thấy việc gợi ý câu lệnh của Chat2Query dừng lại ở mức có thể dùng được, còn ở mức chuyên sâu thì vẫn chưa. Về vấn đề Privacy (bảo mật), TiDB đảm bảo rằng chỉ có cấu trúc database và các metadata được chia sẻ cho ChatGPT. Các dữ liệu của bạn vẫn được bảo mật, không chia sẻ với bất kì bên thứ ba nào.

Các hạn chế về MySQL của TiDB

Đang cập nhật