Mặc dù bạn là một người sử dụng WordPress thông thường hay một lập trình viên WordPress thì việc hiểu cấu trúc database và các thao tác cơ bản sẽ giúp bạn ít nhiều trong quãng thời gian sử dụng, chẳng hạn như bạn có thể hiểu các dữ liệu được lưu ở đâu, thay đổi theme thì nó sẽ lưu các tùy chọn ở đâu để có thể linh hoạt hơn trong việc kiểm soát kho dữ liệu đồ sộ này.
Hoặc hơn thế nữa, vào một ngày đẹp trời có một theme bị lỗi khiến bạn không vào được Dashboard để đổi sang theme khác thì việc duy nhất bạn có thể làm là vào tận database để sửa.
Cấu hình database tại file wp-config.php
Trước khi vọc vạch vào trong database thì chúng ta cần biết mã nguồn WordPress kết nối với database ở đâu và có các tham số cấu hình liên quan. Và chắc tất cả đều biết là cấu hình database sẽ nằm trong file wp-config.php trên website, file đó có nhiều nội dung nhưng đây là 4 dòng cấu hình database:
// ** MySQL settings – You can get this info from your web host ** //
/** The name of the database for WordPress */
define(‘DB_NAME’, ‘tên của database’);/** MySQL database username */
define(‘DB_USER’, ‘tài khoản quản trị database’);/** MySQL database password */
define(‘DB_PASSWORD’, ‘mật khẩu quản trị database’);/** MySQL hostname */
define(‘DB_HOST’, ‘localhost’);/** Database Charset to use in creating database tables. */
define(‘DB_CHARSET’, ‘utf8’);/** The Database Collate type. Don’t change this if in doubt. */
define(‘DB_COLLATE’, ”);
Ở trong cách cài đặt WordPress mình không nói đến bước sửa file wp-config.php bởi vì chỉ cần chạy website và nó sẽ tự kêu bạn nhập các thông tin database, tránh khả năng bạn mở lên và sửa không đúng cách dẫn tới việc bị lỗi.
Nhưng khi bạn chuyển website sang host khác hoặc làm gì đó liên quan đến việc thay đổi database thì chắc chắn bạn cần phải hiểu 6 dòng trên. Và liên quan đến bảo mật, bạn cần hiểu thêm dòng này:
/**
* WordPress Database Table prefix.
*
* You can have multiple installations in one database if you give each a unique
* prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = ‘wp_’;
Mặc định WordPress sẽ cấu hình các tiền tố của database là wp_ nhưng bạn nên đổi nó thành một cái tên khác để hạn chế local attack, plugin iThemes Security có hỗ trợ chức năng này. Hoặc là bạn nên nhập một tiền tố khác khi cài đặt một website WordPress mới và tiền tố phải có dấu _ ở cuối để phân cách tên table của database.
Cấu trúc của database mặc định
Để xem cấu trúc các bảng và cột dữ liệu bạn cần truy cập vào PhpMyAdmin thường có mặt ở tất cả mọi gói host mà bạn mua. Bạn có thể thấy mặc định WordPress có tổng cộng 11 bảng dữ liệu (table).
Ý nghĩa của các table như sau:
wp_commentmeta: Mục này sẽ chứa các dữ liệu vĩ mô của các bình luận có trên website nếu bạn có sử dụng custom comment meta. Chẳng hạn như bạn sử dụng plugin CommentLuv thì table này sẽ chứa các địa chỉ website từ RSS Feed của người bình luận. Nếu bạn dùng Akismet thì cột này sẽ phình to ra sau một thời gian dài.
wp_comments
: Cột này sẽ chứa dữ liệu cần thiết về các bình luận như tên người bình luận, nội dung, ngày tháng, địa chỉ website,….wp_links
: Kể từ phiên bản WordPress 3.7 thì họ đã tắt đi chức năng Blogroll thường được dùng để thêm các liên kết mình yêu thích. Và các dữ liệu từ blogroll đó sẽ lưu ở đây, nhưng bây giờ thì hầu như không dùng tới.wp_options
: Table này khá quan trọng vì nó lưu trữ hầu hết các dữ liệu liên quan đến thiết lập của bạn trong website. Chẳng hạn như tên website, địa chỉ website, plugin đang dùng, theme đang dùng, dữ liệu khi kích hoạt theme và plugin,…Do đó nếu bạn muốn sửa plugin và theme đang dùng thì cứ vào table này.wp_postmetas
: Các dữ liệu trong bảng này là những dữ liệu vĩ mô có liên quan đến thiết lập của các post type mà bạn đang dùng. Chẳng hạn như các giá trị custom field,…wp_posts
: Những nội dung chính của một post type như tiêu đề, tác giả, nội dung,…sẽ chứa trong bảng này. Áp dụng cho toàn bộ post type, kể cả custom post type.wp_term
: Như bạn biết mặc định taxonomy là Category và Tag. Ví dụ ở category, bạn tạo ra 5 mục khác nhau thì 5 mục đó chính là term. Term sẽ được lưu trữ toàn bộ tại table này.wp_term_relationships
: Table này là chứa dữ liệu để một term có thể kết nối với một taxonomy qua ID. Chẳng hạn như bạn vừa tạo ra một term tên “Giáo dục” nhưng nó sẽ không thể hiểu “Giáo dục” là tag hay category nếu thiếu table này.wp_term_taxonomy
: Là nơi chứa đựng các danh sách taxonomy mà bạn đang có, bao gồm cả custom taxonomy.wp_usermeta
: Mỗi thông tin thành viên sẽ có thêm các tùy chọn thông tin thêm như họ tên, nickname và các user custom field. Các dữ liệu vĩ mô đó sẽ lưu ở đây.wp_users
: Là nơi chứa đựng các thông tin quan trọng của một thành viên như username, mật khẩu, email,…
Nhưng có thể bạn vào sẽ thấy nhiều table hơn vì có khá nhiều plugin sẽ tự tạo cho nó một table riêng để chứa các dữ liệu liên quan tới nó.
Mỗi một table sẽ có rất nhiều cột (column) và hàng (row) khác nhau, và mỗi cột và hàng nó đều có các key (khóa) và value (giá trị). Nó giống thế này:
Nếu bạn cần sửa giá trị thì chỉ cần ấn vào nút Edit rồi tiến hành sửa là xong.
Tối ưu database
Database tương tự như ổ cứng, do nó phải thường xuyên đọc – ghi – xóa dữ liệu liên tục nên sau một thời gian dài nó sẽ phát sinh ra các phân mảnh database làm cho dữ liệu bạn nặng nề hơn, truy xuất chậm hơn thông thường.
Vì vậy để chăm sóc “sức khỏe” cho database, bạn nên tiến hành sử dụng công cụ optimize database để tối ưu nó. Cách tối ưu là bạn click chọn vào phần Check All để chọn tất cả các table.
Sau đó ở phần With selected kế bên, bạn chọn Optimize Database.
Hoặc bạn có thể sử dụng plugin WP Cleanup để dọn rác và tối ưu database tốt hơn.
Backup database bằng PhpMyAdmin
Một vài trường hợp bạn không thể dùng plugin để backup WordPress thì bạn còn có cách khác để thử đó là backup thủ công bằng PhpMyAdmin.
Sau khi chọn database trong PhpMyAdmin, bạn chọn phần Export và ấn Go để tải file backup của database về máy, file này có đuôi mở rộng là .sql.
Trường hợp cần khôi phục (restore) lại dữ liệu thì chỉ cần chuyển qua tab Import và upload file .sql lên.
Lời kết
Nếu bạn thấy bài này dễ hiểu thì cũng đơn giản thôi vì WordPress không có gì là khó hiểu cả. Hãy nhớ rằng trước khi đụng vào database để sửa các giá trị bên trong đó, hãy backup lại để nếu có xảy ra lỗi thì cũng còn đường mà khôi phục lại như cũ.