كيفية تثبيت وتأمين وضبط أداء خادم قاعدة بيانات MariaDB

A database server is an critical component of the network infrastructure necessary for today’s applications. Without the ability to store, retrieve, update, and delete data (when needed), the usefulness and scope of web and desktop apps becomes very limited.

Install , Secure and Performance Tuning of MariaDB Server

تعتبر معرفة كيفية تثبيت وإدارة وتكوين خادم قاعدة بيانات (بحيث يعمل كما هو متوقع) مهارة أساسية يجب أن يمتلكها كل مسؤول نظام.

في هذا المقال، سنستعرض بإيجاز كيفية تثبيت وتأمين خادم قاعدة بيانات MariaDB ومن ثم سنشرح كيفية تكوينه.

تثبيت وتأمين خادم MariaDB

في CentOS 7.x، استبدلت MariaDB MySQL، الذي لا يزال متوفرًا في Ubuntu (بالإضافة إلى MariaDB). الأمر نفسه ينطبق على openSUSE.

لأسباب تبسيطية، سنستخدم فقط MariaDB في هذا البرنامج التعليمي، ولكن يرجى ملاحظة أنه بالإضافة إلى وجود أسماء مختلفة وفلسفات تطوير مختلفة، كل من أنظمة إدارة قواعد البيانات العلاقية (RDBMSs اختصارًا) متطابقة تقريبًا.

وهذا يعني أن أوامر الجانب العميل متطابقة على كل من MySQL و MariaDB، وأن ملفات التكوين تحمل نفس الأسماء وتوجد في نفس الأماكن.

لتثبيت MariaDB، قم بالتالي:

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
# yum update && yum install mariadb mariadb-server # CentOS 

--------------- On Debian and Ubuntu --------------- 
$ sudo aptitude update && sudo aptitude install mariadb-client mariadb-server 

--------------- On openSUSE --------------- 
# zypper update && zypper install mariadb mariadb-tools # openSUSE

يرجى ملاحظة أنه في Ubuntu، سيُطلب منك إدخال كلمة مرور لمستخدم root لنظام إدارة قواعد البيانات.

بمجرد تثبيت الحزم أعلاه، تأكد من تشغيل خدمة قاعدة البيانات وتنشيطها للبدء التلقائي عند التمهيد (في CentOS و openSUSE ستحتاج إلى تنفيذ هذه العملية يدويًا، بينما في Ubuntu سيكون قد تم التعامل مع هذا لك بالفعل):

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
# systemctl start mariadb && systemctl enable mariadb 

--------------- On openSUSE --------------- 
# systemctl start mysql && systemctl enable mysql

ثم قم بتشغيل النص البرمجي mysql_secure_installation. سيتيح لك هذا العملية:

  1. قم بتعيين / إعادة تعيين كلمة المرور لمستخدم جذر RDBMS
  2. إزالة تسجيل الدخول المجهول (مما يتيح فقط للمستخدمين الذين لديهم حساب صالح تسجيل الدخول إلى RDBMS)
  3. تعطيل وصول المستخدم الجذر للآلات الأخرى بخلاف localhost
  4. إزالة قاعدة البيانات التجريبية (التي يمكن لأي شخص الوصول إليها)
  5. تنشيط التغييرات المرتبطة بالنقاط من 1 إلى 4.

للحصول على وصف مفصل لهذه العملية، يمكنك الرجوع إلى القسم “تثبيت قاعدة بيانات MariaDB في RHEL/CentOS/Fedora و Debian/Ubuntu” في تثبيت قاعدة بيانات MariaDB في RHEL/CentOS/Fedora و Debian/Ubuntu.

تكوين خادم MariaDB

تُقرأ الخيارات الافتراضية للتكوين من الملفات التالية بالترتيب المعطى: /etc/mysql/my.cnf، /etc/my.cnf، و ~/.my.cnf.

غالبًا ما يكون هناك فقط /etc/my.cnf. على هذا الملف سنقوم بتعيين إعدادات الخادم بشكل عام (التي يمكن تجاوزها بنفس الإعدادات في ~/.my.cnf لكل مستخدم).

أول شيء يجب علينا ملاحظته حول my.cnf هو أن الإعدادات مُنظمة في فئات (أو مجموعات) حيث يتم وضع اسم الفئة بين قوسين مربعين.

تُعطى تكوينات نظام الخادم في القسم [mysqld]، حيث ستجد عادةً فقط الإعدادات الأولى في الجدول أدناه. بقية الخيارات هي خيارات أخرى تُستخدم بشكل متكرر (حيث سنقوم، عند الضرورة، بتغيير القيمة الافتراضية بقيمة مخصصة نختارها):

Setting and description Default value
datadir is the directory where the data files are stored. datadir=/var/lib/mysql
socket indicates the name and location of the socket file that is used for local client connections. Keep in mind that a socket file is a resource that is utilized to pass information between applications. socket=/var/lib/mysql/mysql.sock
bind_address is the address where the database server will listen on for TCP/IP connections. If you need your server to listen on more than one IP address, leave out this setting (0.0.0.0 which means it will listen on all IP addresses assigned to this specific host).

سنقوم بتغيير هذا لتوجيه الخدمة للاستماع فقط على عنوانها الرئيسي (192.168.0.13):

bind_address=192.168.0.13

bind_address=0.0.0.0
port represents the port where the database server will be listening.

سنقوم بتغيير القيمة الافتراضية (3306) بـ 20500 (ولكن علينا التأكد من عدم استخدام أي منفذ آخر):
port=20500

بينما سيقول بعض الناس أن الأمان من خلال الغموض ليس ممارسة جيدة، فإن تغيير منافذ التطبيق الافتراضية بمنافذ أعلى هو طريقة بدائية – ولكن فعالة – لردع فحوص المنافذ.

port=3306
innodb_buffer_pool_size is the buffer pool (in bytes) of memory that is allocated for data and indexes that are accessed frequently when using Innodb (which is the default in MariaDB) or XtraDB as storage engine.

سنقوم بتغيير القيمة الافتراضية إلى 256 ميجابايت:

innodb_buffer_pool_size=256M

innodb_buffer_pool_size=134217728
skip_name_resolve indicates whether hostnames will be resolved or not on incoming connections. If set to 1, as we will do in this guide, only IP addresses.

ما لم تحتاج إلى أسماء مضيفين لتحديد الأذونات، من المستحسن تعطيل هذه المتغيرة (لتسريع الاتصالات والاستعلامات) عن طريق تعيين قيمتها إلى 1:

skip_name_resolve=1

skip_name_resolve=0
query_cache_size represents the size (in bytes) available to the query cache in disk, where the results of SELECT queries are stored for future use when an identical query (to the same database and using the same protocol and same character set) is performed.

يجب عليك اختيار حجم ذاكرة التخزين المؤقت للاستعلامات يتناسب مع احتياجاتك بناءً على 1) عدد الاستعلامات المتكررة، و 2) العدد التقريبي للسجلات التي من المتوقع أن تعيد هذه الاستعلامات المتكررة. سنقوم بتعيين هذه القيمة إلى 100 ميجابايت في الوقت الحالي:

query_cache_size=100M

query_cache_size=0 (which means it is disabled by default)
max_connections is the maximum number of simultaneous client connections to the server. We will set this value to 30:
max_connections=30Each connection will use a thread, and thus will consume memory. Take this fact into account while setting max_connections.
max_connections=151
thread_cache_size indicates the numbers of threads that the server allocates for reuse after a client disconnects and frees thread(s) previously in use. In this situation, it is cheaper (performance-wise) to reuse a thread than instantiating a new one.

مرة أخرى، يعتمد هذا على عدد الاتصالات التي تتوقعها. يمكننا بأمان تعيين هذه القيمة إلى نصف عدد max_connections:

thread_cache_size=15

thread_cache_size=0 (disabled by default)

في CentOS، سنحتاج إلى إبلاغ SELinux بالسماح لـ MariaDB بالاستماع على منفذ غير قياسي (20500) قبل إعادة تشغيل الخدمة:

# yum install policycoreutils-python
# semanage port -a -t mysqld_port_t -p tcp 20500

ثم أعد تشغيل خدمة MariaDB.

ضبط أداء MariaDB

لمساعدتنا في التحقق وضبط التكوين وفقًا لاحتياجاتنا الخاصة، يمكننا تثبيت mysqltuner (نص يقدم اقتراحات لتحسين أداء خادم قواعد البيانات الخاص بنا وزيادة استقراره):

# wget https://github.com/major/MySQLTuner-perl/tarball/master
# tar xzf master

ثم تغيير الدليل إلى المجلد المستخرج من ملف الضغط المضغوط (قد تختلف النسخة الدقيقة في حالتك):

# cd major-MySQLTuner-perl-7dabf27

وتشغيله (سيُطلب منك إدخال بيانات اعتماد حساب MariaDB الإداري الخاص بك)

# ./mysqltuner.pl

إن إخراج النص هو في حد ذاته مثير للاهتمام، ولكن دعونا نتجاوز إلى الأسفل حيث تُدرج المتغيرات التي يجب ضبطها مع القيمة الموصى بها:

MariaDB Performance Tunning

إعداد query_cache_type يشير إلى ما إذا كان ذاكرة التخزين المؤقت للاستعلام معطلة (0) أو ممكّنة (1). في هذه الحالة، ينصحنا mysqltuner بتعطيلها.

لذلك لماذا يُنصحنا بتعطيلها الآن؟ السبب هو أن ذاكرة التخزين المؤقت للاستعلام مفيدة في الغالب في سيناريوهات القراءة العالية / الكتابة المنخفضة (وهذا ليس حالتنا، حيث أننا للتو نصبنا خادم قواعد البيانات).

تحذير: قبل إجراء تغييرات على تكوين خادم إنتاج، يُشجع بشدة على استشارة مسؤول قاعدة بيانات خبير للتأكد من أن التوصية التي يقدمها mysqltuner لن تؤثر سلبًا على إعداد موجود.

ملخص

في هذا المقال قمنا بشرح كيفية تكوين خادم قاعدة بيانات MariaDB بعد تثبيته وتأمينه. المتغيرات في التكوين المدرجة في الجدول أعلاه هي فقط بعض الإعدادات التي قد ترغب في النظر فيها أثناء تحضير الخادم للاستخدام أو عند ضبطه لاحقًا. يُرجى الرجوع دائمًا إلى توثيق MariaDB الرسمي قبل إجراء التغييرات أو الرجوع إلى نصائحنا لضبط أداء MariaDB:

لا تفوت: 15 نصيحة مفيدة لضبط وتحسين أداء MariaDB

كالعادة، لا تتردد في إعلامنا إذا كان لديك أي أسئلة أو تعليقات حول هذا المقال. هل هناك إعدادات خادم أخرى تفضل استخدامها؟ لا تتردد في مشاركتها مع بقية المجتمع باستخدام نموذج التعليق أدناه.

Source:
https://www.tecmint.com/install-secure-performance-tuning-mariadb-database-server/