Полуфинално нещата ги направих така:
1. Създадох върху автоматично монтираната ми от Ubuntu-то tmpfs, като /dev/shm следните две директории:
# mkdir /dev/shm/mysql
# mkdir /dev/shm/mysql/temp
Ако ползвате дистрибуция която не монтира автоматично tmpfs файлова система. Може да си монтирате такава по следния начин:
# mkdir -p /mnt/tmp
# mount -t tmpfs -o size=256m tmpfs /mnt/tmp
В /etc/fstab се описва по този начин:
tmpfs /mnt/tmp tmpfs size=256M,mode=0777 0 0
2. Новосъздадените директории ги направих собственост на mysql. Посредством тези команди:
# chown mysql:mysql /dev/shm/mysql/
# chown mysql:mysql /dev/shm/mysql/temp
3. Редактирах my.cnf-то, като промених тези два параметъра datadir и tmpdir. В моят случай така:
datadir = /dev/shm/mysql
tmpdir = /dev/shm/mysql/temp
4. За да нямам проблеми с apparmor-а във файла /etc/apparmor.d/usr.sbin.mysqld добавих следните редове:
# Give access of mysql to use /dev/shm
# Start
/dev/shm/mysql r,
/dev/shm/mysql/** rwk,
# End
Ако не се ползва apparmor тази стъпка не е нужна. Ако някой ползва SELinux трябва да извърши еквивалента на тази конфигурация само че за SELinux.
5. Спрях mysql сървъра:
/etc/init.d/mysql stop
6. Копирах всички файлове на mysql-а от харда във рама:
cp -ar /var/lib/mysql/* /dev/shm/mysql/
7. Стартирах отново mysql сървъра:
/etc/init.d/mysql start
Воала базата ми данни тръгна доста по-бързо!
От тук насам вече почват тънките моменти.
Трябва да се има предвид, че при рестарт на машината цялата информация от /dev/shm ще изчезне! Затова периодично през cron-а в ненатоварените моменти пускам този "скрипт" mysqlbackup-shm.sh :
# /bin/sh
# Backup All Mysql files from RAM to hard drive
cp -ar /dev/shm/mysql/* /var/backups/mysql/dev/shm/ &
който ми синхронизира RAM-а със хардиска.
Плюс са по голяма сигурност си пускам и всяка нощ
Automysqlbackup.shИ за да съм абсолютно сигурен, че нищо няма да се намаже, преди рестарт на машината бих препоръчал извършването на стъпка 5 и пускането на mysqlbackup-shm.sh
След като машината се стартира отново за да не се повтарят горните стъпки може да се пусне mysql-on-tmpfs.sh:
# /bin/bash
# Mysql to tmpfs
echo After script finish you need to start mysql server
mkdir /dev/shm/mysql &&
mkdir /dev/shm/mysql/temp &&
chown mysql:mysql /dev/shm/mysql/ &&
chown mysql:mysql /dev/shm/mysql/temp &&
/etc/init.d/mysql stop &&
cp -ar /var/backups/mysql/dev/shm/* /dev/shm/mysql/
Дано съм бил полезен и на някой друг който е решил да пусне mysql върху tmpfs
Молбата ми е ако има някой по-добър с bash-а и със init скриптовете да каже как може да се направи автоматично при shutdown/reboot на машината де се изпълнява стъпка 5 и mysqlbackup-shm.sh. Респективно при стартиране да се изпълнява mysql-on-tmpfs.sh след което да се стартира автоматично mysql сървъра.