Πώς να εγκαταστήσετε, να ασφαλίσετε και να συντονίσετε την απόδοση του διακομιστή βάσης δεδομένων MariaDB


Ένας διακομιστής βάσης δεδομένων είναι ένα κρίσιμο στοιχείο της υποδομής δικτύου που είναι απαραίτητο για τις σημερινές εφαρμογές. Χωρίς τη δυνατότητα αποθήκευσης, ανάκτησης, ενημέρωσης και διαγραφής δεδομένων (όταν χρειάζεται), η χρησιμότητα και το εύρος των εφαρμογών ιστού και επιτραπέζιων υπολογιστών περιορίζεται πολύ.

Επιπλέον, η γνώση του τρόπου εγκατάστασης, διαχείρισης και διαμόρφωσης ενός διακομιστή βάσης δεδομένων (έτσι ώστε να λειτουργεί όπως αναμένεται) είναι μια βασική ικανότητα που πρέπει να έχει κάθε διαχειριστής συστήματος.

Σε αυτό το άρθρο θα εξετάσουμε εν συντομία τον τρόπο εγκατάστασης και ασφάλειας ενός διακομιστή βάσης δεδομένων MariaDB και στη συνέχεια θα εξηγήσουμε πώς να τον ρυθμίσετε.

Εγκατάσταση και ασφάλεια διακομιστή MariaDB

Στο CentOS 7.x, το MariaDB αντικατέστησε το MySQL, το οποίο εξακολουθεί να βρίσκεται στο Ubuntu (μαζί με το MariaDB). Το ίδιο ισχύει για το openSUSE.

Για συντομία, θα χρησιμοποιήσουμε μόνο το MariaDB σε αυτό το σεμινάριο, αλλά σημειώστε ότι εκτός από διαφορετικά ονόματα και φιλοσοφίες ανάπτυξης, και τα δύο Σχεσιακά Συστήματα Διαχείρισης Βάσεων Δεδομένων (RDBMS δυνατά> για συντομία) είναι σχεδόν πανομοιότυπα.

Αυτό σημαίνει ότι οι εντολές από την πλευρά του πελάτη είναι ίδιες τόσο στο 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. απενεργοποιήστε την πρόσβαση root για μηχανήματα εκτός του localhost
  4. καταργήστε τη δοκιμαστική βάση δεδομένων (στην οποία ο καθένας έχει πρόσβαση)
  5. ενεργοποιήστε τις αλλαγές που σχετίζονται με το 1 έως το 4.

Για μια πιο λεπτομερή περιγραφή αυτής της διαδικασίας, μπορείτε να ανατρέξετε στην ενότητα Εγκατάσταση ανάρτησης στο Install MariaDB Database σε 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).

We will change this to instruct the service to listen only on its main address (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.

We will replace the default value(3306) with 20500 (but we need to make sure nothing else is using that port):
port=20500

While some people will argue that security through obscurity is not good practice, changing the default application ports for higher ones is a rudimentary -yet effective- method to discourage port scans.

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.

We will replace the default value with 256 MB:

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.

Unless you require hostnames to determine permissions, it is advisable to disable this variable (in order to speed up connections and queries) by setting its value to 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.

You should choose a query cache size that matches your needs based on 1) the number of repetitive queries, and 2) the approximate number of records those repetitive queries are expected to return. We will set this value to 100 MB for the time being:

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.

Again, this depends on the number of connections you are expecting. We can safely set this value to half the number of 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 Performance

Για να μας βοηθήσετε στον έλεγχο και τον συντονισμό της διαμόρφωσης σύμφωνα με τις συγκεκριμένες ανάγκες μας, μπορούμε να εγκαταστήσουμε το mysqltuner (ένα σενάριο που θα παρέχει προτάσεις για τη βελτίωση της απόδοσης του διακομιστή βάσης δεδομένων μας και την αύξηση της σταθερότητάς του):

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

Στη συνέχεια αλλάξτε τον κατάλογο στον φάκελο που εξήχθη από το tarball (η ακριβής έκδοση μπορεί να διαφέρει στην περίπτωσή σας):

# cd major-MySQLTuner-perl-7dabf27

και εκτελέστε το (θα σας ζητηθεί να εισαγάγετε τα διαπιστευτήρια του διαχειριστικού λογαριασμού MariaDB)

# ./mysqltuner.pl

Η έξοδος του σεναρίου είναι από μόνη της πολύ ενδιαφέρουσα, αλλά ας περάσουμε στο κάτω μέρος όπου οι μεταβλητές προς προσαρμογή παρατίθενται με την προτεινόμενη τιμή:

Η ρύθμιση query_cache_type υποδεικνύει εάν η προσωρινή μνήμη ερωτήματος είναι απενεργοποιημένη (0) ή ενεργοποιημένη (1). Σε αυτήν την περίπτωση, το mysqltuner μας συμβουλεύει να το απενεργοποιήσουμε.

Γιατί λοιπόν μας συμβουλεύουμε να το απενεργοποιήσουμε τώρα; Ο λόγος είναι ότι η κρυφή μνήμη ερωτήματος είναι χρήσιμη κυρίως σε σενάρια υψηλής ανάγνωσης/χαμηλής εγγραφής (κάτι που δεν συμβαίνει στην περίπτωσή μας, αφού μόλις εγκαταστήσαμε τον διακομιστή της βάσης δεδομένων).

ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Πριν κάνετε αλλαγές στη διαμόρφωση ενός διακομιστή παραγωγής, συνιστάται ιδιαίτερα να συμβουλευτείτε έναν ειδικό διαχειριστή βάσης δεδομένων για να διασφαλίσετε ότι μια σύσταση που δίνεται από το mysqltuner δεν θα επηρεάζουν αρνητικά ένα υπάρχον περιβάλλον.

Περίληψη

Σε αυτό το άρθρο εξηγήσαμε πώς να ρυθμίσετε έναν διακομιστή βάσης δεδομένων MariaDB αφού τον εγκαταστήσουμε και τον ασφαλίσουμε. Οι μεταβλητές διαμόρφωσης που παρατίθενται στον παραπάνω πίνακα είναι μόνο μερικές ρυθμίσεις που μπορεί να θέλετε να λάβετε υπόψη κατά την προετοιμασία του διακομιστή για χρήση ή κατά τον συντονισμό του αργότερα. Να ανατρέχετε πάντα στην επίσημη τεκμηρίωση της MariaDB πριν κάνετε αλλαγές ή να ανατρέχετε στις συμβουλές συντονισμού απόδοσης MariaDB:

Όπως πάντα, μη διστάσετε να μας ενημερώσετε εάν έχετε ερωτήσεις ή σχόλια σχετικά με αυτό το άρθρο. Υπάρχουν άλλες ρυθμίσεις διακομιστή που θέλετε να χρησιμοποιήσετε; Μη διστάσετε να το μοιραστείτε με την υπόλοιπη κοινότητα χρησιμοποιώντας την παρακάτω φόρμα σχολίων.