Ускоряем MySQL используя RAM-диск

Ускоряем MySQL используя RAM-диск

Я работал над проектом, для которого требуется база данных MySQL. Каждый раз, когда я извлекаю изменения из репозитория, мне приходится запускать миграции и заполнять базу данных. Таблицы содержат тысячи строк данных, и на их заполнение уходит почти час. Мой коллега заметил это и научил меня хорошему трюку для ускорения операций с базой данных, а именно работе с MySQL используя RAM-диск, о котором я расскажу в этом посте.

Зачем использовать оперативную память

RAM (оперативное запоминающее устройство) намного быстрее для чтения и записи, чем для других типов хранилищ на компьютере, таких как жесткий диск / ssd, где MySQL по умолчанию хранит базу данных. Перемещение базы данных в оперативную память может значительно увеличить скорость ввода и вывода операций с базой данных.

Недостатки работы с MySQL используя RAM-диск

ОЗУ — это энергозависимая память, что означает, что для сохранения хранимых в ней данных требуется питание. Это означает, что данные, хранящиеся в оперативной памяти, исчезнут после выключения компьютера. В моем случае я использую базу данных только для тестирования и разработки на моем локальном компьютере. Если мне когда-нибудь понадобится сохранить данные для тестирования, я просто сделаю резервную копию базы данных, а затем восстановлю ее в следующий раз, когда она мне понадобится.

Перенос баз данных в оперативную память

Теперь, когда вы знаете преимущества и недостатки перемещения баз данных MySQL на RAM-диск, я расскажу вам, как этого добиться.

Сначала сделайте резервную копию всех баз данных. Скопируем его в /var/lib/mysql.bak

sudo cp -pRL /var/lib/mysql /var/lib/mysql.bak

Создайте каталог для RAM-диска.

sudo mkdir /tmp/ramdisk

Установите его. Я назначил рамдиску размер 2ГБ. Вам решать, сколько места вы хотите, просто убедитесь, что оно может вместить все данные, которые вы будете записывать в базу данных.

sudo mount -t tmpfs -o size=2G tmpfs /tmp/ramdisk/

Переместите базы данных MySQL на RAM-диск.

sudo mv /var/lib/mysql /tmp/ramdisk/mysql

Создайте символическую ссылку на RAM-диск.

sudo ln -s /tmp/ramdisk/mysql /var/lib/mysql

Измените принадлежность на MySQL, чтобы разрешить доступ.

sudo chown mysql:mysql /tmp/ramdisk/mysql

Перезапустите MySQL, чтобы изменения вступили в силу.

sudo /etc/init.d/mysql restart

Теперь мы закончили! После перемещения баз данных на RAM-диск выполнение миграции и сеялки заняло всего минуту по сравнению с почти часом при использовании жесткого диска.

Восстановление баз данных

Поскольку базы данных сохраняются на 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 /tmp/ramdisk ] && sudo mkdir /tmp/ramdisk
# Mount ramdisk has been created.
[ -d /tmp/ramdisk ] && sudo mount -t tmpfs -o size=2G tmpfs /tmp/ramdisk/
if [ -d /var/lib/mysql ]; then
# Move the mysql databases to the ramdisk if it exists
sudo mv /var/lib/mysql /tmp/ramdisk/mysql
# Create a symbolic link.
sudo ln -s /tmp/ramdisk/mysql /var/lib/mysql
# Change ownership to mysql.
[ -d /tmp/ramdisk/mysql ] && sudo chown mysql:mysql /tmp/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 перед выполнением этих команд.

Оригинал статьи


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.


Unlix © Все права защищены 2021

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!