Налаштування сервера БД
У цьому уроці ти сконфігуруєш сервер бази даних. За допомогою цих налаштувань ти зможеш змінювати різні аспекти роботи сервера, які допоможуть пристосувати сервер під конкретні задачі. MySQL зберігає свою конфігурацію в файлі, розташування якого залежить від ОС та типу встановлення сервера MySQL. Щоб знайти розташування цього файлу, у Linux можна виконати ось таку команду:
Ця команда виведе значення всіх конфігураційних опцій сервера. На самому початку можна знайти файли, з яких ці опції були завантажені, наприклад, /etc/my.cnf та /etc/mysql/my.cnf. Зазирнемо в ці файли:
Другий файл містить коментар про структуру файлу, та команду includedir. За допомогою цієї команди позначаються теки, з яких MySQL завантажує додаткові файли конфігурації. Загалом це всі файли з тек з includedir, ім'я яких закінчується на .cnf. Якщо передивитись усі файли в цих теках, то можна знайти саме той, де, власне зберігаються конфігураційні опції:
Файл mysqld.cnf є головним конфігураційним файлом:
А ось і вміст файлу:
#
# The MySQL database server configuration file.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
[mysqld]
#
# * Basic Settings
#
user = mysql
# pid-file = /var/run/mysqld/mysqld.pid
# socket = /var/run/mysqld/mysqld.sock
# port = 3306
# datadir = /var/lib/mysql
# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0
mysqlx-bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer_size = 16M
# max_allowed_packet = 64M
# thread_stack = 256K
# thread_cache_size = -1
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover-options = BACKUP
# max_connections = 151
# table_open_cache = 4000
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
#
# Log all queries
# Be aware that this log type is a performance killer.
# general_log_file = /var/log/mysql/query.log
# general_log = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
# slow_query_log = 1
# slow_query_log_file = /var/log/mysql/mysql-slow.log
# long_query_time = 2
# log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
# server-id = 1
# log_bin = /var/log/mysql/mysql-bin.log
# binlog_expire_logs_seconds = 2592000
max_binlog_size = 100M
# binlog_do_db = include_database_name
# binlog_ignore_db = include_database_name
Трохи деталей:
-
Користувач, під яким запущений демон (сервіс) бази даних (
user). За замовчуванням, MySQL запускається під користувачемmysql, який створюється автоматично під час інсталяції. Насправді користувача сервісу змінюють доволі рідко, але корисно знати, де його можна подивитись, якщо потрібно буде налаштувати додаткові права в системі. -
Тека
datadir, де MySQL зберігає файли баз даних та бінарних логів — спеціальних файлів, які зберігають історію всіх змін, що відбувались в БД. Бінарні логи зберігають інформацію як про зміни структури бази даних, так і про зміну, власне, даних. З їх допомогою можна відновити базу даних до стану, у якому вона була в минулому.datadirчасто змінюють тоді, коли потрібно налаштувати роботу MySQL в контейнерах (Docker). Тоді вказують шлях до теки, яка примаунчена (mounted) з persistent storage. -
bind-address— це IP-адреса, на якій сервер приймає мережеві запити від клієнтів. За замовчуванням вона дорівнює127.0.0.1. Також уbind-addressможе бути IP-адреса віртуальної машини, тоді сервер прийматиме підключення від будь-якого іншого комп'ютеру в мережі.bind-addressможна ще змінити на0.0.0.0. Такий варіант є найзручнішим, оскільки дозволяє підключення з інших комп'ютерів у мережі, та при цьому сервер все ще працюватиме, якщо віртуальна машина змінить адресу.
💡 127.0.0.1 — це спеціальна адреса, якою будь-який комп'ютер позначає сам себе. 0.0.0.0 — це інша спеціальна адреса, яка позначає, що MySQL буде приймати запити на будь-яку IP-адресу.
-
port— це TCP-порт, на якому сервер приймає мережеві підключення. За замовчуванням він має значення3306. -
Файл конфігурації дозволяє налаштувати логування. Опція
log_errorвказує шлях до файлу з помилками. -
Набір опцій
slow_query_logдозволяє налаштувати логування повільних SQL-запитів. Завдяки цим логам можна моніторити та оптимізовувати роботу бази даних (про це ми більше поговоримо в темі про моніторинг бази даних).
Коли ти працюватимеш з конфігурацією MySQL на своїй віртуальній машині, то варто звернути увагу на кілька речей:
- Перед тим, як вносити зміни в файл конфігурації, зроби його резервну копію. Так ти зможеш відновити роботу сервера, якщо випадково внесеш некоректні зміни:
💡 Ім'я файлу резервної копії може бути будь-яким. Головне, щоб воно незакінчувалось на .cnf.
- Щоб застосувати зміни, потрібно перезавантажити сервіс на MySQL. На Linux це можна зробити за допомогою наступної команди:
Після перезапуску сервісу, обов'язково перевір його статус:
Якщо сервіс не запуститься, то причину помилки можна буде знайти в файлі логу помилки: