MySQL sur Mac OS X
MySQL est devenu un des plus populaires systèmes de gestion de bases de données pour les applications Web. Une base de données est bien adaptée aux tâches basiques relatives au Web comme la gestion de contenu, et pour la mise en place de services comme les forums de discussion et les livres d’or. Pendant un temps, certains développeurs évitaient MySQL pour les applications commerciales car il lui manquait des fonctionnalités, comme les transactions. Ce n’est plus le cas aujourd’hui et MySQL est un bon choix pour toutes les applications Web.
Dans cet article, je vous présenterais succinctement les fonctionnalités et inconvénients de MySQL, je vous expliquerais comment installer MySQL sur Mac OS X et je vous montrerais quelques aspects techniques importants de MySQL.
Fonctionnalités de MySQL
Le plus important des avantages de MySQL est peut-être sa rapidité d’exécution de l’instruction SQL SELECT. MySQL a été conçu pour la vitesse. Le cœur du moteur de MySQL est très petit et rationalisé, et le type de table par défaut (une table ISAM modifiée) a été conçu spécifiquement pour exécuter SELECT très rapidement. Si votre application tire profit d’une structure relationnelle mais que son contenu est relativement statique—comme c’est souvent le cas des contenus Web—la rapidité de MySQL est un avantage considérable.
MySQL est aussi indéniablement stable. A la fois dans vos environnements de production et de serveur, vous pouvez raisonnablement faire confiance à MySQL pour qu’il soit opérationnel et qu’il réponde aux requêtes tant que l’électricité alimente votre machine.
Un autre avantage important est que l’apprentissage de MySQL est relativement facile. Même si vous ne connaissez pas les bases de données relationnelles, vous pouvez apprendre à utiliser MySQL et créer des applications très sophistiquées pour le Web en peu de temps.
La popularité de MySQL est aussi un avantage, car si vous êtes en difficulté, vous pouvez compter sur l’active communauté qui supporte MySQL. Il y a beaucoup de listes de diffusion dédiées à MySQL, et la plupart des questions trouvent des réponses rapides et complètes.
Inconvénients de MySQL
Si vous êtes un utilisateur expérimenté des bases de données, vous devez être prévenus de quelques limitations de MySQL. L’implémentation par MySQL de SQL ne gère pas les sous sélections, les contraintes de clés étrangères, les procédures stockées ni les vues. Si vous pensez avoir besoin de ces fonctionnalités, vous devriez vous intéresser à PostgreSQL, Frontbase ou un autre SGBD.
L’absence de gestion des transactions est considéré comme un inconvénient de MySQL, mais cela a été corrigé. Maintenant, sur Mac OS X, vous pouvez utiliser le type de table InnoDB et avoir accès à une gestion d’un verrouillage au niveau de l’enregistrement (row-level locking) et d’un système de transaction robuste, de même que des contraintes de clefs étrangères.
Installer MySQL
Si vous êtes sur Mac OS X Serveur, vous avez de la chance car MySQL est déjà installé. Allez simplement dans /Applications/Utilitaires/Gestionnaire MySQL. Si vous êtes sur Mac OS X, vous devrez l’installer. Vous voudrez peut-être simplement utiliser un installateur. Dans ce cas, je vous conseille la distribution de http://www.entropy.ch (Marc Liyanage), qui est accompagnée d’un joli installateur graphique. Vous pouvez aussi utiliser la distribution binaire définitive de http://www.mysql.com/. Enfin, vous pourriez vouloir compiler et installer depuis les sources, que ce soit pour changer les options de construction par défaut ou pour installer la toute dernière version avant qu’elle soit disponible sous forme d’un binaire. La suite devrait vous aider dans ce processus.
Quand on installe MySQL, vous devez être attentif aux effets potentiels sur la sécurité de votre système, du fait qu’un serveur de base de données peut ouvrir une brèche pour les attaques. Dans l’exemple ci-après, je vous montrerais comment installer MySQL sur Mac OS X tout en préservant la sécurité de votre système. Pour plus d’informations sur la sécurité, voyez les sections Développeurs Internet “Security Introduction” et “Security: Mac OS X and UNIX” sur Apple Developer Connection.
Un des dogmes de base en matière de sécurité est celui du “plus petit privilège”. Pour faire simple, cela signifie que chacun et chaque chose n’a que les privilèges requis pour accomplir sa (ses) tache(s). Ces privilèges doivent être accordés pour le moins de temps possible, idéalement juste le temps d’accomplir la tâche, avant d’être révoqués. Pour isoler MySQL afin qu’il respecte ce concept du plus petit privilège, vous devez créer un compte et un groupe d’utilisateur UNIX juste pour MySQL. Par simplification, j’ai choisi le nom “mysql” à la fois pour le compte et pour le groupe, et j’ai donné le même numéro (401) aux ID du compte (uid) et du groupe (gid). J’ai aussi choisi de construire MySQL depuis les sources, au lieu d’utiliser un binaire. Ceci me donne un meilleur contrôle sur l’installation, ainsi que vous le verrez plus loin.
Vous pouvez créer le compte via le module Comptes des Préférences Système, mais ce n’est pas la meilleure méthode. Le module Comptes est conçu pour créer des comptes pour … les utilisateurs. Chaque compte créé via ce module est affecté au même groupe UNIX (users) et obtient un répertoire de départ créé dans /Users qui est plein de choses dont un utilisateur système n’a pas besoin, telle que le répertoire ~/Movies.
Je vais vous montrer deux manières différentes d’ajouter des utilisateurs à un système Mac OS X sans inclure les attributs inutiles ajoutés par le module Comptes. La première méthode utilise le Gestionnaire NetInfo, la seconde l’utilitaire en lignes de commande niutil.
Ajouter un utilisateur avec le Gestionnaire NetInfo
Utiliser le Gestionnaire NetInfo n’est pas aussi facile que d’utiliser le module Comptes, mais il offre un contrôle plus précis. Le Gestionnaire NetInfo se trouve dans /Applications/Utilitaires. Au lancement, vous obtenez un navigateur de répertoire avec une vue du répertoire NetInfo de votre système. Cela ressemble à la vue en colonnes du Finder de Mac OS X. Dans la colonne la plus à gauche, il y a une simple entrée (/), qui est surlignée. Dans la deuxième colonne en partant de la gauche il devrait y avoir quelques entrées, dont “users” et “groups”.

Pour ajouter le groupe et le compte système, authentifiez vous en utilisant le cadenas en bas à gauche afin de pouvoir faire des changements. Sélectionnez “groups” et, dans la troisième colonne, vous obtiendrez la liste des groupes UNIX présents sur le système. Cliquez sur le groupe “www” et choisissez Dupliquer dans le menu Édition. Cela crée une entrée nommée “www copy”. Quand vous le sélectionnez, la fenêtre du bas contiendra trois entrées : “passwd”, “name” et “gid”. Changez le nom de “www copy” en “mysql” et le “gid” de 70 en 401 (ou ce que vous voulez, tant que celui ci ne correspond pas à un gid existant sur le système). Quand vous cliquez sur l’entrée “users”, le système va vous demandez de confirmer et de recharger les réglages que vous avez changés. Allez de l’avant et acceptez les changements.

Sélectionnez l’élément “users” et sélectionnez l’entrée “www” et dupliquez la. Changez “realname” en quelque chose que vous aimez (”M. MySQL”, peut-être), “name” en “mysql”, “uid” en 401, “home” en /usr/local/mysql/mysql_home et “gid” en 401. Le “gid” doit correspondre à celui que vous avez donné au groupe “mysql”, et le “uid” doit être unique—ne dupliquez pas un autre “uid”. Je choisis “home” arbitrairement, l’utilisateur “mysql” n’ayant pas réellement besoin d’un répertoire “home”. Vous pouvez maintenant confirmer et sauver les changements.

Ajouter un utilisateur avec niutil
Le programme niutil ajoute, efface et modifie les utilisateurs et les groupes depuis le shell. Vous pouvez apprendre son utilisation en lisant sa manpage (tapez “man niutil” dans le shell). Cet utilitaire est raisonnablement facile à utiliser et vous devez apprendre à l’utiliser si vous envisagez d’écrire des scripts d’administration gérant les utilisateurs. Les commandes suivantes ajouteront un groupe et un utilisateur, tous les deux nommés “mysql”, à votre système Mac OS X. Le “gid” sera réglé à 401, tout comme le “uid”. (Notez que “sudo” précède chaque commande, ce qui montre qu’elles demandent un accès “root”).
sudo niutil -create / /groups/mysql sudo niutil -createprop / /groups/mysql gid 401 sudo niutil -create / /users/mysql sudo niutil -createprop / /users/mysql gid 401 sudo niutil -createprop / /users/mysql uid 401
Une fois que vous avez exécutez ces commandes, vous aurez à donner un mot de passe au nouvel utilisateur. Vous pouvez le faire avec cette commande :
sudo passwd mysql
Après avoir entré cette commande, vous devrez entrer deux fois le nouveau mot de passe.
Configurer et compiler MySQL
J’ai prévu d’installer MySQL dans /usr/local/mysql. J’ai aussi prévu de localiser l’accès UNIX de MySQL dans le répertoire /usr/local/mysql/ comme /usr/local/mysql/run/mysql_socket afin qu’il soit publiquement disponible mais associé à l’installation de MySQL. Notez que dans une installation standard, l’accès serait placé dans /tmp.
Vous pouvez maintenant télécharger les sources via un navigateur Web ou en utilisant curl. J’ai utilisé curl pour télécharger les sources de MySQL 4.0.4 :
curl -O http://mysql.he.net/Downloads/MySQL-4.0/mysql-4.0.4-beta.tar.gz
Cette commande télécharge depuis la branche de développement 4.x, qui, au moment de l’écriture de cet article, est expérimentale. Vous pouvez télécharger depuis la branche 3.23 (NdT : mis à jour par rapport à l’article traduit) :
curl -O http://www.mysql.com/Downloads/MySQL-3.23/mysql-3.23.54a.tar.gz
Une fois que vous avez les sources, vous pouvez suivre les “quick install directions” des pages de documentations de MySQL, en ajoutant seulement le support du débogage (–with-debug) et l’environnement “comment” (–with-comment). La commande de configuration devrait ressembler à cela :
./configure --prefix=/usr/local/mysql
--with-unix-socket-path=/usr/local/mysql/run/mysql_socket
--with-mysqld-user=mysql
--with-comment
--with-debug
Une fois la configuration terminée, exécuter “make” puis “sudo install” installe MySQL dans /usr/local/mysql. Exécuter “sudo /usr/local/mysql/bin/mysql_install_db –force” ajoute l’espace “var/” pour les bases de données et crée les bases de données par défaut (mysql et test). Vous devez ajouter le répertoire “run/” là où l’accès UNIX de mysql aura lieu avec “sudo mkdir /usr/local/mysql/run”. Une fois que cela est fait, un listage de répertoire devrait ressembler à cela :
% ls -Fla /usr/local/mysql/ total 26 drwxr-xr-x 13 root wheel 1024 Jun 5 13:42 ./ drwxr-xr-x 11 root wheel 1024 Jun 5 12:19 ../ drwxr-xr-x 2 root wheel 1024 Jun 5 12:20 bin/ drwxr-xr-x 3 root wheel 1024 Jun 5 12:19 include/ drwxr-xr-x 2 root wheel 1024 Jun 5 12:19 info/ drwxr-xr-x 3 root wheel 1024 Jun 5 12:19 lib/ drwxr-xr-x 2 root wheel 1024 Jun 5 12:20 libexec/ drwxr-xr-x 3 root wheel 1024 Jun 5 12:20 man/ drwxr-xr-x 6 root wheel 1024 Jun 5 12:21 mysql-test/ drwxr-xr-x 2 root wheel 1024 Jun 5 13:42 run/ drwxr-xr-x 3 root wheel 1024 Jun 5 12:20 share/ drwxr-xr-x 7 root wheel 1024 Jun 5 12:21 sql-bench/ drwx------ 4 root wheel 1024 Jun 5 13:37 var/
Notez qu’à ce moment tout est la propriété de root—ce qui veut dire que le compte mysql n’est pas en mesure d’écrire dans les bases de données dans var/ ni de créer l’accès UNIX mysql dans le répertoire run/. Puisque nous voulons utiliser le serveur MySQL avec le compte mysql, et pas avec le compte root, nous devons changer l’association de groupe de /usr/local/mysql pour la faire correspondre au groupe “mysql”, et la propriété de /usr/local/mysql/run et /usr/local/mysql/var pour la faire correspondre à l’utilisateur “mysql” :
sudo chgrp -R mysql /usr/local/mysql sudo chown -R mysql /usr/local/mysql/run /usr/local/mysql/var
Le listage du répertoire ressemblera à ça :
% ls -Fla /usr/local/mysql total 26 drwxr-xr-x 13 root mysql 1024 Jun 5 13:42 ./ drwxr-xr-x 11 root wheel 1024 Jun 5 12:19 ../ drwxr-xr-x 2 root mysql 1024 Jun 5 12:20 bin/ drwxr-xr-x 3 root mysql 1024 Jun 5 12:19 include/ drwxr-xr-x 2 root mysql 1024 Jun 5 12:19 info/ drwxr-xr-x 3 root mysql 1024 Jun 5 12:19 lib/ drwxr-xr-x 2 root mysql 1024 Jun 5 12:20 libexec/ drwxr-xr-x 3 root mysql 1024 Jun 5 12:20 man/ drwxr-xr-x 6 root mysql 1024 Jun 5 12:21 mysql-test/ drwxr-xr-x 2 mysql mysql 1024 Jun 5 13:42 run/ drwxr-xr-x 3 root mysql 1024 Jun 5 12:20 share/ drwxr-xr-x 7 root mysql 1024 Jun 5 12:21 sql-bench/ drwx------ 4 mysql mysql 1024 Jun 5 13:37 var/
Vous pouvez maintenant démarrer MySQL et accomplir quelques tâches importantes, comme entrer un mot de passe pour mysql pour protéger le serveur lui même. Notez que bien que démarrer le serveur exige les privilèges root sur le système, les actions à l’intérieur du serveur de bases de données ne demandent pas les privilèges root du système mais ceux du root de base de données. C’est un peu déroutant mais MySQL utilise un nom de compte “root” pour son utilisateur tout puissant, tout comme le système, alors que ce sont deux entités complètement distinctes.
Le démarrage de MySQL s’effectue comme suit :
sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &
Maintenant vous pouvez exécuter les quelques tests basiques—mais vous devriez d’abords continuer et sécuriser la base de données en ajoutant un mot de passe à l’utilisateur “root” de cette façon :
/usr/local/mysql/bin/mysqladmin -u root password sniggle
Ici, le mot de passe que vous attribuez est “sniggle”. Dans MySQL, un simple utilisateur est associé à un nom et à un hôte. La plupart du temps sur votre machine de développement vous serez connectéà la base localement, et l’hôte sera donc “localhost”. Toutefois, si vous essayez de vous connecter depuis une machine différente, vous aurez à définir des permissions fondées à la fois sur les nom d’utilisateur et les noms d’hôte. Pour plus d’informations au sujet des utilisateurs et des mots de passe dans MySQL, lisez ceci au sujet des tables d’autorisation de MySQL, et les déclarations pour les autorisations (grant) et les révocations (revoke).
Conclusion
MySQL est une bonne base de données pour les applications Web et un bon complément d’un environnement de développement Mac OS X. Installez le sur votre machine et créer des applications avec Perl, PHP, JSP ou les langages que vous préférez. Pour administrer MySQL sur Mac OS X, vous pouvez jeter un œil sur le populaire utilitaire à interface Web phpMyAdmin (NdT : mis à jour par rapport au texte original) ou MacSQL de Runtime Labs.
Pour des informations sur le lancement de MySQL au démarrage, voyez cette article de macosxfaq.com (NdT : ou le script de démarrage de Marc Liyanage).
![]()
Texte original en anglais sur developer.apple.com : MySQL on Mac OS X
Chargement
Commentaires récents