Вступ

MySQL є однією з найпопулярніших систем управління базами даних, і вміти переміщувати каталог даних може стати в пригоді в різних випадках:

  • Оптимізація місця на диску. Основний диск може бути заповнений, і вам потрібно перенести бази даних на інший диск чи розділ.
  • Покращення продуктивності. Використання SSD чи інших швидших накопичувачів для каталогів баз даних може значно прискорити роботу MySQL.
  • Організація файлової системи. Ви можете захотіти зберігати дані бази в окремій директорії для легшого резервного копіювання чи моніторингу.

У цій статті ми розглянемо, як перемістити каталог даних MySQL в Ubuntu 24.04.

Передумови

Для виконання інструкцій вам знадобиться:

  • Сервер із встановленою із встановленою Ubuntu 24.04, скачати яку можна ось тут.
  • Користувач з правами sudo.
  • Встановлений сервер MySQL. Якщо ви ще не встановили MySQL, перегляньте мою статтю про встановлення MySQL на Ubuntu.
  • Монтований диск в /data каталог. В цій інструкції переміщаю дані в /data каталог, але Ви можете перемістити в інше місце лиш не забудьте замінити /data на ваш каталог.

Кроки для переміщення каталогу даних MySQL

Інформація, якою керує сервер MySQL, зберігається в каталозі, відомому як каталог даних. Щоб підготуватися до переміщення каталогу даних MySQL, давайте перевіримо поточне розташування, запустивши інтерактивний сеанс MySQL з використанням облікових даних адміністратора. Виконайте таку команду, щоб отримати активний каталог даних екземпляра MySQL:

mysql -uUSER -p -e 'SHOW VARIABLES WHERE Variable_Name LIKE "%dir"'

Замініть USER на вашого користувача MySQL, та коли буде запропоновано введіть пароль.
Вивід команди буде наступним:

+-----------------------------+----------------------------+
| Variable_name               | Value                      |
+-----------------------------+----------------------------+
| basedir                     | /usr/                      |
| character_sets_dir          | /usr/share/mysql/charsets/ |
| datadir                     | /var/lib/mysql              |
| innodb_data_home_dir        |                            |
| innodb_doublewrite_dir      |                            |
| innodb_log_group_home_dir   | ./                         |
| innodb_temp_tablespaces_dir | ./#innodb_temp/            |
| innodb_tmpdir               |                            |
| lc_messages_dir             | /usr/share/mysql/          |
| plugin_dir                  | /usr/lib/mysql/plugin/     |
| replica_load_tmpdir         | /tmp                       |
| slave_load_tmpdir           | /tmp                       |
| tmpdir                      | /tmp                       |
+-----------------------------+----------------------------+

Вам треба звернути увагу на поле datadir, дане поле вказує на каталог за замовчування, а саме: /var/lib/mysql/. Його нам і слід буде перемістити. Також ви можете використати іншу команду, щоб дізнатись місце знаходження datadir каталогу:

mysql -uUSER -p -e 'SELECT @@datadir;'

Вивід цієї команди буде значно локанічнішим і матиме наступний вигляд:

+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

Перед тим як переміщувати дані, зупиніть службу MySQL:

sudo systemctl stop mysql.service

Після того як ми знайшли необхідний каталог та зупинили службу MySQL, щоб безпечного перемістити файли встановіть rsync:

sudo apt install rsync -y

Тепер коли в нас все готово, давайте скопіюємо дані MySQL у новий каталог:

sudo rsync -av /var/lib/mysql /data

Використання -a прапора зберігає дозволи та інші властивості каталогу, а -v забезпечує докладний вивід, щоб ви могли стежити за прогресом.

Для того, щоб замінити значення datadir нам необхідно вікдрити файл конфігурації бажаним текстовим редактором:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Знайдіть рядок, який починається на datadir=. Розкоментуйте рядок, видаливши знак решітки ( #), і змініть шлях, щоб відобразити нове розташування. У цьому випадку оновлений вміст файлу буде таким:

datadir=/data/mysql

Зробивши це оновлення, збережіть і закрийте файл. Для того щоб mysql успішно запустився, нам прийдеться ще налаштувати AppArmor. Якщо коротко то: AppArmor — це проста у використанні реалізація модуля безпеки Linux, яка обмежує можливості та дозволи програм за допомогою профілів , які встановлюються для кожної програми. 
Щоб налаштувати AppArmor нам потрібно буде додати правило перенаправлення каталогу:

sudo echo "alias /var/lib/mysql/ -> /data/mysql/," | sudo tee -a /etc/apparmor.d/tunables/alias

Але цього може бути не достатньо, тому можете просто вимкнути профіль AppArmor для MySQL:

sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/disable/usr.sbin.mysqld

Щоб застосувати зміни, перезапустіть AppArmor

sudo systemctl restart apparmor

Після того як ви перезапустили AppArmor, не забудьте перезапустити щей mysql:

sudo systemctl restart mysql

Щоб переконатись, що зміни прийнялись, виконайте уже знайому нам команду:

mysql -uUSER -p -e 'SELECT @@datadir;'

Не забудьте замінити USER на вашого користувача MySQL.

Висновок

Переміщення каталогу даних MySQL — це важливий навик, який допоможе ефективніше керувати вашою базою даних, зокрема на сервері з обмеженими ресурсами. Дотримуйтесь вищенаведених кроків, щоб безпечно виконати цю задачу. Якщо у вас виникнуть проблеми, перевірте права доступу до нового каталогу або налаштування AppArmor.

Від ittutorials

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *