Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

MariaDB:การติดตั้งและการเพิ่มประสิทธิภาพการทำงาน

ในบทความนี้ ผมจะพิจารณาการติดตั้ง การกำหนดค่าพื้นฐาน และการปรับประสิทธิภาพของเซิร์ฟเวอร์ฐานข้อมูล MariaDB บน ​​Linux CentOS 7 ที่ท้ายบทความ ผมจะแสดงตัวอย่างไฟล์การกำหนดค่า MariaDB เพื่อให้คุณได้เลือกสิ่งที่ดีที่สุด พารามิเตอร์สำหรับเซิร์ฟเวอร์ db ของคุณ

MariaDB:การติดตั้งและการเพิ่มประสิทธิภาพการทำงาน

ติดตั้ง 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

หลังจากที่เราติดตั้งและเรียกใช้เซิร์ฟเวอร์ 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

หลังจากรัน สคริปต์จะแสดงข้อมูลที่เป็นประโยชน์ที่คุณต้องรู้ สิ่งสำคัญที่สุดจะถูกเน้นด้วยสีแดง สิ่งเหล่านี้เป็นสิ่งที่แนะนำให้แก้ไข

ตัวอย่างเช่น สคริปต์แสดงให้เห็นว่าจำนวนการเชื่อมต่อน้อยกว่าที่ฉันตั้งไว้มาก

MariaDB:การติดตั้งและการเพิ่มประสิทธิภาพการทำงาน

คุณสามารถเปลี่ยนพารามิเตอร์นี้ทั้งในไฟล์ my.cnf และในคอนโซล ฉันได้ตั้งค่าที่ต่ำกว่า (10) และสคริปต์อนุมัติ:

MariaDB:การติดตั้งและการเพิ่มประสิทธิภาพการทำงาน

การใช้การตรวจสอบเหล่านี้จะทำให้ประสิทธิภาพของเซิร์ฟเวอร์ 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';

MariaDB:การติดตั้งและการเพิ่มประสิทธิภาพการทำงาน

วิธีเปลี่ยน:

SET max_error_count=256;

MariaDB:การติดตั้งและการเพิ่มประสิทธิภาพการทำงาน

โดยสรุป ฉันอยากจะบอกว่าเมื่อคุณกำหนดค่าเซิร์ฟเวอร์ DB คุณต้องพิจารณาโครงการที่จะอยู่บนเซิร์ฟเวอร์ สิ่งที่ใช้ได้กับโครงการเล็ก ๆ จะไม่เหมาะกับโครงการใหญ่อย่างแน่นอน ลอง ทดลอง และดูบันทึกของคุณเสมอ ในบทความถัดไป เราจะแสดงวิธีจัดเตรียมความพร้อมใช้งานสูงและเพิ่มประสิทธิภาพแอปโดยใช้การจำลองแบบระหว่างเซิร์ฟเวอร์ฐานข้อมูล MariaDB