BDD

Bases De Données

LAMP

Nous allons commencer par installer la plateforme LAMP (Linux Apache MySql PHP), et donc, plus précisément par MySQL ! Pour cela, rien de plus simple.


apt-get update
apt-get install mysql-server mysql-client
								

Pour le TP, il nous est demandé de modifier le bind address « 127.0.0.1 » situé dans /etc/mysql/my.cnf par « 0.0.0.0 ». Il ne faut pas le faire en production !

Puis, évidemment, de redémarrer le service MySQL juste après !


/etc/init.d/mysql restart
								

Une fois que c’est fait, installez Apache2.


apt-get install apache2
								

Allez sur une autre machine et vérifiez que votre Apache2 est bien lancé !

Une fois que c’est vérifié, installez les composants PHP et rechargez la nouvelle configuration Apache2 !


apt-get install php5 libapache2-mod-php5
/etc/init.d/apache2 restart
								

On va maintenant tester la configuration de PHP, pour cela, nous allons aller dans /var/www/html/ et y créer le fichier info.php avec un petit code à l’intérieur qui va nous dire tout ce qu’il sait sur la configuration ! Pour cela :


cd /var/www/html/
nano info.php

< ?php phpinfo(); ?>
								

On a ensuite plus qu’à retourner sur notre deuxième machine pour aller voir cette nouvelle page !

Selon ce que nous avons à installer ensuite, on pourrait ajouter tous ces paquets à notre machine :


php5-curl php5-pear php5-gd php5-intl php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl …
								

Mais nous allons, pour les besoins de ce TP, nous contenter de ce paquet :


apt-get install php5-mysql
								

Puis redémarrer Apache2 avant de retourner sur notre navigateur qui affiche la page info.php et l’actualiser pour constater les ajouts des derniers modules. (regardez dans la partie : « Additional .ini files parsed ».)

Maintenant, nous allons installer l’interface graphique d’administration MySQL… Alias : PHPmyadmin !


apt-get install phpmyadmin
								

Ensuite, accédez à votre interface web PHPmyadmin en allant sur votre machine secondaire (celle que vous avez utilisé pour voir info.php) et allez sur http://ip/phpmyadmin/ !

Ça ne marche pas ! Je n’arrive pas à joindre l’interface web !

Pas de panique ! Si vous n’y avez pas accès via ce lien, créez un lien symbolique de /usr/share/phpmyadmin vers /var/www/html/phpmyadmin ! Comme cela :


ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
								

Et voilà ! Passons maintenant à l’installation de WordPress !

WordPress

Rassurez-vous, c’est très facile :) on va tout d’abord se mettre dans /tmp et on va télécharger la dernière version de WordPress ! Pour cela, rien de plus simple :


cd /tmp
wget http://wordpress.org/latest.zip 
								

Puis, on va se connecter en tant que root sur MySQL et créer une base ainsi qu’un utilisateur (et son mdp) pour WordPress. Ensuite nous donnerons les droits à l’utilisateur de WordPress pour qu’il puisse utiliser la base WordPress à sa guise ! Pour cela :


mysql -u root -p
mysql> CREATE DATABASE WordPress ;
mysql> CREATE USER ‘WPUser’ ;
mysql> SET PASSWORD FOR ‘WPUser’=PASSWORD(‘Azerty77’) ;
mysql> GRANT ALL PRIVILEGES ON WordPress.* TO WPUser@localhost IDENTIFIED BY ‘Azerty77’ ;
mysql> exit
								

Et voilà ! MySQL est configuré ! Maintenant, nous allons décompresser le fichier que nous avons téléchargé sur wordpress.org et attribuer les droits nécessaires sur le dossier qui va sortir du .zip ! Mais avant ça, nous devons télécharger et installer le paquet « zip » qui nous permettra de « dézipper » le latest.zip !


apt-get install zip # On installe zip
unzip latest.zip -d /var/www/html # On dézippe

chown -Rf www-data:www-data /var/www/html/wordpress # On définit le propriétaire du dossier wordpress
chmod 775 -R /var/www/html/wordpress # On donne les droits
								

Et maintenant on va aller sur http://ip/wordpress pour commencer l’installation de wordpress ! Et remplir tout ce qu’on nous demande de remplir ! La première feuille à remplir est pour la base de données, on va devoir mettre tout ce qu’on a fait sur MySQL !

Ensuite, on va devoir créer notre site, un identifiant, un mdp (cochez « autoriser les mdp faibles » si jamais votre mdp est faible) ainsi que quelques informations complémentaires.

Une fois votre site créé…

…connectez-vous avec vos identifiants créés précédemment !

Sécurisation du service MySQL

Nous allons maintenant sécuriser notre installation MySQL. Pour cela, il existe une commande :


root@DEB-BAUMERT:/# mysql_secure_installation
								

Cette commande va nous permettre de s’assurer que nous avons bel et bien un mot de passe root pour MySQL, d’empêcher d’accéder en root à MySQL depuis le réseau, d’empêcher aussi les connexions anonymes, de supprimer les bases de test (qui sont accessible par tout le monde…), de supprimer aussi les privilèges qui autorisent tout le monde à accéder à toutes les bases commençant par test_ et de recharger les droits à la fin !

Comme le montre le screen ci-dessus, il faut juste choisir entre yes et no.

J’ai perdu mon mot de passe MySQL !

Pas de panique ! On va apprendre à le récupérer. Tout d’abord, on stoppe le service MySQL.


/etc/init.d/mysql stop
								

Une fois que c’est fait, on redémarre le service en mode « récupération » (sans mot de passe…) Puis on se connecte au serveur à l’aide du client MySQL sans préciser le mot de passe ! (on enlève le -p).


mysqld_safe –skip-grant-tables &
mysql -u root # Pas de -p ici !
								

Puis, on va modifier les enregistrements de la base mysql pour changer le mot de passe de l’utilisateur root ! Ensuite on « rafraîchira » les droits pour que tout soit bien actualisé !


use mysql ;
update user set password=PASSWORD(‘nouveaumotdepasse’) where user=’root’ ;
flush privileges ; # On rafraîchit le tout !
quit ;
								

Une fois que cette manipulation est faite, on peut stopper le service de dépannage et relancer MySQL normalement. Puis on essaye de se connecter avec le nouveau mot de passe !


/etc/init.d/mysql stop
/etc/init.d/mysql start
mysql -u root -p # On remet le -p parce qu’on va utiliser le nouveau mdp !
								

Ouf ! Ça marche :)

Optimisation MySQL

Pour pouvoir optimiser MySQL, nous allons télécharger un script qui va nous aider à le faire ! Avant d’installer Mytop qui est un paquet de type « top » qui a une interface shell !


cd /tmp
wget https://raw.github.com/major/MySQLTuner-perl/master/mysqltuner.pl 
apt-get install mytop
mytop --prompt -d test # Test pour la base de test, si j’avais mis WordPress, ça aurait été pour la base WordPress !
								

Ensuite, nous avons des fichiers de configurations à modifier ! Pour nous aider, il existe des exemples de fichiers de configuration dans /usr/share /doc/mysql-server-5.X.XX/examples ! Il s’agit d’exemples du fichier de configuration suivant : /etc/mysql/my.cnf

Pour commencer, allez sur MySQL et tapez la commande


SHOW GLOBAL STATUS
								

Il faut que key_reads/key_read_requests ratio soit inférieur à 0.01 pour éviter l’accès disque ! S’il est supérieur, augmentez le key-buffer de mysqld dans /etc/mysql/my.cnf !

Thread_concurrency (seulement sur les machines multicœurs) doit être égal à 2xle nombre de cœurs du processeur de la machine ! Pour voir le nombre de cœurs faites la commande :


cat /proc/cpuinfo
								

Je n’ai qu’un seul cœur sur ma machine, cette optimisation n’est donc pas pour moi ! Par contre vous pouvez activer le log des requêtes lentes dans my.cnf ! Pour cela, décommentez les lignes suivantes !


log-slow- queries=/home/mysqld-slow.log
Et demander d'indiquer le temps le plus lent
long_query_time = 1
								

Puis, analysez les résultats !


tail -n 1000 /home/mysqld-slow.log
								

Sauvegardes : Complètes & Partielles

Il y a plusieurs façons de sauvegarder les bases de données ! Il y a tout d’abord : Le dump !


mysqldump –user root -p –all-databases |gzip > save.mysql.sql.gz
								

Le dump est un fichier « texte » qui va récupérer toutes les commandes mysql nécessaires pour recréer la (les) base(s) de A à Z. Il y a une autre méthode, qui consiste à copier les fichiers de chaque base et les mettre ailleurs ! Par contre, cette méthode nécessite l’arrêt du serveur ! Aucune activité n’est possible. Pour cela, vous devez archiver les fichiers suivant :


/var/lib/mysql
/var/log/mysql.log
								

N’oubliez pas de récupérer les logs ! Vous pouvez redémarrer le service juste après. Pour la restauration, si vous voulez restaurer un dump, il s’agit simplement d’un script à injecter sur votre MySQL, si vous avez copié des fichiers, vous devez arrêter le service et remplacer les fichiers actuels par vos sauvegardes avant de redémarrer le service !


Migration sur MariaDB

Pour faire la migration de MySQL vers MariaDB, je vous conseille (avant de le faire) de sauvegarder votre base de données WordPress ! (Voir l'expliquation un peu plus haut) Et, aussi, de mettre à jour votre Debian.


apt-get update && apt-get upgrade
apt-get install python-software-properties
								

Seulement... voilà... MariaDB n'est pas encore disponible dans les dépôts officiels Debian. On va donc devoir ajouter un dépôt externe ! Pour cela : Allez créer un nouveau fichier comme ci-dessous :


cd /etc/apt/sources.list.d/
nano mariadb.list
								

Et y ajouter ces deux lignes :


# MariaDB 5.5
deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian wheezy main
								

Sinon, vous pouvez aussi taper :


add-apt-repository 'deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian wheezy main'
								

Il faut maintenant importer la clef de la signature GnuPG, mettre à jour le tout, et installer MariaDB :


apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
apt-get update
apt-get install mariadb-server
								

Ici, MariaDB va s'installer et venir remplacer MySQL : Littéralement. À tel point que pour vous connecter à MariaDB, vous allez taper :


mysql -u root -p
								

Cluster MariaDB / Galera

Pour gérer les conflits en production, il faut au minimum 3 serveurs pour faire notre petit cluster. Tout d'abord, installer les paquets serait un bon début !

apt-get install mariadb-galera-server galera

Une fois les paquets installés, il faut créer le cluster :


service mysql stop
mysqld-wsrep-new-cluster
								

Voilà pour le maître ! Et pour les esclaves...


service mysql stop
mysqld –wsrep_cluster_address=gcomm://@IP_DU_MAÎTRE
								

Ensuite, pour voir les status de synchro avec une commande SQL :

SHOW STATUS LIKE 'wsrep_%';