Table des matières
Installation
Configurer l'os
Exploitation
Trucs et astuces
Méthodes de résolution des incidents
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
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
blockdev --getra /dev/sdX
blockdev --setra 2048 /dev/sdX
blockdev --setra 2048 /dev/sdX
De façon permanente :
Editer /etc/hdparm.conf
/dev/sdX {
dma = on
read_ahead_sect = 2048
}
dma = on
read_ahead_sect = 2048
}
- Monter la partition avec l'option noatime :
/dev/md3 /home ext3 defaults,noatime 0 2
Exploitation
- Lister les bases présentes sur la sortie standard :
- Réparer une table :
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 :
- Ajouter une base et un utilisateur :
create database mabase;
grant all privileges on mabase.* to 'utilisateur'@'%' identified by 'hackmeagain';
Trucs et astuces
- Remplacer une occurence dans tous les enregristments pour une colonne d'une table :
- Soustraire une table à une autre :
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


