איך להתקין, לאבטח ולהגדיר את ביצועי שרת מסד הנתונים של 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, יתבקש מכם להזין סיסמה עבור משתמש השורש של RDBMS.

לאחר שהחבילות לעיל הותקנו, יש לוודא כי שירות בסיס הנתונים פועל והופעל כך שיתחיל עם האתחול (ב־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

אפשרויות התצורה המוגדרות כברירת מחדל נקראות מהקבצים הבאים בסדר הנתון: /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.

שוב, זה תלוי במספר החיבורים שאתה מצפה. נוכל להגדיר בבטחה ערך זה למחצית ממספר החיבורים המרבי:

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

לאחר מכן, שינוי ספרייה לתיקייה שחולצה מה-tarball (הגרסה המדויקת עשויה להשתנות במקרה שלך):

# 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/