Вступ
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 забезпечує докладний вивід, щоб ви могли стежити за прогресом.
Примітка
Переконайтеся, що в кінці шляху до каталогу немає слеша, який може бути доданий при використанні автозаповнення за допомогою клавіші Tab. Якщо слеш є, rsync перемістить вміст каталогу безпосередньо в каталог /data, замість того щоб перенести його в окрему директорію mysql.
Для того, щоб замінити значення 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.