В этой статье я опишу процесс переноса каталога данных MySQL в отдельное место, а именно на рейд 10 уровня из 4 дисков, это позволит увеличить производительность.
Возьму сервер HP DL360p Gen8 с рейд контроллером Smart Array P420i, также возьму 6 SSD дисков Samsung 883 DCT Enterprise 240GB 2.5″ SATA III V-NAND MLC (MZ-7LH240NE).
Из двух дисков создам зеркальный рейд 1 и на него установлю операционную систему Ubuntu 18.04, из остальных 4 SSD создам рейд 10 уровня, который будет использоваться только для базы данных.
Переключимся на root пользователя:
sudo -i
Остановим MySQL сервер:
systemctl stop mysql
systemctl status mysql
Сделаем копию файлов баз данных:
mkdir /var/lib/mysql_ixnfo.com
cp -r /var/lib/mysql/* /var/lib/mysql_ixnfo.com/
Удаляем файлы:
rm /var/lib/mysql/* -Rf
Посмотрим список доступных дисковых систем:
fdisk -l
fdisk -l | grep '/dev/sd'
У меня отобразилось:
Disk /dev/sda: 223.6 GiB, 240021504000 bytes, 468792000 sectors
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 468789247 468785152 223.5G Linux filesystem
Disk /dev/sdb: 447.1 GiB, 480047095808 bytes, 937591984 sectors
Создам раздел на втором рейде:
fdisk /dev/sdb
n
p
1
Enter
Enter
w
fdisk -l | grep '/dev/sd'
mkfs.ext4 /dev/sdb1
df -h
Монтируем в директорию с базами данных только что созданный раздел:
mount /dev/sdb1 /var/lib/mysql
Посмотрим его UUID:
sudo blkid
У меня отобразилось:
/dev/sdb1: UUID="54bf0d45-c190-4185-968d-b440537122bd" TYPE="ext4" PARTUUID="d2090c9f-01"
Для автоматического монтирования при запуске операционной системы откроем файл /etc/fstab в текстовом редакторе (в редакторе nano клавиши Ctrl+X для выхода и y/n для сохранения или отмены изменений):
nano /etc/fstab
Я добавил:
UUID=54bf0d45-c190-4185-968d-b440537122bd /var/lib/mysql ext4 defaults 0 0
Из ранее сделанной копии копируем файлы баз данных на смонтированный рейд 10:
cp -r /var/lib/mysql_ixnfo.com/* /var/lib/mysql/
Установим правильного владельца и права:
chown mysql:mysql /var/lib/mysql/ -R
chmod 755 /var/lib/mysql
Проверим:
ls -l /var/lib/mysql/
Запускаем MySQL сервер:
systemctl start mysql
systemctl status mysql
Перезапустим сервер чтобы убедится что рейд 10 автоматически смонтировался и сервер баз данных успешно запустился:
reboot
После перезапуска заметил стандартную директорию для потерянных файлов, я ее удалил и перезапустил MySQL:
rm -d /var/lib/mysql/lost+found
systemctl restart mysql
При желании можно смонтировать рейд в другую директорию и указать в my.cnf путь к ней:
[mysqld]
datadir=/mnt/sdb1/mysql
socket=/mnt/sdb1/mysql/mysql.sock
log-bin=/mnt/sdb1/mysql/mysql-bin
[mysqld_safe]
datadir=/mnt/sdb1/mysql
Посмотреть какая директория указана можно так:
mysql -u root -p
select @@datadir;
Скопируем файлы используя rsync:
rsync -av /var/lib/mysql /mnt/sdb1/mysql
mv /var/lib/mysql /var/lib/mysql.mybakup
Укажем новую директорию для apparmor в файле /etc/apparmor.d/tunables/alias:
alias /var/lib/mysql/ -> /mnt/sdb1/mysql/,
И перезапустим его:
systemctl restart apparmor
Смотрите также мои статьи:
Обновление прошивки Smart Array P420i
Управление разделами диска в Ubuntu используя fdisk