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.
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
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.
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ị đó:
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';
Để thay đổi:
SET max_error_count=256;
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.