Installation Apache/PHP/MySQL - Le serveur Dept25
Transcription
Installation Apache/PHP/MySQL - Le serveur Dept25
209 Annexe A Installation Apache/PHP/MySQL Sommaire A.1 Installation sous Linux . . . . . . . . . . . . A.1.1 Installation à partir d’un package RPM A.1.2 Installation à partir des codes sources . A.1.3 MySQL . . . . . . . . . . . . . . . . A.1.4 PHP . . . . . . . . . . . . . . . . . . A.1.5 Apache . . . . . . . . . . . . . . . . A.2 Installation sous Windows . . . . . . . . . . A.2.1 MySQL . . . . . . . . . . . . . . . . A.2.2 Apache . . . . . . . . . . . . . . . . A.2.3 PHP . . . . . . . . . . . . . . . . . . A.3 Compléments d’installation pour MySQL . A.3.1 Mot de passe root . . . . . . . . . . A.3.2 Fichiers de configuration . . . . . . . A.3.3 phpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 210 210 211 214 214 216 216 217 218 218 219 219 222 Nous décrivons dans cette annexe l’installation et la configuration d’un environnement complet MySQL/PHP/Apache sous Linux ou sous Windows. En général, une installation se reposant au maximum sur les options par défaut ne pose aucun problème particulier. Cela étant il suffit de peu de choses pour que des problèmes surgissent. Afin de vous aider à surmonter ces obstacles éventuels, nous donnons une explication assez détaillée du pourquoi et du comment de chaque commande. La première chose à faire est de télécharger les logiciels. Tout est gratuit ! Voici les sites de référence pour trouver la dernière version. – – – – Pour MySQL, c’est www.mysql.com. Pour PHP, c’est www.php.net. Pour Apache, c’est www.apache.org. Si vous souhaitez phpMyAdmin, c’est www.phpwizard.net. Pour Linux, les logiciels s’obtiennent soit sous la forme de packages RPM contenant tous les programmes compilés, soit sous la forme d’un fichier archive tar compressé, en général avec gunzip, contenant le code source qu’il faut alors compiler. La version Windows est fournie sous forme d’une archive .zip contenant les programmes exécutables. A.1 Installation sous Linux Cette installation suppose une maı̂trise minimale des commandes UNIX, la compréhension des principes de base d’une installation logicielle (compilation, fichiers makefile, fichiers sources et fichiers binaires, etc), et la possibilité de travailler sous le compte root. ANNEXE A. INSTALLATION APACHE/PHP/MYSQL 210 A.1.1 Installation à partir d’un package RPM Cette méthode permet une installation très simple d’une version pré-compilée d’un logiciel. Il suffit de récupérer un fichier package.rpm correspondant au processeur de votre machine, comme par exemple part MySQL-VERSION.i386.rpm pour un processeur Intel. On installe ensuite avec la commande Unix rpm -i package.rpm. A.1.2 Installation à partir des codes sources Cette méthode est un peu plus compliquée, mais elle permet en contrepartie d’avoir un contrôle total sur les paramètres de l’installation. La première chose à faire est de décompresser chaque fichier, et d’en extraire les sources dans un répertoire de votre machine. Nous allons effectuer des choix standard pour tout ce qui concerne les emplacements des logiciels, mais vous êtes libres d’agir comme bon vous semble si vous vous sentez suffisamment compétent. Les sources seront installées dans /usr/local/src. Voici comment cela se passe par exemple pour MySQL. 1. Si le répertoire /usr/local/src n’existe pas, créez-le : % cd /usr/local % mkdir /usr/local/src 2. Copiez le fichier mysql-version.tar.gz dans /usr/local/src. NB : version indique ici le numéro de la version que vous avez téléchargée. On suppose dans ce qui suit qu’il s’agit de la 3.23.9. % cp mysql-3.23.9.tar.gz /usr/local/src 3. Allez dans /usr/local/src et décompressez le fichier avec gunzip (extension .gz) ou uncompress (extensions .Z). % gunzip mysql-3.23.9.tar.gz On obtient le fichier décompressé mysql-3.23.9.tar. 4. Il reste à extraire tous les fichiers de l’archive .tar avec : % tar xvf mysql-3.23.9.tar Cette extraction crée un répertoire mysql-3.23.9 dans /usr/local/src et y place tous les fichiers. Faire de même avec les archives Apache et PHP. Dans ce qui suit on suppose que les versions de ces logiciels sont respectivement apache 1.3.4 et php-4.0. Compilateur Éventuellement, il faut récupérer aussi le compilateur GNU C++ si vous ne l’avez pas. On peut le trouver par exemple à http://www.gnu.ai.mit.edu/software/gcc/gcc.html ou sur un site miroir GNU. Vous avez besoin de la version 2.8.1 (au moins) pour pouvoir compiler MySQL. Voici les commandes permettant d’installer le compilateur : 1. Récupérez par le fichier gcc-2.8.1.tar.gz (ou version supérieure) et placez le dans /usr/local/src. 2. Décompressez l’archive, et extrayez son contenu : % gunzip gcc-2.8.1.tar.gz % tar xvf gcc-2.8.1.tar Ce qui crée un nouveau répertoire gcc-2.8.1 dans /usr/local/src. 3. Placez vous dans ce répertoire avec la commande % cd gcc-8.2.1 4. Entrez successivement les commandes suivantes : % ./configure % make % make install C’est tout ! Par défaut, l’installation se fait dans /usr/local/bin. Il faut donc mettre ce répertoire au début de la variable PATH, avec une commande qui dépend du shell employé, ici pour les shell de type Bourne comme bash : % export PATH=/usr/local/bin:$PATH A.1. INSTALLATION SOUS LINUX 211 Vous pouvez vérifier alors que tout s’est bien passé avec la commande gcc -v qui devrait vous afficher gcc version 2.8.1 (ou version supérieure). Vous êtes maintenant prêts à installer successivement MySQL, puis le couple PHP/Apache. Globalement ces installations suivent toujours le processus décrit ci-dessus pour gcc, qui se résume aux trois commandes configure, make et make install. 1. configure analyse votre environnement Linux et vérifie que tous les éléments nécessaires (compilateur, librairies) sont disponibles. configure produit également un fichier makefile qui contient toutes les commandes de compilation et d’édition de liens. 2. make exécute le makefile produit durant l’étape précédente. Il s’agit souvent de la partie la plus longue puisque tous les fichiers sources doivent être compilés. À la fin de cette étape tous les programmes exécutables ont été créés. 3. La commande make install complète l’installation en transférant dans un répertoire indépendant tous les exécutables, librairies, et fichiers de scripts. Tout utilisateur souhaitant utiliser le logiciel devra avoir accès à ce répertoire. Et en cas de problème ? Là il faut faire preuve d’esprit d’initiative. Vous pouvez en général recommencer le processus d’installation en tapant make clean qui détruit tous les fichiers résultant d’une compilation. Souvent les problèmes sont détectés par configure dont un des rôles est justement de s’assurer que l’environnement est suffisant pour que tout se passe bien par la suite. Il se peut que vous ayez à récupérer des logiciels complémentaires, comme par exemple flex, un analyseur lexical utilisé par PHP. En principe ces logiciels se trouvent facilement sur le Web, et s’installent selon les étapes standard illustrées ci-dessus avec gcc. Remarque : Si vous rencontrez des difficultés lors de l’installation d’un logiciel, une explication possible est que la procédure que nous décrivons a évolué, ou que votre version particulière de Linux (nous utilisons une Suse 7) se comporte différemment. On trouve partout sur le Web, en utilisant un moteur de recherche, des notices d’installation à jour : cherchez celle qui correspond à votre configuration et suivez ses instructions. A.1.3 MySQL Voyons maintenant pas à pas l’installation et la mise en route de MySQL. Il y a trois grandes étapes. Tout d’abord il faut compiler et installer tous les fichiers. Puis il faut installer une première base, lancer le serveur, et vérifier que tout va bien. Enfin il faut paramétrer l’environnement de travail, en créant notamment un utilisateur UNIX mysql (ou autre) qui sera chargé de l’administration. Installation d’un package RPM Il faut récupérer d’une part MySQL-VERSION.i386.rpm, pour le serveur, VERSION étant bien entendu la dernière version stable de MySQL au moment de l’installation, et d’autre part MySQL-clientVERSION.i386.rpm pour les utilitaires. La commande suivante affiche le contenu d’un package : % rpm -qpl MySQL-VERSION.i386.rpm Pour effectuer l’installation, il suffit d’entrer la commande suivante : % rpm -i MySQL-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm Le répertoire des bases de données est alors /var/lib/mysql. Vous pouvez passer ensuite à la partie Initialisation . Compilation Le répertoire standard pour les exécutables est /usr/local/mysql. Pour la configuration on se place dans mysql-3.23.9 et on procède comme suit : % ./configure --prefix=/usr/local/mysql ANNEXE A. INSTALLATION APACHE/PHP/MYSQL 212 Cette commande analyse l’environnement et crée un fichier makefile. L’option --prefix indique le répertoire final d’installation. Il existe beaucoup d’autres options qui permettent, par exemple, d’indiquer un emplacement spécifique pour les fichiers des bases de données. On exécute ensuite : % make et les instructions du makefile vont être utilisées pour compiler tout les fichiers sources. On est toujours dans mysql-3.23.9 : il reste à installer tout ce qui est nécessaire à l’exécution dans /usr/local/mysql avec la commande % make install MySQL est prêt ! Tous les exécutables, ainsi que des fichiers utilitaires, sont dans /usr/local/mysql/bin. Il faut donc placer ce répertoire dans la variable PATH de tout utilisateur souhaitant accéder à ces programmes. Cela donne, sous le cshell : % setenv PATH /usr/local/mysql/bin:$PATH Ou encore, sous le kshell ou bash (le plus courant sous Linux) : % export PATH=/usr/local/mysql/bin:$PATH Ces commandes devraient être placées dans le fichier shell qui est exécuté automatiquement quand un utilisateur se connecte à Unix. Selon le cas ce fichier peut être .profile, .bashrc, .login, etc. Initialisation Il faut maintenant créer une première base MySQL. Voici les différentes étapes : 1. Création d’un répertoire contenant les bases de données, et d’une première base, mysql, pour le dictionnaire des utilisateurs. 2. Lancement et arrêt du démon mysqld à chaque arrêt/démarrage du système Linux. Il est fortement conseillé de ne pas utiliser le compte root pour gérer les fichiers de bases de données. Le fait, notamment, d’exécuter le serveur mysqld sous root signifie que ce serveur aurait tous les droits sur les ressources de la machine, ce qui est peu prudent. La première chose à faire est donc de créer un compte mysql (ou autre), rattaché à un groupe particulier, et ayant des droits limités. Essentiellement, cet utilisateur doit pouvoir lire et écrire dans le répertoire contenant les bases de données. Dans ce qui suit, nous supposons que le répertoire racine de toutes les bases est /usr/local/mysql/var, ce qui est le choix de la configuration par défaut (vous pouvez changer cette option au moment du configure). Ce répertoire doit appartenir à l’utilisateur mysql. Procédez de la manière suivante : 1. Sous root, déclarez le compte mysql propriétaire des droits sur /usr/local/mysql, et ses sousrépertoires. % cd /usr/local % chown -R mysql mysql 2. Connectez-vous sous le compte Unix mysql. 3. Créez la base initiale avec les commandes suivantes. % cd /usr/local/src/mysql-3.23.9/scripts % ./mysql install db Vous devriez, dans /usr/local/mysql/var, avoir deux répertoires nommés respectivement mysql et test. Le répertoire mysql contient les fichiers de la base mysql (désolé, beaucoup de choses s’appellent mysql !), décrivant les utilisateurs et les droits d’accès. La commande ls -l *.frm devrait afficher quelque chose comme : -rw-rw----rw-rw----rw-rw----rw-rw----rw-rw----rw-rw---- 1 1 1 1 1 1 mysql mysql mysql mysql mysql mysql columns_priv.frm db.frm func.frm host.frm tables_priv.frm user.frm A.1. INSTALLATION SOUS LINUX 213 Lancement et arrêt manuels du serveur Pour tester l’installation, il ne reste plus qu’à lancer le serveur mysqld avec le script safe mysqld qui se trouve dans le répertoire scripts. % ./safe mysqld& Si tout va bien, le message Starting mysqld daemon with databases from /usr/local/mysql/var devrait s’afficher. Le serveur est lancé, et vous pouvez accéder à la base avec un des programmes clients qui se trouvent dans mysql/bin. La commande mysqlshow devrait par exemple, à ce stade, afficher le résultat suivant : +-----------+ | Databases | +-----------+ | mysql | | test | +-----------+ Vous pouvez également utiliser mysqladmin avec ses très nombreuses options. Par exemple la commande % mysqladmin ping devrait répondre mysqld is alive. Pour arrêter manuellement le serveur, on utilise également mysqladmin : % mysqladmin -u root shutdown Lancement et arrêt automatiques du serveur Le serveur devrait être lancé et stoppé automatiquement avec le système. Nous donnons ci-dessous une manière classique de procéder, à adapter à chaque cas. Le fichier mysql.server, dans le répertoire support-files, fournit un script prêt à l’emploi pour lancer/stopper le serveur de MySQL. Ce script accepte les paramètres start ou stop. Il suffit en principe de le placer dans un des répertoires d’initialisation du système. 1. Connectez-vous sous le compte Unix root 2. Copiez mysql.server dans /etc/rc.d % cd /usr/local/src/mysql-3.23.9/support-files % cp mysql.server /etc/rc.d % cd /etc/rc.d % chmod u+x mysql.server 3. Éditez le fichier mysql.server et remplacez la ligne mysql daemon user=root par mysql daemon user=mysql. 4. Indiquez au système que le script doit être exécuté au niveau 3 du lancement de Linux. % cd rc3.d % ln -s ../mysql.server K99mysql % ln -s ../mysql.server S99mysql Le serveur de MySQL sera lancé et stoppé automatiquement avec Linux. Le processus ci-dessus dépend fortement de votre configuration. Consultez votre documentation ou votre administrateur système si besoin est. Pour compléter l’installation de MySQL, il est indispensable, entre autres, de donner un mot de passe au compte root de MySQL. Les commandes nécessaires sont communes à Linux et à Windows, et sont présentées page 218. ANNEXE A. INSTALLATION APACHE/PHP/MYSQL 214 A.1.4 PHP Le principe est le même que précédemment, à ceci près qu’il faut indiquer à PHP que, d’une part, les fonctions d’accès à MySQL doivent être intégrées dans la librairie, et d’autre part que le module PHP doit être ajouté à Apache. Pour des raisons obscures, Apache doit être configuré une première fois. Créez un répertoire /usr/local/apache 1 , puis exécutez les commandes suivantes : % cd /usr/local/src/apache 1.3.4 % ./configure Maintenant on peut installer PHP. Voici les commandes, semblables à celles déjà vues pour MySQL. % cd /usr/local/src/php-4.0 % ./configure --with-mysql --with-apache=../apache 1.3.4 % make % make install L’option --with-mysql, sans indiquer de valeur, marche si on a bien installé MySQL dans /usr/local parce que ce répertoire fait partie des choix par défaut que la configuration de PHP connaı̂t. Dès que l’on fait des choix d’installation qui s’écartent du standard, les paramètres à spécifier sont beaucoup plus nombreux et les risques de problèmes plus grands. En principe les commandes ci-dessus fonctionnent sans problème. Dans le cas contraire, ou si vous n’êtes pas tout à fait sûr de votre environnement, cela vaut la peine de lire le fichier INSTALL qui se trouve dans le répertoire php-4.0. Le fichier php.ini Dernière chose à faire pour installer PHP : copier le fichier php.ini dans /usr/local/lib. Ce fichier est fourni dans php-4.0. Il contient toutes les options d’exécution de PHP. On peut spécifier des choses aussi diverses que les balises prises en compte, la précision des calculs, les fichiers qui doivent être inclus automatiquement, des restrictions de sécurité, etc. La table A.1 donne les principales options. php.ini est lu par Apache à chaque exécution du serveur httpd, ce qui permet de changer facilement toutes les options. Dans un premier temps vous pouvez le laisser avec tous les choix par défaut. Si vous êtes curieux, vous pouvez l’éditer : les commentaires sont nombreux et clairs. Profitez de l’occasion pour vérifier les paramètres suivants : 1. track vars devrait être à On pour permettre la récupération de variables dans les tableaux HTTP VARS. 2. magic quote gpc peut valoir off ou on. La valeur on est recommandée : elle permet de préfixer automatiquement par ’\’ tous les caractères saisis dans les formulaires ou provenant de cookies qui risqueraient de poser problème avec MySQL. Par exemple la simple quote (’) est transformée en (\’). 3. magic quotes runtime devrait valoir Off. Ainsi les données provenant de MySQL ne seront pas modifiées, même si elles contiennent des (’). Ce comportement est celui qui pose le moins de problèmes puisqu’il évite d’avoir à utiliser systématiquement les fonctions addSlashes et stripSlashes. Pour un site en exloitation, il est recommandé d’activer l’option safe mode, et de restreindre le plus possible des fichiers auxquels un script PHP peut accéder. A.1.5 Apache Il ne reste plus qu’à installer Apache, en précisant bien que le module PHP4 doit être activé. Voici les commandes. % cd /usr/local/apache_1.3.4 % ./configure --prefix=/usr/local/apache \ 1. On peut faire d’autre choix, mais les choses deviennent plus compliquées. A.1. INSTALLATION SOUS LINUX Option auto append file fichier auto prepend file fichier doc root répertoire open basedir répertoires 215 Description Nom d’un fichier qui doit être systématiquement inclus au début de tout script. Nom d’un fichier qui doit être systématiquement inclus à la fin de tout script. Nom du répertoire racine de PHP. Quand l’option safe mode est activée, les seuls scripts PHP accessibles sont ceux situés sous ce répertoire. Liste des répertoires accessibles aux fonctions d’accès aux fichiers de PHP. La valeur . indique que seuls les fichiers du répertoire courant peuvent être ouverts. Liste des répertoires où chercher les fichiers pour les commandes require et include. Cette option permet de créer des librairies PHP sous la forme de répertoires contenant les scripts des fonctions ou classes utiles à plusieurs sites. Si on, les apostrophes, et NULL sont automatiquement précédés d’un pour les variables GET, POST et les cookies. Si on, les apostrophes, et NULL sont automatiquement précédés d’un pour les chaı̂nes provenant d’une base de données ou d’un fichier. Temps maximal d’exécution d’un script. Taille maximale de la mémoire allouée à un script. Si on, les tableaux associatifs HTTP GET VARS, HTTP POST VARS et HTTP COOKIE VARS sont créés au début de chaque script. Nom du répertoire où sont placés les fichiers provenant du client. Apache doit pouvoir écrire dans ce répertoire. Si on, PHP est exécuté en mode sécurisé. Dans ce cas seuls les scripts situés sous doc root peuvent être exécutés. Si PHP est exécuté en mode sécurisé, seuls les programmes situés dans ce répertoire pourront être exécutés avec la fonction system. include path répertoires magic quotes gpc boolean magic quotes runtime boolean max execution time secondes memory limit octets track vars boolean upload tmp dir répertoire safe mode boolean safe mode exec dir répertoire TAB . A.1 – Options de configuration du fichier php.ini --activate-module=src/modules/php4/libphp4.a % make % make install On aboutit à une installation dans /usr/local/apache. Elle contient, dans le sous-répertoire bin, le serveur httpd, ainsi que des fichiers de configuration qu’il faut légèrement modifier. – Éditez le fichier /usr/local/apache/conf/httpd.conf. – Modifiez la ligne qui contient DirectoryIndex comme suit DirectoryIndex index.php index.html Par défaut, Apache chargera un fichier index.php s’il le trouve. – Indiquez les extensions qui correspondent aux fichiers PHP. Les lignes existent déjà en commentaires dans httpd.conf : il faut retirer le # pour que Apache reconnaisse les extensions des fichiers qui ANNEXE A. INSTALLATION APACHE/PHP/MYSQL 216 doivent être traités par le moteur PHP. AddType application/x-httpd-php .php Et voilà ! Il ne reste plus qu’à lancer Apache. % cd /usr/local/apache % ./bin/apachectl start httpd est lancé et se met en écoute sur le port 80 (à moins que vous n’ayez changé la valeur de Port dans httpd.conf ). Pour lancer et stopper Apache avec Linux, procédez comme indiqué pour le serveur MySQL, en utilisant le script apachectl. Les documents HTML doivent alors être placés dans le répertoire htdocs, ou dans un sous-répertoire de ce dernier. Vous disposez maintenant d’un environnement de travail qui vous permet, par exemple, de récupérer le code de notre site, de l’installer et de le modifier à votre guise. Pour aller plus loin et disposer d’un site performant et sécurisé, il faut impérativement soigner la configuration d’Apache. Une solution simple et efficace pour protéger l’accès de vos fichiers est de créer un compte utilisateur pour Apache, et de le rattacher à un groupe dont il est le seul membre. Vous pouvez par exemple créer un groupe apachegrp, un utilisateur apache dans ce groupe, et demander à Apache d’exécuter ses processus sous ce compte utilisateur avec les directives User et Group du fichier httpd.conf. Il reste alors à restreindre les droits d’accès aux fichiers constituant un site – notamment ceux qui contiennent des mots de passe – à cet utilisateur. Placez-vous dans htdocs, et entrez la commande : % chown -R apache . qui permet de rendre le compte apache propriétaire de tous les fichiers. Puis restreignez les droits d’accès avec la commande : % chmod -R og-rwx . Tout ceci n’est qu’une première étape. Si vous voulez vraiment maı̂triser l’administration de votre site, il est impératif de recourir à des ouvrages spécialisés. Nous vous renvoyons par exemple au livre Webmaster in a nutshell, aux Éditions O’Reilly. A.2 Installation sous Windows L’installation sous Windows (95, 98, 2000 ou WindowsNT) est facilitée par le fait que les logiciels sont fournis dans une version pré-compilée, et accompagnés (pour Apache et MySQL) d’un programme d’installation qui s’occupe à peu près de toutes les tâches. Un inconvénient est que le module PHP n’est pas intégré à Apache, mais fonctionne comme un programme séparé qui est appelé (comme un programme CGI) à chaque chargement d’un fichier PHP. A.2.1 MySQL MySQL est fourni pour Windows sous forme d’un fichier archive (.zip) assez volumineux (près de 9 Mégaoctets). Après récupération de ce fichier, vous pouvez le décompresser avec winzip, ce qui permet d’obtenir un programme d’installation. Lancez ce programme. Une interface graphique classique apparaı̂t, avec une suite d’écran proposant des options d’installation. Le plus simple est d’adopter systématiquement les valeurs par défaut, et notamment d’accepter C:/MySQL comme répertoire d’installation. Quand l’installation est terminée, C:/MySQL contient, entre autres, un sous-répertoire bin dans lequel on trouve les programmes de MySQL, dont le serveur. La procédure de lancement du serveur mysqld varie légèrement selon la version de Windows. A.2. INSTALLATION SOUS WINDOWS 217 Windows NT MySQL peut être installé comme un service de NT. Dans une fenêtre MS-DOS, placez-vous dans C:/MySQL/bin et entrez la commande : mysqld-nt --install MySQL apparaı̂t alors dans la liste des services (consultables à partir du panneau de configuration) et le serveur sera lancé automatiquement au démarrage de Windows NT. On peut aussi lancer ou arrêter manuellement le serveur dans une fenêtre MS-DOS avec les commandes : net start mysql net stop mysql Si on ne veut pas utiliser MySQL comme un service NT, on peut aussi lancer simplement le serveur avec la commande : mysqld-nt --standalone Pour arrêter manuellement le serveur dans ce cas on utilise mysqladmin. mysqladmin -u root -p shutdown Autres versions de Windows Pour les autres versions de Windows, il suffit de lancer le serveur mysqld en cliquant sur son icône. Pour l’arrêter on utilise mysqladmin, dans une fenêtre MS-DOS. mysqladmin -u root -p shutdown L’option -p est inutile tant que vous n’avez pas donné de mot de passe à l’utilisateur root de MySQL. Sous Windows, les utilisateurs ont par défaut tous les droits sur toutes les bases. Il est impératif de donner un mot de passe à root et de supprimer l’utilisateur anonyme pour sécuriser le système (voir page 219). Quelques tests Les versions récentes de MySQL sont fournies avec un client graphique WinMySQLAdmin qui est très pratique pour administrer le serveur. L’installation avec cet outil est décrite dans le fichier README du répertoire C:/MySQL. Sinon les programmes de MySQL existent dans la version Windows sous forme d’exécutables classiques. On peut, comme pour l’installation sous Linux, appeler mysqlshow, mysqladmin ou mysql à partir d’une fenêtre MS-DOS pour vérifier que l’installation s’est bien passée et que le serveur est à l’écoute. A.2.2 Apache Comme MySQL, Apache est fourni avec un programme d’installation graphique. Les étapes sont identiques : 1. on récupère sur un site Apache une archive zip (beaucoup plus petite que MySQL !) ; 2. en décompressant l’archive, on obtient un programme d’installation ; 3. cliquez sur l’icône du programme d’installation et acceptez les choix par défaut. Apache est installé dans : C:/Program Files/Apache Group/Apache Un sous-menu Apache est également créé dans le menu Démarrer/Programmes de Windows. Il contient des options pour installer Apache en tant que service (Windows NT), lancer ou stopper le serveur (autres Windows). – Windows NT Après avoir installé Apache comme un service NT grâce au choix du menu dans Démarrer/Programmes/Apache , on peut lancer ou arrêter manuellement le serveur par l’intermédiaire de la fenêtre de contrôle des services dans le panneau de contrôle. Apache est lancé automatiquement avec Windows NT. ANNEXE A. INSTALLATION APACHE/PHP/MYSQL 218 – Autres versions de Windows Le serveur est lancé et stoppé grâce aux choix du menu Programmes/Apache . En lançant un navigateur, puis en accédant au site http://localhost, on peut tester l’installation du serveur. A.2.3 PHP L’archive PHP .zip doit être décompressée dans un répertoire, C:/PHP4 de préférence. Elle contient un programme exécutable php.exe et des librairies .dll. Il faut commencer par déplacer quelques fichiers. – Copiez le fichier php.ini-dist dans C:/WINDOWS (ou C:/WINNT) ; renommez-le en php.ini. Ce fichier contient les options de PHP : quelques informations complémentaires sont données dans la section consacrée à l’installation de PHP sous Linux. – Copiez les librairies msvcrt.dll et php4ts.dll dans C:/WINDOWS/SYSTEM (il se peut que msvcrt.dll existe déjà, auquel cas il est inutile de la remplacer). Sous Windows, Apache exécute un script PHP en appelant l’interpréteur php.exe. L’essentiel de l’installation consiste donc à paramétrer le fichier de configuration Apache pour lui indiquer où se trouve ce programme et quels fichiers doivent lui être transmis. Dans le répertoire Apache/conf, éditez le fichier httpd.conf et procédez comme suit : 1. Cherchez la ligne avec ServerAdmin et indiquez votre email. Par exemple : ServerAdmin [email protected] 2. Cherchez la ligne avec ServerName et indiquez le nom de l’ordinateur (ou localhost). Par exemple : ServerName cartier.cnam.fr 3. Cherchez une ligne avec ScriptAlias. Il doit en exister une avec le répertoire contenant les programmes CGI. Ajoutez la ligne suivante pour indiquer où se trouve l’interpréteur PHP4. ScriptAlias /php4/ "C:/php4/" Ne pas oublier le dernier ’/’ ! Bien entendu vous devez indiquer le vrai répertoire d’installation de PHP4, si vous avez choisi autre chose que C:/PHP4. 4. Maintenant il faut indiquer à Apache l’extension des fichiers PHP. Cherchez la section avec le terme AddType et ajoutez : AddType application/x-httpd-php .phtml .php AddType application/x-httpd-php-source .phps Vos fichiers devront avoir une extension .php (vous pouvez donner l’extension .babar si vous voulez, mais vos scripts ne seront pas très portables...). 5. Finalement il faut associer les scripts PHP à l’interpréteur, en ajoutant la ligne suivante : Action application/x-httpd-php /php4/php.exe Arrêtez et relancez Apache : vous devriez maintenant pouvoir exécuter des scripts PHP. Un test classique consiste à créer un fichier phpinfo.php dans le répertoire Apache/htdocs, avec le contenu suivant. <?php phpInfo(); ?> Essayez d’accéder à l’URL localhost/phpinfo.php : la page d’accueil de PHP doit s’afficher. Et c’est terminé : L’API MySQL est incluse d’office dans l’interpréteur PHP, ce qui évite toute manipulation supplémentaire. A.3 Compléments d’installation pour MySQL Les instructions qui suivent permettent de compléter l’installation de MySQL. Elles sont valables aussi bien pour une installation Windows que pour une installation Linux. Les exemples que nous donnons s’appliquent à ce dernier système mais sont aisément transposables à Windows. A.3. COMPLÉMENTS D’INSTALLATION POUR MYSQL A.3.1 219 Mot de passe root Au moment de l’initialisation d’un serveur MySQL, il n’y a que deux utilisateurs : root@localhost avec tous les droits sur toutes les bases, et l’utilisateur anonyme ’’@localhost qui n’a aucun droit sur aucune base (sauf pour Windows). Vous pouvez consulter le contenu de la table user (voir page 181 pour une description des droits d’accès) avec les commandes suivantes. % mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 to server version: 3.23.9 Type ’help’ for help. mysql> USE mysql; Database changed mysql> SELECT * FROM user; Au départ, il est possible de se connecter sans entrer de mot de passe pour root, ce qui est très dangereux. La première chose à faire est d’attribuer un mot de passe à root avec la commande : mysql> SET PASSWORD FOR root=PASSWORD(’mdproot’) ; Bien entendu vous devez choisir un mot de passe raisonnablement difficile à deviner. Vous pouvez alors vous connecter avec la commande suivante : % mysql -u root -p L’utilitaire mysql vous demande le mot de passe à chaque connexion. Il est possible d’éviter d’avoir à effectuer ce contrôle du mot de passe répétitivement en créant un fichier de configuration, décrit dans la section suivante. L’utilisateur anonyme est une source de confusion, et un problème pour la sécurité sous Windows. Il est tout à fait recommandé de le supprimer en détruisant cet utilisateur dans la table user. Voici les commandes. % mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g . Your MySQL connection id is 2 to server version: 3.23.9 Type ’help;’ or ’\h’ for help. mysql> DELETE FROM user WHERE user=’’; Création de bases et d’utilisateur Étant connecté sous root (attention : il s’agit bien du root de MySQL, qui est différent du compte UNIX), on peut créer des bases et des utilisateurs. Par exemple : mysql> CREATE DATABASE Films; mysql> GRANT ALL PRIVILEGES ON Films.* TO adminFilms@localhost IDENTIFIED BY ’mdpAdmin’; Vous êtes maintenant en mesure de créer des tables dans la base, et d’y insérer des données. A.3.2 Fichiers de configuration Tous les programmes d’accès à MySQL prennent en compte un ou plusieurs fichiers de configuration. Chaque fichier indique des options pour le serveur ou les clients MySQL. ANNEXE A. INSTALLATION APACHE/PHP/MYSQL 220 Format d’un fichier de configuration Un fichier de configuration est au format ASCII, et comprend un ensemble de sections. Chaque section commence par une option [section] où section peut être server, client, ou le nom de l’un des programmes clients de MySQL. On trouve ensuite les valeurs des paramètres pour le ou les clients de la section courante. Un exemple de fichier de configuration, nommé my-example.cnf, est fourni dans le répertoire supportfiles. Voici une partie de ce fichier, illustrant la structure des paramètres de configuration (NB : le caractère ’#’ indique une ligne de commentaires). # Pour tous les clients [client] port = 3306 socket = /tmp/mysql.sock # Pour le serveur [mysqld] port = socket = skip-locking set-variable = set-variable = set-variable = # Start logging log 3306 /tmp/mysql.sock key_buffer=16M max_allowed_packet=1M thread_stack=128K # Pour le client mysql [mysql] no-auto-rehash La liste des paramètres acceptés par un programme est donnée par l’option --help. Les différents fichiers Il y a trois fichiers pris en compte. Sous Unix, MySQL accède à ces fichiers dans l’ordre indiqué cidessous, et les paramètres trouvés en dernier sont considérés comme prioritaires. Il est possible également de donner, au lancement de chaque programme, une liste de paramètres sur la ligne de commande. /etc/my.cnf Ce fichier donne les options globales pour tous les serveurs MySQL tournant sur la machine. On peut y indiquer des choix sur la taille des buffers utilisés, ou le paramétrage par défaut de tel ou tel client MySQL, mais surtout pas des mots de passe ! Ce fichier est accessible en lecture par tous les clients MySQL. DATADIR/my.cnf Quand il y a plusieurs serveurs, ce fichier, placé dans le répertoire racine des bases d’un serveur, permet d’indiquer les options pour ce serveur en particulier. .my.cnf Placé dans le répertoire $HOME d’un utilisateur, ce fichier donne les options et préférences de cet utilisateur. On peut y placer le compte de connexion à MySQL (login et mot de passe) en s’assurant que ce fichier n’est lisible que par l’utilisateur. Sous Windows, le fichier de configuration doit être placé dans C: . Malheureusement tout utilisateur ayant un compte sur la machine pourra lire son contenu. Évitez donc d’y placer des mots de passe. Configuration du serveur Le fichier /etc/my.cnf est particulièrement utile pour paramétrer le serveur. Entre autres options importantes, on peut : 1. choisir la langue pour les messages d’erreurs ; A.3. COMPLÉMENTS D’INSTALLATION POUR MYSQL 221 2. choisir la taille de la mémoire centrale allouée au serveur ; 3. fixer l’une des très nombreuses options de lancement du serveur mysqld. La commande suivante donne toutes les options possibles, % mysqld --help Voici un extrait de l’affichage obtenu avec cette commande. -b, --basedir=path Path to installation directory. All paths are usually resolved relative to this -h, --datadir=path Path to the database root -L, --language=... Client error messages in given language. May be given as a full path -l, --log[=file] Log connections and queries to file --log-update[=file] Log updates to file.# where # is a unique number if not given. --pid-file=path Pid file used by safe_mysqld -P, --port=... Port number to use for connection -O, --set-variable var=option Give a variable an value. --help lists variables --socket=... Socket file to use for connection -u, --user=user_name Run mysqld daemon as user La version longue des paramètres ci-dessus peut être utilisée dans le fichier /etc/my.cnf, à l’intérieur de la section commançant par mysqld. Voici l’exemple d’un paramétrage : [mysqld] port = socket = user = set-variable = language = french log log-update 3306 /tmp/mysql.sock mysql key_buffer=64M On a donc indiqué, entre autres : 1. que les messages doivent être en français (option language) ; 2. que toutes les connexions et requêtes à MySQL sont conservées dans un fichier log (dont le nom est, par défaut, mysqld.log et l’emplacement le répertoire racine des bases de données) ; 3. que toutes les mises à jour sont également conservées dans un fichier de log (voir la section sur les sauvegardes incrémentales, page 193) ; 4. que la mémoire cache pour les index est de 64 Mégaoctets (voir la section sur l’optimisation des performances, page 197). Configuration d’un compte administrateur Nous montrons maintenant comment configurer un compte administrateur qui veut se connecter, avec tout client de MySQL, à la base mysql sous le compte root. Nous prenons comme exemple le client mysql : voici un extrait des paramètres obtenus par mysql --help. -D, -e, -f, -H, -O, --database=.. Database to use --execute=... Execute command and quit. --force Continue even if we get an sql error. --html Produce HTML output --set-variable var=option Give a variable an value. --help lists variables -p, --password=... Password to use when connecting to server If password is not given it’s asked from the tty. -u, --user=# User for login if not current user -E, --vertical Print the output of a query (rows) vertically ANNEXE A. INSTALLATION APACHE/PHP/MYSQL 222 Dans un environnement Unix, voici comment indiquer avec un fichier de configuration, que l’utilisateur mysql est l’administrateur de la base de données. On indique que son compte de connexion à MySQL est root, on donne le mot de passe (mettez le vôtre !), et la base par défaut, mysql. 1. Copiez my-example.cnf dans le répertoire $HOME de mysql, et renommez-le en .my.cnf. 2. Éditez .my.cnf. Le fichier contient plusieurs sections dédiées respectivement aux paramètres du serveur, du client, etc. Dans la section commençant par [client], ajoutez deux lignes comme indiqué ci-dessous : [client] user password = root = mdproot Et dans la section [mysql], définissez la base par défaut : [mysql] database = mysql 3. Il ne reste plus qu’à protéger ce fichier des regards indiscrets % chmod go-rwx .my.cnf Une fois ce fichier créé, la commande mysql, exécutée sous le compte UNIX mysql, vous connecte directement à la base mysql sans avoir à entrer le compte utilisateur, le mot de passe, et sans avoir à faire USE mysql. Le principe est généralisable à tous les utilisateurs, en leur permettant une connexion automatique à leur base de référence. Vous pouvez par exemple indiquer des options de connexion pour le compte utilisateur d’Apache. Le compte et le mot de passe sont valables pour tous les clients de MySQL, ce qui permet, sous le compte mysql, d’arrêter le serveur sans entrer de mot de passe avec la commande. % mysqladmin shutdown A.3.3 phpMyAdmin Il existe de nombreux outils qui facilitent (au moins pour une prise de contact) la maintenance d’une installation MySQL. Nous décrivons ci-dessous l’installation de phpMyAdmin, une interface d’administration HTML très populaire. phpMyAdmin est une très bonne illustration de l’utilisation de PHP en association avec MySQL, et peut s’utiliser aussi bien sous Linux que sous Windows. Il se présente sous la forme d’un ensemble de fichiers PHP. Le fichier Documentation.html propose une documentation assez brève, que l’on peut toujours compléter en lisant le code (ce qui demande quand même un certain courage). Installation Nous donnons l’exemple d’une installation de phpMyAdmin, sous Linux. L’installation sous Windows est pratiquement identique puisqu’il n’y a aucune compilation. Dans ce qui suit on suppose que le numéro de version est 2.0.2. 1. Décompresser les fichiers dans le répertoire /usr/local/apache/htdocs : % cd /usr/local/apache/htdocs % cp phpMyAdmin 2.0.2.tar.gz . % gunzip phpMyAdmin 2.0.2.tar.gz % tar xvf phpMyAdmin 2.0.2.tar 2. On obtient un sous-répertoire de htdocs, nommé phpMyAdmin. 3. Éditez le fichier config.inc.php et remplacez english.inc.php par french.inc.php (en supposant que vous préfériez le français, bien sûr). A.3. COMPLÉMENTS D’INSTALLATION POUR MYSQL 223 Et c’est fini ! Il devient maintenant possible de vérifier que les serveurs MySQL et Apache tournent bien, et que phpMyAdmin est disponible. En accédant à l’URL localhost/phpMyAdmin sur votre machine avec Netscape, la page d’accueil de phpMyAdmin sur votre nouvelle base MySQL devrait s’afficher. Notez que vous avez le droit de tout faire (créer des bases, des utilisateurs, etc), sans avoir entré un seul mot de passe, tant que vous n’avez pas donné un mot de passe au compte root de MySQL ! Paramétrage Tous les éléments configurables sont en fait dans le fichier config.inc.php. La première chose que l’on peut choisir est la langue de travail qui est par défaut l’anglais. C’est déjà fait ci-dessus. Maintenant la partie importante est située au début du fichier. Elle contient la définition d’un tableau cfgServers à deux dimensions qui comprend autant d’entrées que de serveurs MySQL sur la machine hôte. L’entrée indicée par ’1’ correspond au premier serveur. Voici sa définition par défaut. $cfgServers[1][’host’] = ’localhost’; $cfgServers[1][’port’] = ’’; // = port par défaut $cfgServers[1][’adv_auth’] = false; $cfgServers[1][’stduser’] = ’root’; $cfgServers[1][’stdpass’] = ’’; $cfgServers[1][’user’] = ’’; $cfgServers[1][’password’] = ’’; $cfgServers[1][’only_db’] = ’’; Les options host et port permettent de préciser l’hôte du serveur MySQL, et le port d’écoute. En principe les valeurs par défaut conviennent. L’option adv auth détermine le type de protection utilisé pour l’accès à phpMyAdmin. Cas adv auth=true Si l’option adv auth est à true, phpMyAdmin transmet au programme client, au moment de la première demande d’accès d’un utilisateur, un document avec un en-tête HTML indiquant que l’utilisateur doit s’identifier. Le navigateur produit alors une fenêtre demandant un nom et un mot de passe qui sont transmis à phpMyAdmin quand l’utilisateur les a saisis. phpMyAdmin vérifie que ce compte correspond à un compte MySQL valide. Si c’est le cas une session est ouverte. Ce fonctionnement soulève un petit problème : pour vérifier que le compte est correct, il faut disposer d’un autre compte pouvant interroger la base dictionnaire mysql ! Ce deuxième compte doit être indiqué dans les champs stduser et stdpass. On peut donner le compte root qui a tous les droits sur la base mysql, mais il est un peu gênant de mettre en clair le mot de passe de root dans un fichier lisible sur le Web... Un moindre mal est de créer un compte MySQL spécial phpAdmin qui a juste le droit d’inspecter les tables de mysql. mysql> GRANT select ON mysql.* TO phpAdmin -> IDENTIFIED by’mdpPhpAdmin’; Voici maintenant le paramétrage pour l’authentification d’un utilisateur au moment de la connexion. $cfgServers[1][’adv_auth’] = true; $cfgServers[1][’stduser’] = ’phpAdmin’; $cfgServers[1][’stdpass’] = ’mdpPhpAdmin’; $cfgServers[1][’user’] = ’’; $cfgServers[1][’password’] = ’’; phpMyAdmin se connectera donc avec le compte phpAdmin/mdpPhpAdmin pour vérifier le compte saisi interactivement par l’utilisateur. ANNEXE A. INSTALLATION APACHE/PHP/MYSQL 224 Cas adv auth=false Dans ce cas la connexion à MySQL se fait avec les valeurs des champs user et password. Il faut renseigner ces champs avec un compte utilisateur. Par défaut l’utilisateur anonyme est indiqué, ce qui permet de se connecter, et rien de plus. Si vous êtes seul à utiliser phpMyAdmin, l’option adv auth=false est envisageable. Elle impose quand même d’indiquer un mot de passe utilisateur dans le fichier, par exemple : $cfgServers[1][’adv_auth’] = false; $cfgServers[1][’stduser’] = ’’; $cfgServers[1][’stdpass’] = ’’; $cfgServers[1][’user’] = ’adminFilms’; $cfgServers[1][’password’] = ’mdpAdmin’; Le problème, alors, et que tout le monde peut accéder au site phpMyAdmin et se connecter automatiquement à MySQL. Il est impératif de protéger le répertoire phpMyAdmin avec le mécanisme d’authentification de Apache. Voici comment procéder. 1. Dans un répertoire quelconque accessible par Apache, nommé rep dans ce qui suit, créez un fichier d’authentification avec le programme htpasswd. Par exemple : % htpasswd -c admin.pass adminPHP Le programme vous demande un mot de passe et crée un fichier rep/admin.pass qui contient une entrée adminPHP/motDePasse. 2. Indiquez à Apache que le répertoire phpMyAdmin est protégé par le fichier admin.pass. Vous pouvez ajouter la section suivante dans le fichier httpd.conf (sous-répertoire apache/conf ). <Directory /usr/local/apache/htdocs/phpMyAdmin> AuthName "phpMyAdmin" AuthUserFile rep/admin.pass AuthType Basic require valid-user </Directory> Bien entendu il faut remplacer rep par le chemin d’accès à admin.pass. Après avoir relancé Apache, le compte sera systématiquement demandé pour tout accès à phpMyAdmin. Comme tout fichier contenant des mots de passe, config.inc.php doit être protégé des regards indiscrets. Limitez les droits en lecture au compte utilisateur de Apache, et les droits en écriture au compte du webmestre du site. 225 Annexe B Référence MySQL Sommaire B.1 Types de données MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 B.2 Commandes de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 B.3 Fonctions SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Cette annexe est consacrée aux commandes, langages et utilitaires de MySQL. Nous commençons par les types de données utilisables pour les attributs des tables, avant de passer en revue toutes les commandes du langage SQL et des extensions proposées par MySQL. B.1 Types de données MySQL MySQL est remarquablement conforme à la norme SQL ANSI, contrairement à d’autres SGBD, plus anciens, dont le système de types était déjà bien établi avant la parution de cette norme (en 1992). MySQL propose également quelques variantes et extensions, la principale étant la possibilité de stocker des attributs de type Binary Long Object (BLOB). Le tableau B.1 résume la liste des types d’attributs, donne la taille de stockage utilisée par MySQL, et indique si le type fait partie ou non de la norme SQL ANSI. Types numériques exacts La norme SQL ANSI distingue deux catégories d’attributs numériques : les numériques exacts, et les numériques flottants. Les types de la première catégorie (essentiellement INTEGER et DECIMAL) permettent de spécifier la précision souhaitée pour un attribut numérique, et donc de représenter une valeur exacte. Les numériques flottants correspondent aux types couramment utilisés en programmation (FLOAT, DOUBLE) et ne représentent une valeur qu’avec une précision limitée. Tous les types numériques acceptent l’option ZEROFILL qui indique que l’affichage d’une valeur numérique se fait avec la largeur maximale, les chiffres étant complétés par des zéros. Par exemple la valeur 3 stockée dans un type INTEGER ZEROFILL sera affichée 0000000003. Le type INTEGER permet de stocker des entiers, sur 4 octets dans MySQL, mais la taille du stockage n’est pas spécifiée par la norme. La taille de l’affichage est fonction de la valeur maximale possible (en l’occurrence 10 positions), mais peut être précisée optionnellement avec la valeur M comme indiqué dans la syntaxe ci-dessous. INTEGER[(M )] [UNSIGNED] [ZEROFILL] Le type INTEGER peut être complété par le mot-clé UNSIGNED qui spécifie si le stockage comprend un bit de signe ou non. Cette option (qui ne fait pas partie de la norme SQL) a un impact sur l’intervalle des