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

Thank you for reading this post, don't forget to subscribe!

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

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

Скрипты для удобства

Выпол­не­ние всех выше­пе­ре­чис­лен­ных команд каж­дый раз, когда я вклю­чаю свой ком­пью­тер, явля­ет­ся очень уто­ми­тель­ной зада­чей, поэто­му для мое­го удоб­ства я создал сце­на­рии для вос­ста­нов­ле­ния и пере­ме­ще­ния баз дан­ных в опе­ра­тив­ную память.

Вот сце­на­рий вос­ста­нов­ле­ния базы данных

Вот сце­на­рий для пере­но­са базы дан­ных в опе­ра­тив­ную память

Это то, что я выпол­няю каж­дый раз, когда вклю­чаю свой компьютер.

# Restore the data first.
./mysql-ramdisk-restore.sh
# then move it to the RAM.
./mysql-ramdisk.sh

Про­сто убе­ди­тесь, что вы созда­ли резерв­ную копию сво­их баз дан­ных в /var/lib/mysql.bak перед выпол­не­ни­ем этих команд.