Skip to content


Mettre entièrement MySQL en RAM grâce à ramfs ou tmpfs

Introduction

Je vais enfoncer des portes ouvertes, dire des évidences !

  • MySQL travaille avec la mémoire vive, nous sommes tous d'accord avec cela.
  • Mais avant qu'elle ne mettes ses résultats en RAM elle travaille sur /var/lib/mysql.
  • Le répertoire /var/lib/mysql est la plupart du temps sur l'un de vos disques...

Et bien pourquoi ne pas mettre MySQL complètement en RAM lorsque elle calcule, trie, effectue des requêtes ? (Un intermédiaire est d'allouer de la RAM associée avec la variable tmpdir de MySQL)

Nous allons voir comment mettre /var/lib/mysql en RAM et ceci de manière excessivement simple !

  • montage de /var/tmpfs préalablement créé en tmpfs
  • copie de /var/lib/mysql dans le répertoire /var/tmpfs

Montage d'un répertoire en RAM

Création du répertoire qui va accueillir MySQL et montage de celui-ci en RAM.

mkdir /var/tmpfs -p
mount -t tmpfs -o size=1G tmpfs /var/tmpfs
chown -R mysql:mysql /var/tmpfs

 

Ce qui peut donner dans /etc/fstab

tmpfs  /var/tmpfs                         tmpfs  nodev,nosuid,noexec,noatime,size=1G              0 0

Copie de MySQL

service mysql stop
cp -Rfv /var/lib/mysql /var/tmpfs/
chown -R mysql:mysql /var/tmpfs/mysql
vi /etc/my.cnf

Nous allons changer les indications /var/lib dans my.cnf en /var/tmpfs

datadir /var/tmpfs/mysql

Le souci qui va se présenter, est que si vous arrêtez ou redémarrez le serveur... La RAM est vidée et votre base de données avec ! 🙁

Il faut donc prévoir à l'arrêt de la machine une copie sur disque (/var/lib/mysql) de la base de données qui est en RAM... Puis au démarrage une copie de ce qui est sur disque en RAM après le montage correct du tmpfs !

A l'arrêt :

cp -Rfv /var/tmpfs/mysql /var/lib/
chown -R mysql:mysql /var/tmpfs/mysql

Au démarrage :

cp -Rfv /var/lib/mysql /var/ramfs/
chown -R mysql:mysql /var/tmpfs/mysql

Nous allons donc créer un script copie-bdd.sh

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          copie-bdd.sh
# Required-Start:    mysql
# Required-Stop:     mysql
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Copie BDD pour RAM
# Description:       Copie BDD pour RAM.
### END INIT INFO
 
case "$1" in
  start)
    service mysql stop
    cp -Rfv /var/lib/mysql /var/ramfs/
    chown -R mysql:mysql /var/tmpfs/mysql
    service mysql start
  ;;
 
  stop)
    service mysql stop
    cp -Rfv /var/tmpfs/mysql /var/lib/
    chown -R mysql:mysql /var/tmpfs/mysql
  ;;
 
  *)
    echo "Usage: /etc/init.d/copie-bdd.sh {start|stop}"
    exit 1
    ;;
esac
 
exit 0

Enregistrer ce script dans /etc/init.d/

Rendre celui-ci executable :

>chmod +x /etc/init.d/copie-bdd.sh

Nous allons activer ce script pour les niveaux 2 3 4 5.

chkconfig --level 2 3 4 5 copie-bdd.sh on

Voilà ! 🙂

Si votre base de données est trop importante en taille et que vous ne pouvez mettre celle-ci entièrement en RAM.

Il existe une solution plus adéquate. Voir mon prochain article http://monblog.system-linux.net/blog/2011/08/29/mettre-tmpdir-de-mysql-en-ram-grace-tmpfs/ !

- Fin -

Print Friendly

Posted in Debian, Important, Linux, Mandriva, Technique, Toutes. Tagged with , , , , , .

4 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. jems said

    Mysql en RAM, ok, mais quid de la persistence ? Ce sera traité dans le prochain article ? Je pense surtout à une coupure éléctrique brutale pendant que mysql tourne, perte de données obligatoire ?

  2. admin said

    Bonjour,

    Effectivement la coupure électrique est un souci, en dehors d'un onduleur qui lance alors l'arrêt doux de la machine...
    Ou d'un démon synchronisant de manière régulière ou en cas de changement...
    A voir !

  3. admin said

    A voir aussi les log binaires distants !
    🙂

Continuing the Discussion

  1. Mettre mysql entièrement en RAM | Bux Blog linked to this post on 28 février 2012

    [...] la base de donnée entièrement en ram. Voici donc un petit tutoriel que j’ai trouvé chez Laurent Besson qui vous permettra de mettre mysql en [...]

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.



/* */
Creative Commons License
Cette création par Laurent Besson est mise à disposition selon les termes de la licence Creative Commons Paternité-Partage des Conditions Initiales à l'Identique 2.0 France.