ในบทความนี้ ผมจะพิจารณาการติดตั้ง การกำหนดค่าพื้นฐาน และการปรับประสิทธิภาพของเซิร์ฟเวอร์ฐานข้อมูล MariaDB บน Linux CentOS 7 ที่ท้ายบทความ ผมจะแสดงตัวอย่างไฟล์การกำหนดค่า MariaDB เพื่อให้คุณได้เลือกสิ่งที่ดีที่สุด พารามิเตอร์สำหรับเซิร์ฟเวอร์ db ของคุณ
ติดตั้ง MariaDB บน CentOS
เมื่อเร็ว ๆ นี้ MariaDB ได้รับการเพิ่มไปยังที่เก็บฐานมาตรฐาน CentOS 7 แต่เวอร์ชันในที่เก็บคือ 5.5 เวอร์ชันนี้ไม่อัปเดต มีปัญหาด้านประสิทธิภาพบางอย่าง และไม่มีการค้นหาข้อความแบบเต็มใน InnoDB ในการติดตั้ง MariaDB เวอร์ชันปัจจุบัน คุณต้องเพิ่มที่เก็บสำหรับนักพัฒนา mariadb.org ก่อน
ติดตั้ง นาโน แก้ไขโดยใช้ yum:
yum install nano -y
จากนั้นเปิดไฟล์ที่เก็บเพื่อแก้ไข:
nano /etc/yum.repos.d/mariadb.repo
เพิ่มข้อความต่อไปนี้ที่นั่น:
[mariadb] name = MariaDB baseurl = https://yum.mariadb.org/10.4/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
บันทึกไฟล์กำหนดค่า mariadb.repo และติดตั้งเซิร์ฟเวอร์และไคลเอนต์ MariaDB:
yum --disablerepo=AppStream install MariaDB-server MariaDB-client -y
การติดตั้งเสร็จสมบูรณ์ ตอนนี้คุณต้องเพิ่มบริการ mariadb เพื่อเริ่มต้น:
systemctl start mariadb
systemctl enable mariadb
ตรวจสอบสถานะการให้บริการ:
systemctl status mariadb
บริการ mariadb ทำงานอยู่ คุณจึงกำหนดค่าต่อไปได้
กำลังรักษาความปลอดภัยเซิร์ฟเวอร์ MariaDB
หลังจากที่เราติดตั้งและเรียกใช้เซิร์ฟเวอร์ MariaDB แล้ว เราสามารถไปยังการตั้งค่าความปลอดภัยได้ เรียกใช้สคริปต์ในตัว:
/usr/bin/mysql_secure_installation
ก่อนอื่นจะแจ้งให้คุณป้อนรหัสผ่านรูท (หลังจากการติดตั้งเริ่มต้นของ mariadb ไม่ได้ตั้งรหัสผ่านไว้) ดังนั้นเราจึงกด ENTER และตั้งรหัสผ่านที่ซับซ้อนในขั้นตอนต่อไป จากนั้นคุณสามารถกด ENTER จนถึงจุดสิ้นสุดของการดำเนินการตามสถานการณ์ ผู้ใช้ที่ไม่ระบุชื่อ การเข้าสู่ระบบรูทระยะไกลและตารางทดสอบจะถูกลบ และสิทธิพิเศษจะได้รับการอัปเดต
ในการเชื่อมต่อระยะไกลกับเซิร์ฟเวอร์ mariadb คุณต้องสร้างกฎเกณฑ์บางอย่างสำหรับไฟร์วอลล์ Linux โดยใช้ iptables:
iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables-save > /etc/sysconfig/iptables
คุณสามารถอนุญาตการเชื่อมต่อขาออกไปยังฐานข้อมูล MariaDB ระยะไกลได้:
iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
การทดสอบการเชื่อมต่อ MariaDB
คุณต้องตรวจสอบให้แน่ใจว่าติดตั้ง MariaDB สำเร็จแล้ว
มาเชื่อมต่อกับเซิร์ฟเวอร์ DB โดยใช้เครื่องมือ mysqladmin ในตัว:
mysqladmin version
คำสั่งคืนค่าต่อไปนี้:
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
หมายความว่าติดตั้ง MariaDB สำเร็จแล้ว ฐานข้อมูลเริ่มทำงานแล้ว
คุณสามารถเชื่อมต่อกับคอนโซลเซิร์ฟเวอร์ mariadb เพื่อเรียกใช้คำสั่ง SQL แบบโต้ตอบได้:
mysql -u root -p
ไฟล์คอนฟิก MariaDB – my.cnf
โดยปกติ หลังจากติดตั้ง MariaDB แล้ว ฉันจะเพิ่มการกำหนดค่ามาตรฐานลงในไฟล์กำหนดค่า /etc/my.cnf ที่ทำงานบนเซิร์ฟเวอร์ส่วนใหญ่และยังไม่เกิดปัญหาใดๆ ล้าง my.cnf และเพิ่มข้อความต่อไปนี้:
[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
มาดูพารามิเตอร์หลักของ my.cnf กันดีกว่า:
- datadir เป็นไดเร็กทอรีที่เก็บไฟล์ DB ไว้
- tmpdir เป็นไดเร็กทอรีสำหรับจัดเก็บไฟล์ชั่วคราว
- ข้ามการแก้ไขชื่อ ปิดใช้งานการแก้ไขชื่อ DNS;
- max_allowed_packet คือขนาดบรรจุภัณฑ์สูงสุดที่อนุญาต หาก DB ของคุณใช้ช่อง Blob ค่าของฐานข้อมูลต้องไม่น้อยกว่าขนาดของช่องที่ใหญ่ที่สุด
- max_connections คือจำนวนสูงสุดของการเชื่อมต่อที่เปิดอยู่ พารามิเตอร์กำหนดจำนวนไคลเอนต์ที่สามารถทำงานกับเซิร์ฟเวอร์ mariadb พร้อมกันได้
- # พารามิเตอร์แคช ส่วนรวมทุกอย่างที่เกี่ยวข้องกับแคชแบบสอบถาม ไม่แนะนำให้ตั้งค่าสูงเกินไปเนื่องจากเซิร์ฟเวอร์ DB ของคุณจะใช้ทรัพยากรมากขึ้น
- # พารามิเตอร์ InnoDB ส่วนรวมทุกอย่างที่เกี่ยวข้องกับตาราง innodb;
- innodb_buffer_pool_size เป็นบัฟเฟอร์แคชสำหรับข้อมูลและดัชนี หาก 1-2 โปรเจ็กต์อยู่บนเซิร์ฟเวอร์ของคุณ ให้ตั้งค่าเป็น 70-80% ของ RAM ที่มีอยู่
- innodb_flush_method ตั้งค่า O_DIRECT สำหรับ Linux มันจะปิดการใช้งานแคชระดับ OS;
- innodb_flush_log_at_trx_commit พารามิเตอร์นี้ส่งผลต่อความเร็วในการเขียนของตาราง innoDB พิจารณาพารามิเตอร์นี้อย่างจริงจัง:หากคุณตั้งค่า 0 ที่นี่ คุณจะมีประสิทธิภาพที่สูงขึ้น แต่ความเสี่ยงของการสูญเสียข้อมูลจะเพิ่มขึ้น ฉันชอบตั้งค่า 2 ที่นี่ เนื่องจากฉันไม่เห็นประสิทธิภาพที่เพิ่มขึ้นของเซิร์ฟเวอร์ DB ในขณะที่ความปลอดภัยเป็นสิ่งสำคัญ
การเพิ่มประสิทธิภาพและการปรับแต่งสำหรับ MariaDB
ฉันต้องการเพิ่มว่าคุณไม่จำเป็นต้องคัดลอกไฟล์การกำหนดค่าของฉัน:ทุกเซิร์ฟเวอร์และทุกโครงการต้องการพารามิเตอร์ของตัวเอง ฉันแนะนำให้ใช้สคริปต์บางตัวที่ตรวจสอบการกำหนดค่า MariaDB โดยอัตโนมัติและให้คำแนะนำเกี่ยวกับการเพิ่มประสิทธิภาพเซิร์ฟเวอร์
ในการเพิ่มประสิทธิภาพพารามิเตอร์ mariadb ของคุณ คุณสามารถใช้ สคริปต์ Tuning-Primer.sh . ขั้นแรก ติดตั้งเครื่องมือเพิ่มเติม:
yum install bc net-tools -y
ดาวน์โหลดสคริปต์การเพิ่มประสิทธิภาพ:
wget https://launchpadlibrarian.net/78745738/tuning-primer.sh
กำหนดสิทธิ์ในการดำเนินการให้กับไฟล์ .sh:
chmod +x tuning-primer.sh
เรียกใช้สคริปต์:
./tuning-primer.sh
หลังจากรัน สคริปต์จะแสดงข้อมูลที่เป็นประโยชน์ที่คุณต้องรู้ สิ่งสำคัญที่สุดจะถูกเน้นด้วยสีแดง สิ่งเหล่านี้เป็นสิ่งที่แนะนำให้แก้ไข
ตัวอย่างเช่น สคริปต์แสดงให้เห็นว่าจำนวนการเชื่อมต่อน้อยกว่าที่ฉันตั้งไว้มาก
คุณสามารถเปลี่ยนพารามิเตอร์นี้ทั้งในไฟล์ my.cnf และในคอนโซล ฉันได้ตั้งค่าที่ต่ำกว่า (10) และสคริปต์อนุมัติ:
การใช้การตรวจสอบเหล่านี้จะทำให้ประสิทธิภาพของเซิร์ฟเวอร์ mariadb สมบูรณ์แบบได้
ฉันต้องการทราบว่าเวลาทำงานต่อเนื่องของเซิร์ฟเวอร์ DB ที่แนะนำคืออย่างน้อย 48 ชั่วโมง จากนั้นข้อมูลจะแม่นยำยิ่งขึ้น และคุณจะสามารถปรับแต่งเซิร์ฟเวอร์ของคุณได้
คุณสามารถเพิ่มส่วนเพื่อเปิดใช้งานบันทึกการสืบค้นที่ช้าได้ จะช่วยวิเคราะห์ประสิทธิภาพของโครงการของคุณ เพิ่มสิ่งต่อไปนี้ใน mysqld ส่วน:
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
นอกจากนี้ คุณต้องสร้างไฟล์บันทึกสำหรับ MariaDB และข้อผิดพลาดของบันทึกการสืบค้นที่ช้า:
touch /var/log/mysql-error.log
touch /var/log/slow-query.log
เริ่มบริการ db:
systemctl restart mariadb
คุณสามารถดูบันทึกการสืบค้นที่ช้าได้หากคุณเปิด /var/log/slow-query.log หรือตรวจสอบแบบเรียลไทม์:
tail -f /var/log/slow-query.log
ดังนั้น คุณจะสามารถวิเคราะห์ข้อสงสัยที่โครงการของคุณส่งไปยังฐานข้อมูลของคุณและดำเนินการตรวจสอบได้
หากคุณเปลี่ยนการตั้งค่า DB ให้ตรวจสอบการกำหนดค่าของคุณเพื่อหาข้อผิดพลาด หลังจากเปลี่ยนแปลงการตั้งค่า my.cnf แล้ว คุณต้องตรวจสอบการกำหนดค่าเพื่อหาข้อผิดพลาด:
systemctl status mariadb -l
คำสั่งเชลล์ MariaDB พื้นฐาน
คำสั่ง cli หลักที่ผู้ดูแลระบบต้องใช้บ่อยครั้งในคอนโซล mariadb แสดงไว้ด้านล่าง
หากต้องการล็อกออนเข้าสู่คอนโซล MariaDB ของคุณแบบโลคัล ให้เรียกใช้คำสั่งนี้:
mysql -u root -p
ในการเชื่อมต่อกับเซิร์ฟเวอร์ MariaDB ของคุณจากระยะไกล:
mysql -u root -p -h 192.168.1.20
คำสั่ง MariaDB (MySQL) ที่มีประโยชน์:
create database db1;
— สร้างฐานข้อมูลชื่อ db1
show databases;
— แสดงรายการฐานข้อมูลบนเซิร์ฟเวอร์
use db1;
— ล็อกออนเข้าสู่ฐานข้อมูลด้วยชื่อ db1
show tables;
— แสดงรายการตารางทั้งหมดในฐานข้อมูลปัจจุบัน
create user 'project'@'localhost' identified by '$sup#erP@ss1';
— สร้างผู้ใช้ (โครงการ) และตั้งรหัสผ่านเป็น $sup#erP@ss1
grant all privileges on database_name.* to project@'localhost';
— ให้สิทธิ์อย่างเต็มที่กับโครงการของผู้ใช้
flush privileges;
— อัพเดทสิทธิ์ทั้งหมด
show processlist;
— ดูการเชื่อมต่อฐานข้อมูลที่ใช้งานอยู่ คุณยังสามารถใช้คำสั่งนี้:
show status where `variable_name` = 'Threads_connected';
ในคอนโซล mysql คุณสามารถดูหรือเปลี่ยนแปลงตัวแปรบางอย่างได้ เช่น:
SHOW VARIABLES LIKE 'max_error_count';
วิธีเปลี่ยน:
SET max_error_count=256;
โดยสรุป ฉันอยากจะบอกว่าเมื่อคุณกำหนดค่าเซิร์ฟเวอร์ DB คุณต้องพิจารณาโครงการที่จะอยู่บนเซิร์ฟเวอร์ สิ่งที่ใช้ได้กับโครงการเล็ก ๆ จะไม่เหมาะกับโครงการใหญ่อย่างแน่นอน ลอง ทดลอง และดูบันทึกของคุณเสมอ ในบทความถัดไป เราจะแสดงวิธีจัดเตรียมความพร้อมใช้งานสูงและเพิ่มประสิทธิภาพแอปโดยใช้การจำลองแบบระหว่างเซิร์ฟเวอร์ฐานข้อมูล MariaDB