Table des matières




Installation
Configurer l'os
Exploitation
Trucs et astuces
Méthodes de résolution des incidents


Install Installation

La branche 5.1 de mysql est encore un peu jeune et comporte plusieurs bugs, mais elle apporte des fonctionnalités fortement utiles en environnement de production.

Récupérer les sources de mysql 5.1.30 et les décompresser.

Utiliser les options de configuration suivantes comporte plusieurs avantages :

- Les bases sont stockées dans un sous répertoire de /home/exports/databases/ ce qui peut correspondre à une partition dédié, une baie de disque, un san...

- L'utilisateur, les noms de répertoires sont prévu pour que plusieurs instances mysql puissent s'éxécuter simultanément, éventuellement avec des version différentes sur un même serveur.
adduser mysql3307 --shell /bin/false --home /home/users/mysql3307 --disabled-password --disabled-login --gid 100


CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
-fno-exceptions -fno-rtti -fomit-frame-pointer" \
PORT=3306\
HOST=tifa\
./configure --localstatedir=/home/exports/databases/mysql$PORT \
--prefix=/home/exports/appli/$HOST/mysql$PORT/ \
--with-comment="$HOST $PORT" \
--with-system-type="Debian" \
--with-machine-type="arm" \
\
--enable-shared \
--enable-static \
--enable-thread-safe-client \
--enable-local-infile \
\
--with-big-tables \
--with-unix-socket-path=/var/run/mysql$PORT/mysql$PORT.sock \
--with-mysqld-user=mysql$PORT \
--with-tcp-port=$PORT \
--with-mysqld-user=mysql$PORT \
--with-libwrap \
--without-ssl \
--without-docs \
--without-readline \
--with-extra-charsets=all \
\
--with-plugins=max-no-ndb \
--without-embedded-server \
--with-embedded-privilege-control \
--without-ndb-docs \
--enable-assembler \
--with-mysqld-ldflags=-all-static \
--with-client-ldflags=-all-static

Ne pas oublier de créer les répertoires :

mkdir /home/exports/databases/mysql$PORT
mkdir /var/run/mysql$PORT/
mkdir /home/exports/appli/$HOST/mysql$PORT/


compiler :

make && make install


Installer les bases :

EXPORT PATH=$PATH:/home/exports/appli/tifa/mysql3306/bin
mysql_install_db


Fixer les permissions :

chown -R mysql3306 /home/exports/databases/mysql3306
chown -R mysql3306 /var/run/mysq3306
chown -R mysql3306 /home/exports/appli/tifa/mysql3306



cd /home/exports/appli/tifa/mysql3306
find . -type f -perm 755 > ./tmpliste
chmod -R 600 *
chmod -R u+X *
chmod 700 `cat tmpliste `
rm tmpliste


groumpher car on aurait pu penser à changer le umask plus tôt.


chmod -R 600 /var/run/mysq3306
chmod -R u+X /var/run/mysq3306
chmod -R 600 /home/exports/databases/mysql3306
chmod -R u+X /home/exports/databases/mysql3306


Démarrer la base :

cd /home/exports/appli/tifa/mysql3306 ; /home/exports/appli/tifa/mysql3306/bin/mysqld_safe &


Sécuriser mysql :

/home/exports/appli/tifa/mysql3306/bin/mysql_secure_installation



OS Configurer l'os

  • Obtenir des informations sur les disques (préférer du sata 15K) :
hdparm -I /dev/sdX |less

et se renseigner à propos du NCQ
  • Tester les performances en lecture des disque (peut se faire à chaud si le serveur n'est pas trop chargé) :
hdparm -tT /dev/sdX |less

  • Augmenter le readahead buffer
A chaud :
blockdev --getra /dev/sdX
blockdev --setra 2048 /dev/sdX

De façon permanente :

Editer /etc/hdparm.conf
/dev/sdX {
dma = on
read_ahead_sect = 2048
}


  • Monter la partition avec l'option noatime :
Par exemple :
/dev/md3 /home ext3 defaults,noatime 0 2





Exploitation Exploitation


  • Lister les bases présentes sur la sortie standard :
mysql -e 'show databases\G' | grep Database | awk '{print $2}'

  • Réparer une table :
repair table matable;
Sur un serveur chargé qui a une table myisam de 5Go cassé, on peut essayer de restaurer les fichiers plats : L'indispo dure moins longtemps, mais il faut brûler un cierge et espérer ne pas corrompre l'intégrité des données.

  • Sauvegarder une base :
mysqldump -Q opt routines --triggers -B mabase|gzip > mabase.sql.gz

  • Ajouter une base et un utilisateur :

create database mabase;
grant all privileges on mabase.* to 'utilisateur'@'%' identified by 'hackmeagain';




trucs Trucs et astuces

  • Remplacer une occurence dans tous les enregristments pour une colonne d'une table :
update matable SET macolonne=(REPLACE(macolonne,'ancientexte','nouveautexte'));

  • Soustraire une table à une autre :
SELECT liste FROM toto2 LEFT JOIN toto3 ON liste=sent WHERE sent IS NULL;



incidents Méthodes de résolution des incidents


  • Problèmes de charge

Des problèmes de charge peuvent être lié à des requêtes fortement consommatrices en ressources.
Dans ce cas on peut optimiser les requêtes ou créer des index.
mysqldumpslow -s c -t=10 ./mysql-slow.log > ./report