Computer >> Máy Tính >  >> Hệ thống >> Linux

MariaDB:Cài đặt và Tối ưu hóa Hiệu suất

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

MariaDB:Cài đặt và Tối ưu hóa Hiệu suất

Cài đặt MariaDB trên CentOS

Gần đây, MariaDB đã được thêm vào kho lưu trữ cơ sở CentOS 7 tiêu chuẩn, nhưng phiên bản của nó trong kho lưu trữ là 5.5. Phiên bản này không được 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 trong InnoDB. Để cài đặt phiên bản MariaDB hiện tại, trước tiên bạn cần thêm kho lưu trữ dành cho nhà phát triển mariadb.org.

Cài đặt nano trình soạn thảo bằng yum:

yum install nano -y

Sau đó, mở tệp kho lưu trữ để chỉnh sửa nó:

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 tệp cấu hình mariadb.repo và cài đặt máy chủ và máy khách 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 để 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 hóa Hiệu suất

Dịch vụ mariadb đang hoạt động và đang chạy, vì vậy bạn có thể tiếp tục với cấu hình.

Bảo mật Máy chủ MariaDB

Sau khi chúng tôi đã cài đặt và chạy máy chủ MariaDB, chúng tôi có thể chuyển sang cài đặt bảo mật. Chạy tập lệnh 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 gốc (sau khi cài đặt ban đầu mariadb không có mật khẩu nào được đặt), vì vậy chúng ta nhấn ENTER và đặt một mật khẩu phức tạp trong bước tiếp theo. Sau đó, bạn chỉ cần nhấn ENTER để kết thúc quá trình thực thi kịch bản. Người dùng ẩn danh, đăng nhập root từ xa và các bảng kiểm tra sẽ bị xóa và các đặc quyền sẽ được cập nhật.

Để kết nối từ xa với máy chủ mariadb, bạn phải tạo một số 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

Theo tùy chọn, bạn có thể cho phép các kết nối đi đế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 rằng MariaDB đã được cài đặt thành công.

Hãy kết nối với máy chủ DB bằng công cụ mysqladmin tích hợp sẵn:

mysqladmin version

Lệnh trả về như sau:

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

Có nghĩa là MariaDB đã được cài đặt thành công, cơ sở dữ liệu đang hoạt động.

Bạn có thể kết nối với bảng điều khiển máy chủ mariadb để chạy các lệnh SQL một cách tương tác:

mysql -u root -p

Tệp cấu hình MariaDB - my.cnf

Thông thường, sau khi MariaDB được cài đặt, tôi thêm cấu hình tiêu chuẩn của mình vào tệp cấu hình /etc/my.cnf hoạt động trên hầu hết các máy chủ và không gây ra bất kỳ sự cố nào cho đến nay. Xóa my.cnf và thêm văn bản sau vào nó:

[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 cùng tìm hiểu chi tiết hơn về các tham số my.cnf chính:

  • datadir là thư mục chứa các tệp DB;
  • tmpdir là thư mục để lưu trữ các tệp tạm thời;
  • bỏ qua tên-giải quyết tắt tính năng phân giải 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 đang sử dụng các trường blob, giá trị của nó không được nhỏ hơn kích thước của trường lớn nhất;
  • max_connections là số lượng kết nối đã mở tối đa; tham số đặt số lượng máy khách có thể làm việc đồng thời với máy chủ mariadb;
  • # Thông số bộ nhớ đệm phần bao gồm mọi thứ liên quan đến bộ đệm truy vấn. Bạn không nên đặt giá trị quá cao vì máy chủ DB của bạn sẽ tiêu tốn nhiều tài nguyên hơn;
  • # thông số InnoDB phần 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 có 1-2 dự án nằm trên máy chủ của bạn, hãy đặt giá trị thành 70-80% RAM khả dụng;
  • innodb_flush_method đặt giá trị O_DIRECT cho Linux, nó sẽ tắt bộ nhớ đệm 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 xem xét thông số này một cách nghiêm túc:nếu bạn đặt 0 ở đây, bạn sẽ có hiệu suất cao hơn, nhưng nguy cơ mất dữ liệu sẽ tăng lên. Tôi thích đặt giá trị 2 ở đây hơn vì tôi không thấy bất kỳ mức tăng hiệu suất máy chủ DB rõ ràng nào, trong khi ưu tiên bảo mật là vấn đề.

Tối ưu hóa Hiệu suất &Chạy thử cho MariaDB

Tôi muốn nói thêm rằng bạn không cần phải sao chép tệp cấu hình của tôi:mọi máy chủ và mọi dự án đều cần các thông số riêng của chúng. Tôi khuyên bạn nên sử dụng một số tập lệnh tự động kiểm tra cấu hình MariaDB và cung cấp một số khuyến nghị về tối ưu hóa máy chủ.

Để tối ưu hóa các thông số mariadb, bạn có thể sử dụng tập lệnh Tuning-Primer.sh . Đầu tiên, hãy cài đặt các công cụ bổ sung:

yum install bc net-tools -y

Tải xuống tập lệnh tối ưu hóa:

wget https://launchpadlibrarian.net/78745738/tuning-primer.sh

Gán quyền thực thi cho tệp .sh:

chmod +x tuning-primer.sh

Chạy tập lệnh:

./tuning-primer.sh

Sau khi chạy, script sẽ hiển thị cho bạn những thông tin hữu ích mà bạn cần biết. Những thứ quan trọng nhất sẽ được tô màu đỏ. Đây là những điều được khuyến nghị nên sửa.

Ví dụ:tập lệnh cho thấy số lượng kết nối ít hơn nhiều so với tôi đã đặt.

MariaDB:Cài đặt và Tối ưu hóa Hiệu suất

Bạn có thể thay đổi tham số này cả trong tệp my.cnf và trong bảng điều khiển. Tôi đã đặt giá trị thấp hơn (10) và tập lệnh đã chấp thuận giá trị đó:

MariaDB:Cài đặt và Tối ưu hóa 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 của máy chủ mariadb của mình trở nên hoàn hảo.

Tôi muốn lưu ý rằng thời gian hoạt động liên tục của máy chủ DB được khuyến nghị là ít nhất 48 giờ, khi đó thông tin sẽ chính xác hơn và bạn sẽ có thể điều chỉnh máy chủ của mình.

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 của các dự án của bạn. Thêm phần sau vào mysqld phần:

slow_query_log = 1 # enable the log of slow queries
long_query_time = 5 # set the time in seconds
slow_query_log_file = /var/log/slow-query.log # the name of your slow query log file and the path to it
log_queries_not_using_indexes # whether to write queries that do not use indexes to the log file

Ngoài ra, bạn phải tạo tệp nhật ký cho MariaDB và lỗi nhật ký 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 của mình nếu bạn mở /var/log/slow-query.log hoặc kiểm tra nó trong thời gian thực:

tail -f /var/log/slow-query.log

Do đó, bạn sẽ có thể phân tích các truy vấn mà dự án của bạn gửi đến DB của bạn và tiến hành kiểm tra.

Nếu bạn thay đổi bất kỳ cài đặt DB nào, hãy kiểm tra cấu hình của bạn để tìm lỗi. Sau khi thực hiện bất kỳ thay đổi nào đối với cài đặt my.cnf, bạn cần kiểm tra cấu hình để tìm lỗi:

systemctl status mariadb -l

Lệnh cơ bản của vỏ MariaDB

Các lệnh cli chính mà quản trị viên phải sử dụng thường xuyên trong bảng điều khiển mariadb được hiển thị bên dưới.

Để đăng nhập cục bộ vào bảng điều khiển MariaDB của bạn, hãy chạy lệnh sau:

mysql -u root -p

Để kết nối từ xa với máy chủ MariaDB của bạn:

mysql -u root -p -h 192.168.1.20

Các lệnh MariaDB (MySQL) hữu ích:

create database db1; - tạo một DB với tên db1

show databases; - hiển thị danh sách các DB trên máy chủ

use db1; - đăng nhập vào DB với tên db1

show tables; - liệt kê tất cả các bảng trong cơ sở dữ liệu hiện tại

create user 'project'@'localhost' identified by '$sup#erP@ss1'; - tạo người dùng (dự án) và đặt mật khẩu của nó thành $ sup # erP @ ss1

grant all privileges on database_name.* to project@'localhost'; - cấp đầy đủ đặc quyền cho dự án của người dùng

flush privileges; - cập nhật tất cả các đặc quyền

show processlist; - xem các kết nối DB đang hoạt động. Bạn cũng có thể sử dụng lệnh này:

show status where `variable_name` = 'Threads_connected';

Trong bảng điều khiển mysql của mình, 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 hóa Hiệu suất

Để thay đổi:

SET max_error_count=256;

MariaDB:Cài đặt và Tối ưu hóa Hiệu suất

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