Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

MariaDB: Cài đặt và Tối ưu hiệu suất

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.

MariaDB: Cài đặt và Tối ưu hiệu suất

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

MariaDB: Cài đặt và Tối ưu hiệu suất

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.

MariaDB: Cài đặt và Tối ưu hiệu suấ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ó:

MariaDB: Cài đặt và Tối ưu hiệu suất

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 db1
  • show databases; — hiển thị danh sách DB trên máy chủ
  • use db1; — đăng nhập vào DB tên db1
  • show tables; — liệt kê tất cả bảng trong cơ sở dữ liệu hiện tại
  • create user 'project'@'localhost' identified by '$sup#erP@ss1'; — tạo user (project) và đặt mật khẩu $sup#erP@ss1
  • grant all privileges on database_name.* to project@'localhost'; — cấp toàn quyền cho user project
  • flush privileges; — cập nhật tất cả đặc quyền
  • show 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';

MariaDB: Cài đặt và Tối ưu hiệu suất

Để thay đổi:

SET max_error_count=256;

MariaDB: Cài đặt và Tối ưu hiệu suất

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.