Trong bài viết này, tôi sẽ xem xét cài đặt, cấu hình cơ bản và tối ưu hiệu suất của máy chủ cơ sở dữ liệu MariaDB trên Linux CentOS 7. Ở cuối bài viết, tôi sẽ đưa ra một số ví dụ về file cấu hình MariaDB để bạn có thể chọn các tham số tốt nhất cho máy chủ db của mình.

Cài đặt MariaDB trên CentOS
Gần đây, MariaDB đã được thêm vào kho cơ sở CentOS 7 tiêu chuẩn, nhưng phiên bản trong kho là 5.5. Phiên bản này không cập nhật, có một số vấn đề về hiệu suất và không cung cấp tìm kiếm toàn văn bản trong InnoDB. Để cài đặt phiên bản hiện tại của MariaDB, trước tiên bạn cần thêm kho nhà phát triển mariadb.org.
Cài đặt trình soạn thảo nano bằng yum:
yum install nano -y
Sau đó mở file kho để chỉnh sửa:
nano /etc/yum.repos.d/mariadb.repo
Thêm văn bản sau vào đó:
[mariadb] name = MariaDB baseurl = https://yum.mariadb.org/10.4/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Lưu file cấu hình mariadb.repo và cài đặt máy chủ và client MariaDB:
yum --disablerepo=AppStream install MariaDB-server MariaDB-client -y
Cài đặt hoàn tất, bây giờ bạn cần thêm dịch vụ mariadb vào khởi động:
systemctl start mariadb
systemctl enable mariadb
Kiểm tra trạng thái dịch vụ:
systemctl status mariadb

Dịch vụ mariadb đang hoạt động, vì vậy bạn có thể tiếp tục cấu hình.
Bảo mật máy chủ MariaDB
Sau khi đã cài đặt và chạy máy chủ MariaDB, chúng ta có thể chuyển sang cài đặt bảo mật. Chạy script tích hợp sẵn:
/usr/bin/mysql_secure_installation
Trước hết, nó sẽ nhắc bạn nhập mật khẩu root (sau cài đặt ban đầu mariadb chưa đặt mật khẩu), vì vậy chúng ta nhấn ENTER và đặt mật khẩu phức tạp ở bước tiếp theo. Sau đó bạn có thể nhấn ENTER cho đến cuối kịch bản. Người dùng ẩn danh, đăng nhập root từ xa và bảng test sẽ bị xóa, và đặc quyền sẽ được cập nhật.
Để kết nối từ xa đến máy chủ mariadb, bạn phải tạo quy tắc cho tường lửa Linux bằng iptables:
iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables-save > /etc/sysconfig/iptables
Tùy chọn, bạn có thể cho phép kết nối ra đến cơ sở dữ liệu MariaDB từ xa:
iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
Kiểm tra kết nối MariaDB
Bạn cần đảm bảo MariaDB đã được cài đặt thành công.
Hãy kết nối đến máy chủ DB bằng công cụ tích hợp mysqladmin:
mysqladmin version
Lệnh trả về:
mysqladmin Ver 9.1 Distrib 10.4.7-MariaDB, for Linux on x86_64 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Server version 10.4.7-MariaDB Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/lib/mysql/mysql.sock Uptime: 59 min 35 sec Threads: 10 Questions: 24 Slow queries: 0 Opens: 28 Flush tables: 1 Open tab
Điều này có nghĩa là MariaDB đã được cài đặt thành công, cơ sở dữ liệu đang chạy.
Bạn có thể kết nối đến console máy chủ mariadb để chạy lệnh SQL tương tác:
mysql -u root -p
File cấu hình MariaDB — my.cnf
Thường sau khi cài MariaDB, tôi thêm cấu hình tiêu chuẩn của mình vào file cấu hình /etc/my.cnf hoạt động trên hầu hết máy chủ và chưa gây ra vấn đề nào. Xóa my.cnf và thêm văn bản sau vào:
[mysqld] local-infile=0 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 max_allowed_packet = 128M sql_mode = "" log-error = /var/log/mysql-error.log # Cache parameters query_cache_size = 16M table_open_cache = 4096 thread_cache_size = 16 key_buffer_size = 8M thread_stack = 256K join_buffer_size = 2M sort_buffer_size = 2M # Parameters for temporary tables tmpdir = /tmp max_heap_table_size = 32M tmp_table_size = 32M # InnoDB parameters innodb_file_per_table innodb_buffer_pool_size = 32M innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT innodb_use_native_aio = 0 transaction-isolation = READ-COMMITTED character-set-server = utf8 collation-server = utf8_unicode_ci init-connect = "SET NAMES utf8 COLLATE utf8_unicode_ci" skip-name-resolve [mysqldump] quick quote-names max_allowed_packet = 128M default-character-set = utf8 [mysql] [isamchk] key_buffer = 16M [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid
Hãy đi sâu vào các tham số chính my.cnf:
- datadir là thư mục chứa file DB;
- tmpdir là thư mục lưu file tạm;
- skip-name-resolve tắt giải quyết tên DNS;
- max_allowed_packet là kích thước gói tối đa cho phép. Nếu DB của bạn dùng trường blob, giá trị của nó không thể nhỏ hơn kích thước trường lớn nhất;
- max_connections là số lượng kết nối mở tối đa; tham số này đặt bao nhiêu client có thể làm việc với máy chủ mariadb cùng lúc;
- # Cache parameters bao gồm mọi thứ liên quan đến cache truy vấn. Không khuyến khích đặt giá trị quá cao vì máy chủ DB sẽ tiêu thụ nhiều tài nguyên hơn;
- # InnoDB parameters bao gồm mọi thứ liên quan đến bảng innodb;
- innodb_buffer_pool_size là bộ đệm cache cho dữ liệu và chỉ mục. Nếu 1-2 dự án nằm trên máy chủ của bạn, đặt giá trị 70-80% RAM khả dụng;
- innodb_flush_method đặt giá trị O_DIRECT cho Linux, nó sẽ tắt cache cấp độ hệ điều hành;
- innodb_flush_log_at_trx_commit tham số này ảnh hưởng đến tốc độ ghi của bảng innoDB. Hãy đối xử nghiêm túc với tham số này: nếu đặt 0 ở đây, bạn sẽ có hiệu suất cao hơn, nhưng rủi ro mất dữ liệu tăng lên. Tôi thích đặt giá trị 2 ở đây, vì tôi không thấy tăng rõ rệt hiệu suất máy chủ DB, trong khi bảo mật là ưu tiên hàng đầu.
Tối ưu hiệu suất & Tunning cho MariaDB
Tôi muốn lưu ý rằng bạn không cần sao chép file cấu hình của tôi: mỗi máy chủ và mỗi dự án cần tham số riêng. Tôi khuyên nên dùng một số script tự động kiểm tra cấu hình MariaDB và đưa ra khuyến nghị tối ưu máy chủ.
Để tối ưu tham số mariadb, bạn có thể dùng script Tuning-Primer.sh. Trước hết, cài công cụ bổ sung:
yum install bc net-tools -y
Tải script tối ưu:
wget https://launchpadlibrarian.net/78745738/tuning-primer.sh
Cấp quyền thực thi cho file .sh:
chmod +x tuning-primer.sh
Chạy script:
./tuning-primer.sh
Sau khi chạy, script sẽ hiển thị thông tin hữu ích bạn cần biết. Những thứ quan trọng nhất sẽ được đánh dấu đỏ. Đó là những thứ khuyến khích sửa chữa.
Ví dụ, script cho thấy số lượng kết nối thấp hơn nhiều so với tôi đã đặt.

Bạn có thể thay đổi tham số này cả trong file my.cnf và trong console. Tôi đã đặt giá trị thấp hơn (10) và script chấp nhận nó:

Sử dụng các kiểm tra này, bạn có thể làm cho hiệu suất máy chủ mariadb của mình hoàn hảo.
Tôi muốn lưu ý rằng thời gian hoạt động liên tục khuyến khích cho máy chủ DB là ít nhất 48 giờ, thì thông tin sẽ chính xác hơn và bạn sẽ có thể tinh chỉnh máy chủ.
Bạn có thể thêm một phần để kích hoạt nhật ký truy vấn chậm. Nó sẽ giúp phân tích hiệu suất dự án của bạn. Thêm sau vào phần mysqld:
slow_query_log = 1 # bật nhật ký truy vấn chậm
long_query_time = 5 # đặt thời gian tính bằng giây
slow_query_log_file = /var/log/slow-query.log # tên file nhật ký truy vấn chậm và đường dẫn đến nó
log_queries_not_using_indexes # có ghi truy vấn không dùng chỉ mục vào file nhật ký không
Cũng phải tạo file log cho MariaDB và lỗi truy vấn chậm:
touch /var/log/mysql-error.log
touch /var/log/slow-query.log
Khởi động lại dịch vụ db:
systemctl restart mariadb
Bạn có thể xem nhật ký truy vấn chậm nếu mở /var/log/slow-query.log hoặc kiểm tra theo thời gian thực:
tail -f /var/log/slow-query.log
Như vậy, bạn sẽ có thể phân tích các truy vấn dự án gửi đến DB và thực hiện kiểm toán.
Nếu bạn thay đổi bất kỳ cài đặt DB nào, hãy kiểm tra cấu hình lỗi. Sau khi thay đổi cài đặt my.cnf, bạn cần kiểm tra cấu hình lỗi:
systemctl status mariadb -l
Các lệnh Shell cơ bản của MariaDB
Các lệnh cli chính mà quản trị viên thường dùng trong console mariadb được hiển thị dưới đây.
Để đăng nhập cục bộ vào console MariaDB, chạy lệnh:
mysql -u root -p
Để kết nối từ xa đến máy chủ MariaDB:
mysql -u root -p -h 192.168.1.20
Các lệnh MariaDB (MySQL) hữu ích:
create database db1;— tạo DB tên db1show databases;— hiển thị danh sách DB trên máy chủuse db1;— đăng nhập vào DB tên db1show tables;— liệt kê tất cả bảng trong cơ sở dữ liệu hiện tạicreate user 'project'@'localhost' identified by '$sup#erP@ss1';— tạo user (project) và đặt mật khẩu $sup#erP@ss1grant all privileges on database_name.* to project@'localhost';— cấp toàn quyền cho user projectflush privileges;— cập nhật tất cả đặc quyềnshow processlist;— xem kết nối DB đang hoạt động. Bạn cũng có thể dùng lệnh:show status where `variable_name` = 'Threads_connected';
Trong console mysql, bạn có thể xem hoặc thay đổi một số biến, như:
SHOW VARIABLES LIKE 'max_error_count';

Để thay đổi:
SET max_error_count=256;

Kết luận, khi cấu hình máy chủ DB, bạn phải xem xét các dự án sẽ đặt trên máy chủ. Điều áp dụng cho dự án nhỏ chắc chắn không phù hợp cho dự án lớn. Hãy thử nghiệm, thực nghiệm và luôn xem nhật ký. Trong bài tiếp theo, chúng ta sẽ chỉ cách cung cấp tính sẵn sàng cao và tăng hiệu suất ứng dụng bằng cách sử dụng replication giữa các máy chủ cơ sở dữ liệu MariaDB.