Сначала сделайте резервную копию всех баз данных.
Скопируем его в /var/lib/mysql.bak:
sudo cp -pRL /var/lib/mysql /var/lib/mysql.bak
Создайте каталог для RAM-диска.
sudo mkdir /ramdisk
Заранее уточните размер папки с базами данных MySQL/MariaDB командой:
du -hs /var/lib/mysql/
Исходя из полученного размера и учитывая дальнейший рост базы нужно установить соответствующий размер RAM-диска (виртуального диска в оперативной памяти). Я назначил рамдиску размер 4ГБ.Вам решать, сколько места вы хотите, просто убедитесь, что оно может вместить все данные, которые вы будете записывать в базу данных.
Монтируем соответствующий раздел командой:
sudo mount -t tmpfs -o size=4G tmpfs /ramdisk/
Останавливаем MySQL/MariaDB командой:
sudo service mysql stop
или
sudo /etc/init.d/mysql stop
Перемещаем файлы баз данных MySQL/MariaDB в раздел RAM-диска.
sudo mv /var/lib/mysql /ramdisk/mysql
Создаём символическую ссылку на RAM-диск.
sudo ln -s /ramdisk/mysql /var/lib/mysql
Изменяем права папки на MySQL, чтобы разрешить доступ.
sudo chown mysql:mysql /ramdisk/mysql
Перезапустите MySQL, чтобы изменения вступили в силу.
sudo service mysql restart
или
sudo /etc/init.d/mysql restart
Восстановление баз данных
Т.к. базы данных сохраняются на RAM-диске, они будут удаляться каждый раз при выключении компьютера.
Вот шаги для его восстановления.
Удалите ранее созданную символическую ссылку на mysql ramdisk.
sudo rm -rf /var/lib/mysql
Скопируйте и восстановите базы данных из резервной копии.
sudo cp -pRL /var/lib/mysql.bak /var/lib/mysql
Скрипты для удобства
Выполнение всех вышеперечисленных команд каждый раз, когда я включается/перезагружается сервер, является очень утомительной задачей, поэтому для удобства я создал сценарии для восстановления и перемещения баз данных в оперативную память.
Скрипт восстановления базы данных
#!/bin/bash # Script for restoring backed up database that was moved to the RAM Disk. if [ $(uname) = "Linux" ]; then # Delete detached symlink [ -L /var/lib/mysql ] && sudo rm -rf /var/lib/mysql # Restore backups [ -d /var/lib/mysql.bak ] && sudo cp -pRL /var/lib/mysql.bak /var/lib/mysql else echo "Unsupported platform." fi
Скрипт для переноса базы данных в оперативную память
#!/bin/bash # Create ramdisk if it doesn't exist. [ ! -d /ramdisk ] && sudo mkdir /ramdisk # Mount ramdisk has been created. [ -d /ramdisk ] && sudo mount -t tmpfs -o size=4G tmpfs /ramdisk/ if [ -d /var/lib/mysql ]; then # Move the mysql databases to the ramdisk if it exists sudo mv /var/lib/mysql /ramdisk/mysql # Create a symbolic link. sudo ln -s /ramdisk/mysql /var/lib/mysql # Change ownership to mysql. [ -d /ramdisk/mysql ] && sudo chown mysql:mysql /ramdisk/mysql else echo "No MySQL directory at /var/lib." fi; # Restart mysql.
sudo /etc/init.d/mysql restart
Это то, что я выполняю каждый раз, когда перезагружаю сервер.
# Restore the data first.
./mysql-ramdisk-restore.sh
# then move it to the RAM.
./mysql-ramdisk.sh
Обязательно убедитесь, что вы создали резервную копию своих баз данных в /var/lib/mysql.bak перед выполнением этих команд.
Добавить комментарий