<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Je pensais qu&#039;il était avec vous... &#187; MySQL</title>
	<atom:link href="http://www.patpro.net/blog/index.php/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.patpro.net/blog</link>
	<description>patpro.net</description>
	<lastBuildDate>Mon, 23 Jan 2012 23:09:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Nuxeo contre Alfresco</title>
		<link>http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/</link>
		<comments>http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 11:05:09 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Grrr]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1990</guid>
		<description><![CDATA[Après un mois d'utilisation du logiciel de GED Nuxeo DM, le bilan est plutôt négatif. Je pensais naïvement avoir mis la main sur une application correcte (comme elle est en JAVA, elle peut tout au plus être correcte). Un pré-requis très important pour moi était la possibilité d'utiliser MySQL comme moteur de base de données. [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/' addthis:title='Nuxeo contre Alfresco '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Après un mois d'utilisation du logiciel de GED <a href="/blog/index.php/2011/12/03/1940-la-gestion-electronique-de-documents-episode-1/" title="La gestion électronique de documents, épisode 1">Nuxeo DM</a>, le bilan est plutôt négatif. Je pensais naïvement avoir mis la main sur une application correcte (comme elle est en JAVA, elle peut tout au plus être correcte). Un pré-requis très important pour moi était la possibilité d'utiliser MySQL comme moteur de base de données. En réalité, bien que Nuxeo supporte MySQL officiellement, l'usage de ce moteur est absolument découragé. Les développeurs listent <a href="http://doc.nuxeo.com/pages/viewpage.action?pageId=3343486">une série de raisons</a> somme-toute valables, et qui peuvent se résumer comme ceci : il aurait fallu coder Nuxeo pour qu'il supporte les spécificités de MySQL, et on a eu la flemme. En réalité, rien ne fonctionne vraiment correctement si on utilise Nuxeo avec MySQL. À tel point qu'il ne devrait même pas être possible de choisir ce serveur de base de données dans les menus de configuration de Nuxeo. Et c'est bien ça qui me met en rogne. J'ai perdu un mois, et de nombreuses heures de travail pour un logiciel qui oscille finalement entre le "peu fiable" et le "carrément inutilisable".<br />
Entre alors en scène Alfresco. Un logiciel concurrent, codé lui aussi en (<a href="http://www.urbandictionary.com/define.php?term=wait%20for%20it">wait for it</a>) JAVA. Ce dernier fonctionne très bien avec MySQL, je l'ai donc installé sans tarder pour me faire une opinion  sur ses capacités. Les différences avec Nuxeo sont importantes.<br />
<span id="more-1990"></span><br />
Sur le plan de l'installation, Nuxeo est livré tout packagé. Il utilise un tomcat "clé en main" pré-configuré et se trouve centralisé dans un répertoire unique. A contrario, Alfresco est livré sous la forme d'un fichier WAR, qu'il faut installer dans un serveur tomcat. Il faut en plus déplacer ou copier des fichiers à la main, en suivant des instructions souvent incomplètes glanées sur internet. Par contre sur FreeBSD tomcat est livré avec un script de lancement, alors que pour Nuxeo <a href="/blog/index.php/2011/12/12/1979-installation-de-nuxeo-dm-sur-freebsd-episode-3/" title="Installation de Nuxeo DM sur FreeBSD, épisode 3">j'ai du en créer un</a>.<br />
Bref, sur FreeBSD Nuxeo est à peu près utilisable immédiatement après l'avoir téléchargé, alors qu'Alfresco nécessite plus de travail et que sa documentation est déficiente à ce sujet.</p>
<p>Sur le plan de la configuration initiale, Nuxeo est aussi en tête. Une fois l'application lancée, on s'y connecte, et on personnalise les réglages via l'interface web directement. Du côté d'Alfresco, rien n'est prévu pour faciliter la configuration au moment du déploiement. Il faut éditer un fichier de configuration à la main dans le quel on indique des chemins de fichiers, des informations de connexions pour le serveur de bases de données, etc. De même seul Nuxeo prévoit un menu d'administration complet gérant entre autres choses les patch de mises à jour, et le redémarrage de l'application.</p>
<p>Mais tout ça n'est pas grand chose. Finalement, on ne passe pas son temps à installer et configurer une application. La différence se fait sur l'usage.</p>
<p>En terme d'ergonomie, c'est Nuxeo qui remporte la palme. L'interface est enrichie de fonctions en AJAX, qui permettent par exemple de déplacer un document d'une catégorie à une autre par glisser-déposer, ou bien d'envoyer des documents directement à partir de votre ordinateur vers Nuxeo. Alfresco quant à lui est très en dessous. Tout d'abord il est livré sous la forme de deux applications Alfresco d'un côté, et Share de l'autre. La première se rapproche un peu de Nuxeo DM, mais sans l'AJAX. Pour faire la moindre choses il faut multiplier les clics, c'est assez pénible. La seconde, Share, est plutôt orientée utilisateur final, publication, média "sociaux". Elle propose l'import de documents par glissé-déposé comme Nuxeo, mais elle manque de sobriété. Les documents sont présentés par défaut sous forme de liste de grosses icones aussi inélégantes qu'encombrantes. De nombreuses actions peuvent être faites aussi bien dans Alfresco que dans Share, mais pas toutes. Par exemple je peux utiliser des noms de tags dans le champs de recherche de Share, alors que cela ne fonctionne pas dans Alfresco. Finalement quand on veut faire quelque chose, il faut d'abord se souvenir dans la quelle des deux applications c'est possible (et le plus simple) et s'y connecter. C'est juste n'importe quoi.</p>

<a href='http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/nuxeo-liste/' title='nuxeo-liste'><img width="150" height="95" src="http://www.patpro.net/blog/wp-content/uploads/2011/12/nuxeo-liste-150x95.png" class="attachment-thumbnail" alt="affichage d&#039;une liste de documents dans Nuxeo" title="nuxeo-liste" /></a>
<a href='http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/alfresco-liste/' title='alfresco-liste'><img width="150" height="84" src="http://www.patpro.net/blog/wp-content/uploads/2011/12/alfresco-liste-150x84.png" class="attachment-thumbnail" alt="affichage d&#039;une liste de documents dans Alfresco" title="alfresco-liste" /></a>
<a href='http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/share-liste/' title='share-liste'><img width="150" height="100" src="http://www.patpro.net/blog/wp-content/uploads/2011/12/share-liste-150x100.png" class="attachment-thumbnail" alt="affichage d&#039;une liste de documents dans Share (Alfresco)" title="share-liste" /></a>

<p>La recherche des documents est aussi une dimension importante de la GED. Elle repose sur une indexation du contenu des documents, sur des métadonnées, sur une organisation. J'ai tendance à considérer que l'organisation physique des documents ne doit pas trop peser dans la balance. Il n'y a qu'une manière de classer une facture médicale. Doit-on la ranger dans le dossier "facture", dans le dossier "facture" du dossier "santé" ou dans le dossier "santé" du dossier "facture" ?<br />
Je préfère de loin un système de tags ou de catégories qui me permette d'accoler plus d'une étiquette à un document, et surtout de retrouver tel ou tel document en combinant ces étiquettes dans un champ de recherche. Les tags dans Nuxeo sont assez accessibles. On en ajoute facilement, mais je ne peux pas chercher un document en tapant un ou plusieurs tags dans le champs de recherche. Les tags sont très bien cachés dans Alfresco, et ils sont inutilisables par défaut. A contrario, sans Share les tags sont accessibles, et on peut les utiliser facilement pour une recherche. Malheureusement, il est alors impossible de préciser qu'on souhaite chercher uniquement dans les tags, ce qui réduit l'intérêt de la chose.</p>
<p>La gestion des sauvegardes d'un entrepôt de données est primordiale. Nuxeo étant par défaut entièrement inclus dans un répertoire unique, il n'y a que deux choses importantes à sauvegarder pour que l'application puisse repartir rapidement en cas de désastre : le répertoire de l'application, et la base de données. J'ai déjà un script qui sauvegarde automatiquement mes bases MySQL, mais comme expliqué plus haut, MySQL n'est pas une option. Garder Nuxeo impliquerait donc d'apprendre à gérer des sauvegardes PostgreSQL (dump, rétention, archivage, et restauration), en plus de l'administration courante.<br />
Alfresco est fragmenté, et nécessite un peu plus de préparation pour gérer les sauvegardes, en contrepartie, son support de MySQL m'assure une sauvegarde fonctionnelle immédiatement, et des archives que je sais restaurer sans lire le manuel. Alfresco bénéficie aussi d'un mécanisme de réplication, ce qui permet de bénéficier d'un second serveur de secours (ou de proximité) en cas de panne du serveur habituel.</p>
<p>Au bout du compte, j'ai l'impression que Nuxeo reste une solution intéressante. Ses points faibles ne sont pas si dramatiques, même si pour moi une bonne recherche par tags est primordiale. Alfresco propose des fonctionnalités appétissantes comme la réplication de serveur, une interface orientée utilisateur permettant la recherche par tags (Share). Mais le manque de glisser-déposer et glisser-déplacer, ainsi que le très grand nombre de clics pour la moindre action sont de vrais handicaps dans la phase de remplissage.<br />
Malheureusement pour Nuxeo, je n'ai pas une minute à consacrer à l'apprentissage de PostgreSQL, ce qui laisse une chance à Alfresco de se faire une place sur mon serveur. Comme la migration d'un système à l'autre est totalement illusoire, voire impossible, je vais me laisser encore le temps de la réflexion, avant de charger et classer des centaines de documents dans l'un ou l'autre.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/' addthis:title='Nuxeo contre Alfresco '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2012/01/05/1990-nuxeo-contre-alfresco/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Sauvegarde de bases MySQL via SVN</title>
		<link>http://www.patpro.net/blog/index.php/2010/01/11/1347-sauvegarde-de-bases-mysql-via-svn/</link>
		<comments>http://www.patpro.net/blog/index.php/2010/01/11/1347-sauvegarde-de-bases-mysql-via-svn/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 08:45:57 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://www.patpro.net/blog/?p=1347</guid>
		<description><![CDATA[Il existe de nombreuses possibilités pour sauvegarder et archiver des bases de données, MySQL ou autres. En général, le protocole de sauvegarde dépend largement de l'objectif que l'on s'impose et des moyens dont on dispose. La rétention des données sur le long terme pose bien sûr des problèmes de format et de support&#160;: vais-je pouvoir [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2010/01/11/1347-sauvegarde-de-bases-mysql-via-svn/' addthis:title='Sauvegarde de bases MySQL via SVN '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Il existe de <a href="/blog/index.php/2008/05/16/148-sauvegarder-des-bases-mysql/">nombreuses possibilités</a> pour sauvegarder et archiver des bases de données, MySQL ou autres. En général, le protocole de sauvegarde dépend largement de l'objectif que l'on s'impose et des moyens dont on dispose.<br />
La rétention des données sur le long terme pose bien sûr des problèmes de format et de support&nbsp;: vais-je pouvoir relire mes sauvegardes dans dix ans&nbsp;? Elle pose aussi des problèmes de volume : puis-je me permettre d'archiver l'intégralité de mes bases une fois par jour pendant des années&nbsp;?<br />
Personne n'a de réponses absolues à toutes ces questions, car finalement tout est affaire de compromis. Dans la plupart des cas, j'utilise des scripts qui font un dump de mes bases de données, et qui archivent le résultat avec une rétention, en général, d'une semaine.<br />
Le dump a cela de fantastique que c'est un format texte, il est donc lisible et modifiable par l'homme. Pas besoin de retrouver une version de MySQL compatible pour récupérer le contenu des bases archivées. Néanmoins il peut être assez volumineux suivant les options choisies, et le stockage à long terme peut vite devenir problématique. Dans le cadre de mon travail par exemple, le volume d'un dump pour un jour donné atteint 2,2 Go. Par contre, dans la plupart des bases de données, assez peu de données sont modifiées d'un jour sur l'autre. On pourrait économiser un maximum de place en n'enregistrant que la différence avec la veille. C'est là qu'intervient Subversion (SVN). Cet outil de versioning permet de ne stocker que la différence entre la version originale d'un fichier enregistrée initialement, et les versions ultérieures. Subversion est fourni de base avec Mac OS X, et il est disponible sur de très nombreux systèmes.<br />
<span id="more-1347"></span><br />
Pour certaines bases de données j'utilise normalement deux scripts. Le premier script crée le dump d'une base, et compare ce dump avec le précédent. Si ils sont différents, le nouveau dump est placé dans un répertoire sous le contrôle de SVN.<br />
Le second script fait un commit du fichier, et plein d'autres choses que je ne détaillerai pas ici.<br />
Pour faire plus simple, je présente ici un script unique qui s'acquitte de ces deux missions : dump d'une base de données, et injection dans SVN si nécessaire.</p>
<pre>#!/bin/bash

################################################################################
# gestion du dump de la base de données
#
# nom de la DB
MA_DB=mabase
# dossier de travail :
MAISON=/var/root/svn
# nom et chemin du dépôt svn
NOM="backup_db"
REPOS="/var/subversion/${NOM}/trunk"
# répertoire de stockage du dump dans
# la copie de travail svn
MA_DB_DOCROOT=${MAISON}/${NOM}/${MA_DB}/
# nom du dump
DUMP_SQL=dump_${MA_DB}.sql
# login/mot de passe pour faire le dump
SQL_PASSWD=mon_pass
SQL_LOGIN=mon_log
# action : dump de la base MA_DB
cd /tmp/ || exit 1
/usr/bin/mysqldump -h localhost \
	--skip-dump-date \
	--skip-opt \
	--add-drop-table \
	--add-locks \
	--create-options \
	--disable-keys \
	--set-charset \
	-u ${SQL_LOGIN} -p${SQL_PASSWD} \
	--ignore-table=${MA_DB}.event_log ${MA_DB} &gt; ${DUMP_SQL}

################################################################################
# gestion de l'enregistrement dans SVN
#
# chemin du binaire :
SVN=/usr/bin/svn

# umask de travail pour les documents sensibles :
umask='u=rwx,g=,o='

# si le dossier de destination n'existe pas on le crée :
[ ! -d $MAISON ] &#038;& umask $umask &#038;& mkdir $MAISON

# un peu d'environnement au cas où :
[ ! $HOME ] &#038;& HOME=/var/root

# on y va :
cd "$MAISON"
# si la copie de travail n'existe pas, on la crée.
# c'est "one shot".
if [ ! -d "${MAISON}/${NOM}" ]; then
	umask $umask
	mkdir "${MAISON}/${NOM}"
	echo "Checkout initial de ${NOM} !"
	$SVN co "file://${REPOS}" "${MAISON}/${NOM}"
fi
# on se place dans la copie de travail svn
cd "${NOM}"
umask $umask
# on l'update au cas où le dépôt svn aurait
# été mis à jour par un autre moyen
echo "Update de ${NOM}"
$SVN update
# copie conditionnelle du dump dans la copie de travail SVN
cd /tmp/
diff -q ${DUMP_SQL} ${MA_DB_DOCROOT}${DUMP_SQL} || \
	cp -f ${DUMP_SQL} ${MA_DB_DOCROOT}
# commit éventuel du dump de ${MA_DB}
$SVN commit -m "dump de ${MA_DB} du `date`" "${MA_DB_DOCROOT}${DUMP_SQL}"
</pre>
<p>Dans le détail, voici le déroulement du script :</p>
<ol type="1">
<li>Définition de variables.</li>
<li>Dump de la base de données <code>$MA_DB</code> dans le fichier <code>/tmp/$DUMP_SQL</code>.</li>
<li>Si le répertoire <code>$MAISON</code> n'existe pas, on le crée. Par défaut, c'est <code>/var/root/svn</code>, ce qui lui assure une certaine intimité mais oblige à lancer le script en root.</li>
<li>On se place dans <code>$MAISON</code>, et on crée le répertoire <code>$NOM</code> si il n'existe pas. Par défaut, c'est <code>backup_db</code>.</li>
<li>Si <code>$NOM</code> n'existait pas, c'est que le premier <code>checkout</code> du serveur SVN n'avait pas été fait, donc on le fait.</li>
<li>On se déplace dans <code>$NOM</code>, et on fait un <code>update</code> de la copie de travail.</li>
<li>Ensuite, si le dump <code>/tmp/$DUMP_SQL</code> est différent de celui qui est stocké dans la copie de travail <code>${MA_DB_DOCROOT}${DUMP_SQL}</code> on replace ce dernier par le nouveau dump.</li>
<li>Pour finir on fait un <code>commit</code> du fichier de dump (si il n'a pas changé, le <code>commit</code> ne fait rien).</li>
</ol>
<p>La partie du script qui effectue le dump de la base de données est importante, car le confort d'utilisation, et la taille du dépôt SVN en dépendent. Il convient notamment de faire bien attention à deux choses&nbsp;: chaque enregistrement dans la base doit avoir son propre <code>INSERT</code> dans le dump, et le fichier final ne doit pas contenir la date du dump.<br />
Les <code>INSERT</code> groupés sont à éviter car ils forment des lignes excessivement longues, et que pour un seul caractère modifié dans une de ces lignes, SVN conserverait la ligne complète. En ayant un seul enregistrement par ligne on s'assure que les différences entre deux versions sont aussi petites et lisibles que possible, ce qui permet aussi de ralentir la prise de poids du dépôt SVN.<br />
Si le fichier de dump contient sa propre date de création, on est alors sûr qu'il existera une différence entre le dump du jour et celui de la veille, même si rien ne change dans les données elles-même. Donc on aura un nouveau commit à chaque dump, sans savoir si il est vraiment significatif.<br />
Un troisième point facultatif mais intéressant est la possibilité d'ignorer les tables qui changent beaucoup et qui ne sont pas significatives vis-à-vis de votre application. Dans le script ci-dessus, j'ai décidé d'ignorer la table nommée "event_log" : <code>--ignore-table=${MA_DB}.event_log</code>. Pour moi elle n'est pas du tout intéressante, et ferait gonfler artificiellement mon dépôt SVN tout en le remplissant de révisions non significatives.<br />
À noter que ce script ne prend pas en charge la création du dépôt SVN, qui reste une tâche à la charge de l'administrateur. Il faut que le dépôt soit accessible localement (<code>file://</code>) par l'utilisateur qui lance le script de backup (ici root). D'autres combinaisons sont possibles, mais nécessitent des modifications assez importantes du script.</p>
<p>Une fois que tout cela fonctionne (via un automatisme comme cron, <a href="/blog/index.php/2008/01/03/131-passer-de-cron-a-launchd/">launchd</a>, ...) il est très simple de restaurer une version arbitraire de la base de données. Il est aussi très facile de voir en une ligne de commande l'ensemble des différences entre deux versions du dump : </p>
<pre>
$ svn diff -rPREV dump_glpi.sql
Index: dump_glpi.sql
===================================================================
--- dump_glpi.sql	(revision 1774)
+++ dump_glpi.sql	(working copy)
@@ -9135,7 +9135,7 @@
 LOCK TABLES `glpi_users` WRITE;
 /*!40000 ALTER TABLE `glpi_users` DISABLE KEYS */;
 INSERT INTO `glpi_users` VALUES (2,'glpi0',...,'2009-07-15 10:44:57',...);
-INSERT INTO `glpi_users` VALUES (6,'user1',...,'2009-11-16 15:41:46'...,);
+INSERT INTO `glpi_users` VALUES (6,'user1',...,'2009-12-08 08:06:09'...,);
 INSERT INTO `glpi_users` VALUES (7,'user2',...,'2009-12-02 17:25:44'...,);
 INSERT INTO `glpi_users` VALUES (8,'user3',...,'0000-00-00 00:00:00'...,);
 INSERT INTO `glpi_users` VALUES (9,'user4',...,'0000-00-00 00:00:00'...,);
</pre>
<p>On a aussi l'assurance que les backups prennent bien moins de place que si on avait du tous les conserver intégralement.<br />
Ainsi, j'ai une petite base de données (635 Ko), archivée dans subversion depuis juillet 2007 sous la forme de 443 révisions. Le poids total des révisions sur le serveur SVN est de 7,2 Mo, alors que le poids total d'une sauvegarde par jour pendant 900 jours représenterait environ 540 Mo. Même une excellente compression des dumps ne peut pas approcher le gain de place atteint par le stockage des modifications dans subversion.<br />
Sur le long terme, et si votre base de données varie peu relativement à sa taille, la solution de l'archivage sous forme de révisions dans subversion est peut être la meilleure option. En tout cas, elle mérite qu'on s'y intéresse !</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2010/01/11/1347-sauvegarde-de-bases-mysql-via-svn/' addthis:title='Sauvegarde de bases MySQL via SVN '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2010/01/11/1347-sauvegarde-de-bases-mysql-via-svn/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sauvegarder des bases MySQL</title>
		<link>http://www.patpro.net/blog/index.php/2008/05/16/148-sauvegarder-des-bases-mysql/</link>
		<comments>http://www.patpro.net/blog/index.php/2008/05/16/148-sauvegarder-des-bases-mysql/#comments</comments>
		<pubDate>Fri, 16 May 2008 09:31:35 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">https://www.patpro.net/wp/index.php/2008/05/16/148-sauvegarder-des-bases-mysql/</guid>
		<description><![CDATA[Dans de précédents articles j'ai répondu brièvement aux questions de l'installation de MySQL 5 sur Mac OS X 10.5 et de la création d'un plist de démarrage launchd pour MySQL. J'ai aussi donné quelques ficelles pour trouver les points de blocage habituels au fonctionnement de MySQL. Il me reste donc à aborder le problème des [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2008/05/16/148-sauvegarder-des-bases-mysql/' addthis:title='Sauvegarder des bases MySQL '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Dans de précédents articles j'ai répondu brièvement aux questions de <a hreflang="fr" href="/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes">l'installation de MySQL 5 sur Mac OS X 10.5</a> et de <a hreflang="fr" href="/blog/index.php/2008/02/14/139-mysql-5-le-plist-de-demarrage">la création d'un plist de démarrage launchd pour MySQL</a>. J'ai aussi donné quelques ficelles pour trouver <a hreflang="fr" href="/blog/index.php/2008/02/15/140-mysql-5-le-checklist-en-cas-de-pepin">les points de blocage habituels au fonctionnement de MySQL</a>.<br />
Il me reste donc à aborder le problème des sauvegardes. Cet article s'adresse uniquement aux utilisateurs d'un serveur MySQL qui sont root/admin de leur serveur, si vous avez un serveur MySQL chez un hébergeur, alors vous pouvez passer votre chemin.</p>
<p>Le script que je propose ci-dessous doit être lancé en root, une fois par jour. Il fait une sauvegarde de chaque base de données qu'il trouve, et il conserve cette sauvegarde pendant 7 jours. En cas de pépin, il vous est donc possible de restaurer une ou plusieurs bases de données, en remontant de maximum 7 jours dans le passé.<br />
Vous devez adapter absolument les lignes 2 à 5 pour indiquer les chemins suivants :</p>
<ul>
<li><code>mysqlroot</code> : chemin du dossier contenant les bases de données sur le serveur</li>
<li><code>monbkp</code> : chemin du dossier contenant les sauvegardes des bases sur le serveur</li>
<li><code>hotcopy</code> : chemin de l'exécutable mysqlhotcopy sur le serveur</li>
<li><code>mydump</code> : chemin de l'exécutable mysqldump sur le serveur</li>
</ul>
<p>Vous devez aussi remplacer <code>LE_PASS_MYSQL</code> par le mot de passe de root de MySQL. Attention, il n'y a pas d'espace entre <code>-p</code> et <code> LE_PASS_MYSQL</code> pour la commande mysqldump, mais il y a bien un espace entre le <code>-p</code> et <code> LE_PASS_MYSQL</code> pour la commande mysqlhotcopy.</p>
<p>Le script supporte un argument ("dump"). Si il est lancé avec cet argument, alors il utilisera <code>mysqldump</code> pour faire la sauvegarde. Vous obtenez alors un dump de chaque base, c'est à dire un fichier texte "plat" contenant les instructions SQL nécessaires à la reconstruction de la base de données. C'est la méthode que je recommande car le fichier obtenu peut être injecté dans presque n'importe quel serveur MySQL. Par ailleurs, le fichier obtenu est plus petit et plus facile à compresser.<br />
Si le script est lancé sans l'argument "dump", alors la méthode de sauvegarde utilisée est <code>mysqlhotcopy</code>. Ce programme duplique physiquement le répertoire de chaque base de données. L'avantage c'est que la sauvegarde est prête à l'emploi, il n'est pas nécessaire de la ré-injecter dans le serveur. L'inconvénient, c'est qu'il vous sera probablement impossible d'utiliser cette sauvegarde sur un autre serveur que le votre, et dans la même version de MySQL. Si vous souhaitez archiver vos sauvegardes de bases de données et pouvoir les restaurer quelques mois ou années plus tard, il ne faut pas utiliser <code>mysqlhotcopy</code>.</p>
<p>Déroulement du script :</p>
<ol>
<li>création d'un dossier temporaire /tmp/mysql</li>
<li>pour chaque base de données, création d'un dump ou d'une "hotcopy"</li>
<li>archivage et compression de chaque dump/hotcopy (en .tgz)</li>
<li>suppression de la version non-compressée</li>
<li>déplacement de la version compressée vers le dossier de sauvegarde</li>
<li>suppression du dossier temporaire /tmp/mysql</li>
</ol>
<pre>#!/bin/sh
mysqlroot=/var/db/mysql
monbkp=/backup/MYSQL
hotcopy=/usr/local/bin/mysqlhotcopy
mydump=/usr/local/bin/mysqldump

madate=`date "+%Y-%m-%d"`
monjour=`date "+%w"`

echo "lancement du backup des bases de donnees MySQL..."
echo

mkdir -m 0777 /tmp/mysql

cd $mysqlroot
for directory in *
do
if [ $directory != "" ]; then
if [ -d "$mysqlroot/$directory" ]; then
  echo -n "backup de $directory : "
  case $* in
    dump)
    $mydump -u root -pLE_PASS_MYSQL --opt $directory > "/tmp/mysql/$directory"
    ;;
    *)
    $hotcopy -u root -p LE_PASS_MYSQL -q "$directory" /tmp/mysql
    ;;
  esac
  if [ $? = 0 ]; then
    tar -czf "$monbkp/$madate$directory.tgz" -C /tmp/mysql/ "$directory"
    if [ $? = 0 ]; then
      rm -f "$monbkp/$directory.${monjour}.tgz"
      rm -r "/tmp/mysql/$directory"
      mv "$monbkp/$madate$directory.tgz" "$monbkp/$directory.${monjour}.tgz"
      echo "ok"
    else
      echo "Erreur targz".
    fi
  else
    echo "Erreur export".
  fi
fi
fi
done

rm -fR /tmp/mysql/
</pre>
<p> </p>
<p>Pour lancer ce script toutes les nuits, j'utilise une crontab (car mon mysqld est installé sur un serveur FreeBSD). Le script est enregistré dans <code>/usr/local/bin/</code> sous le nom <code>BKP_SQL.sh</code>. Voilà la ligne en question :</p>
<pre>30 5 * * * /usr/local/bin/BKP_SQL.sh</pre>
<p>Et si je souhaite faire des dumps plutôt que des "hotcopy" :</p>
<pre>30 5 * * * /usr/local/bin/BKP_SQL.sh dump</pre>
<p> <br />
Note : ce script n'est pas du tout une référence de fiabilité et encore moins d'élégance, néanmoins, je l'ai créé en 2003 et depuis il tourne tous les jours. Je n'ai jamais eu de problème avec.</p>
<p>Note 2 : selon le système, votre environnement, ... il vous faudra peut être indiquer le chemin complet pour l'application tar.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2008/05/16/148-sauvegarder-des-bases-mysql/' addthis:title='Sauvegarder des bases MySQL '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2008/05/16/148-sauvegarder-des-bases-mysql/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>MySQL 5 : le checklist en cas de pépin</title>
		<link>http://www.patpro.net/blog/index.php/2008/02/15/140-mysql-5-le-checklist-en-cas-de-pepin/</link>
		<comments>http://www.patpro.net/blog/index.php/2008/02/15/140-mysql-5-le-checklist-en-cas-de-pepin/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 16:24:35 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">https://www.patpro.net/wp/index.php/2008/02/15/140-mysql-5-le-checklist-en-cas-de-pepin/</guid>
		<description><![CDATA[Comme les commentaires le montrent, si l'installation de MySQL peut prendre 5 minutes et se dérouler comme un charme, le moindre problème peut vite bloquer le débutant pendant des jours. Et plus le débutant se débat, plus il fait des dégâts sur son système. Je vous propose donc ici une petite checklist des choses à [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2008/02/15/140-mysql-5-le-checklist-en-cas-de-pepin/' addthis:title='MySQL 5 : le checklist en cas de pépin '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Comme les <a hreflang="fr" href="/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes#c211">commentaires le montrent</a>, si l'installation de MySQL peut prendre 5 minutes et se dérouler comme un charme, le moindre problème peut vite bloquer le débutant pendant des jours. Et plus le débutant se débat, plus il fait des dégâts sur son système.<br />
Je vous propose donc ici une petite checklist des choses à vérifier si votre installation de MySQL sur Mac OS X tourne mal.</p>
<p><strong>1)</strong> Si vous avez installé une ou plusieurs autres versions de MySQL et que vous souhaitez repartir de zéro, le plus simple est de localiser tous les éléments liés à MySQL et de les supprimer. On utilise pour cela la base locate, qu'il convient de mettre à jour au préalable :</p>
<pre>sudo /usr/libexec/<a hreflang="en" href="x-man-page://8/locate.updatedb">locate.updatedb</a>
<a hreflang="en" href="x-man-page://1/locate">locate</a> -i mysql</pre>
<p>ensuite faites le tri dans ce que vous voyez, et supprimez les éléments appartenant aux anciennes installation de MySQL (sans doute dans <code>/usr/local/</code>, <code>/Library/LaunchDaemon/</code>, <code>/Library/StartupItems/</code>, ...)</p>
<p><strong>2)</strong> Vérifiez votre <code>PATH</code> : les binaires de MySQL doivent se trouver dans votre <code>PATH</code> pour être exécutables sans indiquer leur chemin complet. Si la commande <code><a hreflang="en" href="x-man-page://1/which">which</a> mysql</code> ne renvoie rien, ajoutez <code>/usr/local/mysql/bin/</code> à votre <code>PATH</code>.</p>
<p><strong>3)</strong> Vérifiez que le serveur <code>mysqld</code> est lancé (<code><a hreflang="en" href="x-man-page://1/ps">ps</a> auxwww | <a hreflang="en" href="x-man-page://1/grep">grep</a> mysqld</code>) ou se lance bien (<code>sudo /usr/local/mysql/bin/mysqld_safe</code>).</p>
<p><strong>4)</strong> Vérifiez que le socket du serveur existe quand il est lancé :</p>
<pre><a hreflang="en" href="x-man-page://1/netstat">netstat</a> -f unix | grep mysql
ls -l /tmp/mysql.sock</pre>
<p>Si l'une de ces deux commandes ne retourne pas le chemin du socket, alors soit le socket est ouvert par le serveur mais supprimé par un autre process, soit le socket n'est pas ouvert par le serveur car il existe déjà.</p>
<p><strong>5)</strong> Vérifiez que vous essayez bien d'accéder au serveur MySQL à partir d'un logiciel qui saura s'y connecter (php doit connaître le chemin du socket, le client mysql aussi). Si vous tentez une connexion réseau, vérifier aussi que mysqld ouvre un port réseau (<code>netstat -alnf inet | grep 3306</code>).</p>
<p><strong>6)</strong> Jetez un œil aux fichiers de log de MySQL. Si le serveur ne se lance pas du tout, cela ne vous aidera probablement pas, mais si il se lance et quitte inopinément, ou si il se lance dans un état inutilisable, vous trouverez probablement des informations intéressantes dans ces fichiers. Pour l'installation de MySQL via le package officiel, les fichiers de log se trouvent normalement dans <code>/usr/local/mysql/data/</code>, sous le nom de <code>localhost.err</code> ou de <code>votre-machine.err</code>.</p>
<p>Je compléterai cette liste au fil du temps... N'hésitez pas à faire des suggestions !</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2008/02/15/140-mysql-5-le-checklist-en-cas-de-pepin/' addthis:title='MySQL 5 : le checklist en cas de pépin '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2008/02/15/140-mysql-5-le-checklist-en-cas-de-pepin/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>MySQL 5 : le plist de démarrage</title>
		<link>http://www.patpro.net/blog/index.php/2008/02/14/139-mysql-5-le-plist-de-demarrage/</link>
		<comments>http://www.patpro.net/blog/index.php/2008/02/14/139-mysql-5-le-plist-de-demarrage/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 16:49:38 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">https://www.patpro.net/wp/index.php/2008/02/14/139-mysql-5-le-plist-de-demarrage/</guid>
		<description><![CDATA[Dans un précédent article j'ai exposé l'installation triviale d'un MySQL 5 sur une base de Mac OS X 10.5 propre. J'ai aussi mentionné le StartupItem fourni de base avec le package MySQL. Ce StartupItem étant conçu pour Mac OS X 10.4, il est intéressant de voir comment on doit maintenant lancer un serveur MySQL sur [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2008/02/14/139-mysql-5-le-plist-de-demarrage/' addthis:title='MySQL 5 : le plist de démarrage '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Dans <a hreflang="fr" href="/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes">un précédent article</a> j'ai exposé l'installation triviale d'un MySQL 5 sur une base de Mac OS X 10.5 propre. J'ai aussi mentionné le StartupItem fourni de base avec le package MySQL. Ce StartupItem étant conçu pour Mac OS X 10.4, il est intéressant de voir comment on doit maintenant lancer un serveur MySQL sur Leopard.</p>
<p>Si vous aviez installé le script de démarrage de MySQL 5 mentionné dans le précédent article, il faudra le désactiver ou le supprimer. Pour le supprimer, vous pouvez exécuter les commandes suivantes dans le terminal :</p>
<pre>sudo /Library/StartupItems/MySQLCOM/MySQLCOM stop
sudo rm -r /Library/StartupItems/MySQLCOM
sudo rm /tmp/mysql.sock</pre>
<p>Ensuite, vous pouvez créer le fichier <code>/Library/LaunchDaemons/org.mysql.mysqld.plist</code> avec votre éditeur favori, et coller dedans :</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
&lt;plist version="1.0"&gt;
&lt;dict&gt;
	&lt;key&gt;Label&lt;/key&gt;
	&lt;string&gt;org.mysql.mysqld&lt;/string&gt;
	&lt;key&gt;OnDemand&lt;/key&gt;
	&lt;false/&gt;
	&lt;key&gt;ProgramArguments&lt;/key&gt;
	&lt;array&gt;
		&lt;string&gt;/usr/local/mysql/bin/mysqld&lt;/string&gt;
		&lt;string&gt;--socket=/tmp/mysql.sock&lt;/string&gt;
		&lt;string&gt;--user=mysql&lt;/string&gt;
		&lt;string&gt;--port=3306&lt;/string&gt;
		&lt;string&gt;--datadir=/usr/local/mysql/data&lt;/string&gt;
		&lt;string&gt;--pid-file=/usr/local/mysql/data/localhost.pid&lt;/string&gt;
		&lt;string&gt;--bind-address=127.0.0.1&lt;/string&gt;
	&lt;/array&gt;
	&lt;key&gt;ServiceIPC&lt;/key&gt;
	&lt;false/&gt;
&lt;/dict&gt;
&lt;/plist&gt;</pre>
<p>Une fois que ce fichier est sauvé, il faut s'assurer qu'il appartient bien à root, sinon launchctl vous envoie sur les roses (cf. les commentaires de Pierre29). Dans le doute, exécutez la commande</p>
<pre>sudo chown root /Library/LaunchDaemons/org.mysql.mysqld.plist</pre>
<p>Vous pouvez ensuite activer ce plist par la commande</p>
<pre>sudo launchctl load /Library/LaunchDaemons/org.mysql.mysqld.plist</pre>
<p>MySQL devrait être alors lancé automatiquement pour vous. Il placera son socket dans <code>/tmp/</code> et autorisera aussi les connexions TCP sur l'interface <code>127.0.0.1</code>.</p>
<p>Je vous renvoie à la documentation de <a hreflang="en" href="x-man-page://1/launchctl">launchctl</a> pour le reste des options et commandes disponibles et pour les détails sur l'utilisation de launchd. Votre serveur MySQL est désormais géré proprement par launchd, exactement comme sur un Mac OS X Serveur.</p>
<p><strong>edit</strong> : ajout du chown root sur le fichier</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2008/02/14/139-mysql-5-le-plist-de-demarrage/' addthis:title='MySQL 5 : le plist de démarrage '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2008/02/14/139-mysql-5-le-plist-de-demarrage/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MySQL 5 sur Mac OS X 10.5 en 5 minutes</title>
		<link>http://www.patpro.net/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes/</link>
		<comments>http://www.patpro.net/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 13:37:12 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">https://www.patpro.net/wp/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes/</guid>
		<description><![CDATA[Ça arrive toujours par vague, il suffit de suivre un peu des newsgroups comme fr.comp.mac-os.x pour s'en apercevoir. Un type un peu désespéré se pointe avec plein de questions sur comment installer MySQL sur son nouvel OS, puis c'est s'escalade, la surenchère à qui proposera la solution la plus compliquée ou l'idée la plus saugrenue. [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes/' addthis:title='MySQL 5 sur Mac OS X 10.5 en 5 minutes '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>Ça arrive toujours par vague, il suffit de suivre un peu des newsgroups comme fr.comp.mac-os.x pour s'en apercevoir. Un type un peu désespéré se pointe avec plein de questions sur comment installer MySQL sur son nouvel OS, puis c'est s'escalade, la surenchère à qui proposera la solution la plus compliquée ou l'idée la plus saugrenue. Bien sûr au départ c'est toujours la faute du système, ou celle de MySQL. C'est rarement celle de tous ces tutoriels ou de ces conseils mal avisés glanés sur les forums les plus inattendus. Et non, bien sûr ce n'est jamais la faute du pauvre bougre qui va copier-coller dans son terminal, sans les comprendre, les commandes dictées par des inconnus.<br />
Pourtant, installer un MySQL 5 sur Mac OS X est d'une simplicité enfantine. C'est comme à l'école des fans : même les moins doués gagnent à la fin. Je ne vais pas détailler toutes les contortions cérébrales qu'il faut faire pour rater cette installation, on trouve suffisamment d'exemples sur les forums, et ce ne serait pas chic de ma part de moquer la paresse intellectuelle de certains.</p>
<p>La première étape pour une installation réussie, c'est de télécharger le package officiel fourni par MySQL. Ne cédez pas à la tentation de compiler vous même MySQL, si vous avez besoin d'aide pour installer un pkg, faites preuve de bon sens et oubliez immédiatement la compilation. On trouve le précieux paquet dans <a hreflang="en" href="http://dev.mysql.com/downloads/">la zone "Developer" du site mysql.com</a>. Cliquez sur "MySQL Community Server" dans la marge de gauche, et dans la nouvelle page qui se charge, trouvez le lien intitulé "Mac OS X (package format)". Je ne donne pas les liens directs, car ils sont susceptibles de changer au fil des versions de MySQL.<br />
Vous voilà en face d'une liste de packages pour Mac OS X : <ins>Mac OS X (package format) downloads</ins>. Choisissez celui qui correspond le plus à votre version du système. Actuellement pour un G5 en Mac OS X 10.4 ou 10.5  ce sera "Mac OS X 10.4 (PowerPC, 64-bit)" par exemple.</p>
<p>Une fois l'image disque téléchargée et montée vous voici en face de deux packages, d'un "PrefPane", et d'un readme :</p>
<ul>
<li>mysql-5.0.45-osx10.4-powerpc-64bit.pkg (dans mon cas)</li>
<li>MySQLStartupItem.pkg</li>
<li>MySQL.prefPane</li>
<li>ReadMe.txt</li>
</ul>
<p>Le premier package installe tout MySQL sur votre machine. Le second installe un StartupItem à l'ancienne (comprendre : pré-launchd). Pour un lanceur à la mode de launchd : moderne et qui marche bien, <a hreflang="fr" href="/blog/index.php/2008/02/14/139-mysql-5-le-plist-de-demarrage">voyez cet article</a>. Le PrefPane permet d'installer un tableau de bord MySQL dans les préférences système.<br />
Muni d'un log/pass d'administrateur vous pouvez maintenant installer les packages par simple double-click. Jusque là, pas besoin de comprendre la théorie de la relativité. Si vous avez su taper votre mot de passe, vous avez maintenant installé MySQL.<br />
De la même manière, double-cliquez sur le PrefPane pour l'installer. Vous pouvez l'installer pour vous uniquement, ou pour tous les utilisateurs de la machine. C'est sans incidence sur le résultat, faites comme vous préférez. Ce tableau de bord est de toute manière partiellement non-fonctionnel sous Leopard (je ne l'ai pas testé sous Tiger). Il ne permet pas de lancer ou d'arrêter MySQL via le bouton de son interface. Par contre, il permet d'activer ou non le lancement automatique du serveur MySQL au démarrage de la machine.<br />
À partir de là, votre serveur MySQL est complètement fonctionnel. Si vous avez opté pour un lancement automatique au démarrage, vous pouvez maintenant rebooter pour vérifier que cela fonctionne, tout en vous félicitant d'avoir installé MySQL 5 en moins de 5 minutes, sans taper une seule ligne de commande dans votre terminal. Si vous souhaitez lancer le serveur sans redémarrer et que, comme dans mon cas, le bouton ad hoc du tableau de bord de fonctionne pas, vous pouvez le faire via le terminal :</p>
<ul>
<li>cochez la case pour lancer MySQL automatiquement au démarrage (cela édite pour vous un fichier de configuration qui autorise aussi le lancement manuel)</li>
<li>tapez dans une fenêtre de terminal la commande<br />
<code>sudo /Library/StartupItems/MySQLCOM/MySQLCOM start</code></li>
</ul>
<p>Normalement, le tableau de bord doit maintenant refléter l'état du serveur, et indiquer que le serveur est fonctionnel. Si ce n'est pas le cas, c'est que vous êtes parvenu à rater une des étapes précédentes.</p>
<p>Désormais, il est judicieux de tester la connexion au serveur. Ouvrez une fenêtre de terminal, et taper la commande suivante :</p>
<pre>/usr/local/mysql/bin/mysql -u root</pre>
<p>Cela doit vous donner le résultat suivant :</p>
<pre>Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 200
Server version: 5.0.45 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql&gt; </pre>
<p>Vous êtes alors connecté à votre serveur mysql local. Il est important de noter que les packages officiels de MySQL sont compilés pour stocker le socket de connexion dans <code>/tmp/mysql.sock</code>, et non pas dans <code>/var/mysql/mysql.sock</code>. Le PHP fourni par Apple quant à lui, attend ce socket dans <code>/var/mysql/mysql.sock</code>. Si vous souhaitez faire fonctionner des scripts PHP, vous devrez indiquer à ce dernier le chemin réel de votre socket MySQL. On fait cela en éditant le fichier <code>/private/etc/php.ini</code>. Ouvrez ce fichier (probablement inexistant) avec votre éditeur de texte favori, et insérez la ligne <code>mysql.default_socket = /tmp/mysql.sock</code>. Maintenant, PHP doit trouver tout seul le socket de MySQL. C'est facile à vérifier dans le terminal :</p>
<pre>php -r 'mysql_connect(localhost, root, ""); echo mysql_result(mysql_query("SELECT 2+2;"),0)." ";'</pre>
<p>Si tout fonctionne, le résultat affiché sera "4". Si cela ne fonctionne pas, c'est probablement que vous êtes incapable d'utiliser MySQL de toute manière :).</p>
<p><strong>edit</strong> : en cas de pépin, faites un tour vers la <a hreflang="fr" href="/blog/index.php/2008/02/15/140-mysql-5-le-checklist-en-cas-de-pepin">checklist</a>.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes/' addthis:title='MySQL 5 sur Mac OS X 10.5 en 5 minutes '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Sun T2000 contre Apple Mac Pro, contre Linux, fin des tests</title>
		<link>http://www.patpro.net/blog/index.php/2006/11/15/66-sun-t2000-contre-apple-mac-pro-contre-linux-fin-des-tests/</link>
		<comments>http://www.patpro.net/blog/index.php/2006/11/15/66-sun-t2000-contre-apple-mac-pro-contre-linux-fin-des-tests/#comments</comments>
		<pubDate>Wed, 15 Nov 2006 10:13:27 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">https://www.patpro.net/wp/index.php/2006/11/15/66-sun-t2000-contre-apple-mac-pro-contre-linux-fin-des-tests/</guid>
		<description><![CDATA[J'ai fini par boucler mes modestes tests de charge MySQL 4.x sur la Sun T2000, le Mac Pro d'Apple, et un serveur Supermicro 6015P-TR sous linux. Comme je n'ai utilisé que super-smack à cause de fortes contraintes temporelles (entre autre), les résultats ne sont pas forcément généralisables, ni applicables à toutes les architectures. Néanmoins j'ai obtenu quelques résultats intéressants.<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2006/11/15/66-sun-t2000-contre-apple-mac-pro-contre-linux-fin-des-tests/' addthis:title='Sun T2000 contre Apple Mac Pro, contre Linux, fin des tests '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>J'ai fini par boucler mes modestes tests de charge MySQL 4.x sur la Sun T2000, le Mac Pro d'Apple, et un serveur Supermicro 6015P-TR sous linux. Comme je n'ai utilisé que super-smack à cause de fortes contraintes temporelles (entre autre), les résultats ne sont pas forcément généralisables, ni applicables à toutes les architectures. Néanmoins j'ai obtenu quelques résultats intéressants.<br />
<span id="more-66"></span></p>
<h4>Machines Utilisées</h4>
<p>Pour ces benchmarks, j'ai utilisé 3 machines différentes : un serveur <a hreflang="en" href="https://www.sun.com/servers/coolthreads/t2000/">Sun T2000</a>, un <a hreflang="en" href="http://www.apple.com/macpro/">Apple Mac Pro</a>, et un <a hreflang="en" href="http://supermicro.com/products/system/1U/6015/SYS-6015P-TR.cfm">Supermicro 6015P-TR</a>. Les caractéristiques matérielles et logicielles sont les suivantes :<br />
<strong>Sun T2000</strong> : 1 processeur T1 à 1.0 GHz, 8 cores physiques, 4 threads par core, donc 32 processeurs virtuels au total.<br />
8 Go de RAM, 2 disque durs SAS, réseau gigabit switché, Solaris 10 64 bits, et MySQL 4.0.24 installé par Sun.<br />
<strong>Apple Mac Pro</strong> : 2 processeurs Xeon Woodcrest 2,66 GHz, 2 cores par processeur, donc 4 processeurs physiques.<br />
7 Go de RAM, 4 disques durs SATA (un seul utilisé), réseau gigabit switché, MacOS X Serveur 10.4.8 64 bits, et MySQL 4.1 64 bits fourni avec le système. Cette machine est un substitut de XServe Intel, car ces derniers n'étaient pas disponibles au moment des tests.<br />
<strong>Supermicro 6015P-TR</strong> : 2 processeurs Xeon Woodcrest 3.0 GHz, 2 cores par processeur, donc 4 processeurs physiques.<br />
8 Go de RAM, 4 disques durs SATA Raptor (un seul utilisé), réseau gigabit switché, Linux Debian AMD64 "testing" 64 bits, MySQL 4.1.21-standard-log 64 bits, téléchargé sur mysql.com (mysql-standard-4.1.21-unknown-linux-gnu-x86_64-glibc23).</p>
<h4>Configuration</h4>
<p>Toutes les installations de MySQL sont faites avec des versions "vendeur", soit les installations système par défaut, soit les binaires officiels de mysql.com. Plusieurs configurations différentes ont été testées côté serveur. Pendant tous les tests, le format de base par défaut a été réglé sur innodb :</p>
<pre>default_table_type = INNODB</pre>
<p>Le serveur doit autoriser la connexion locale et la connexion réseau :</p>
<pre>port = 3306
socket = /tmp/mysql.sock</pre>
<p>Les variables modifiées au cours des différents tests sont :</p>
<pre>back_log = 100
thread_cache = 150
thread_concurrency = 32</pre>
<p>Trois groupes de configurations ont été basés sur des variations de ces paramètres : small (20/50/8), big (20,150,16), et bigger (100/150/32). La base de la configuration pour les autres paramètres est constante d'un test à l'autre et repose sur un fichier d'exemple de mysql modifié (my-innodb-heavy-4G.cnf). Tous les tests ont donné des résultats identiques pour les configurations small, big et bigger, donc dans le reste de ce document on ne se souciera plus de la configuration MySQL, les trois étant équivalentes vis à vis du logiciel de benchmark.<br />
Du fait que le MySQL fourni avec Solaris est en version 4.0.x, nous avons du ajouter à la configuration des MySQL 4.1.x  de Mac OS X Serveur et de Linux la directive permettant d'utiliser une implémentation des mots de passe "compatible 4.0" :</p>
<pre>old-passwords</pre>
</p>
<h4>Mise en place des tests</h4>
<p>Par manque de temps, et de connaissances spécifiques à Solaris, j'ai réduit le nombre des logiciels de test à un. Le choix s'est porté sur un outils relativement basique mais largement employé par ailleurs : super-smack 1.3.<br />
Ce logiciel utilise deux fichiers de configuration pour deux tests différents. Le premier test est un SELECT pur. Le second test fait un SELECT, puis un UPDATE. J'ai gardé les fichiers de configuration dans leur état d'origine sauf pour les données relatives aux adresses de serveur, et aux mots de passe de connexion. Le test "select" est lancé avec un nombre de clients variant de 1 à 80, et produit 10000 "select" par itération :</p>
<pre>i=0
while [ $i -lt 80 ]
do
    i=$((i+1))
    super-smack sql_select-key.smack $i 10000 >> select-key_${i}.out
done </pre>
<p>Le test "select-update" est lancé avec un nombre de clients variant de 1 à 80, et produit 1000 "select" et 1000 "update" par itération :</p>
<pre>j=0
while [ $j -lt 80 ]
do
    j=$((j+1))
    super-smack sql_update-select.smack $j 1000 >> update-select_${j}.out
done </pre>
<p>Ces deux batteries de tests sont lancées 5 fois de suite, et on calcule une moyenne de chaque résultat sur ces 5 mesures.<br />
Il est intéressant de noter que super-smack produit non pas des "threads" clients mais bel et bien des processus. Donc quand super-smack arrive à 80 clients, ce sont 80 processus super-smack qui attaquent le serveur MySQL.</p>
<h4>Résultats</h4>
<p><a id="graph1" href="graph1"></a></p>
<p><a onclick="window.open('/images/blog/benchmysql/smack-select-all.png','image','width=804,height=604,scrollbars=0')" href="#graph1">Ce premier graphique</a> donne les résultats du test "select" pour différents couples client-serveur.</p>
<p><ins>client et serveur linux, même machine</ins> : le client super-smack et le serveur MySQL tournent sur la même machine, les connexions se font par le socket unix. C'est le cas idéal d'après les chiffres obtenus. Le pic de performance est atteint pour 4 processus clients, ensuite, les performances décroissent lentement tout en restant au dessus de 52000 selects/seconde face à 80 clients. Cela montre la très bonne gestion des threads et des processus multiples par linux.</p>
<p><ins>client et serveur Mac OS X, même machine</ins> : c'est le pire cas testé. Le pic de performance est à 2 processus clients, ce qui laisse 2 processeurs pour le serveur MySQL. Par rapport à la machine Supermicro, la puissance brut des processeurs est inférieure de seulement 12%, alors que les performances sont globalement 5 fois moins bonnes. Cela montre l'énorme retard de Mac OS X en terme de gestion de threads et de processus multiples face à des systèmes comme linux et Solaris.</p>
<p><ins>client et serveur sun, même machine</ins> : c'est un cas intermédiaire. Le pic de performance est atteint autour de 12 clients, puis le nombre de requêtes par seconde reste stable jusqu'à 80 clients concurrents. client sun et serveur Mac OS X : avec un peu moins de 35K requêtes par secondes, ce couple donne des résultats 3 fois meilleurs que quand le client et le serveur sont sur le même Mac OS X.</p>
<p><ins>client sun et serveur linux</ins> : c'est à peu près 12% de mieux que le couple sun-mac, ce qui correspond à la différence de puissance brute entre le serveur Supermicro et le serveur Apple.</p>
<p><ins>client linux et serveur sun</ins> : c'est un résultat atypique, car il est presque identique au résultat obtenu avec le client et le serveur sur la machine sun. La similitude de ces résultats pourrait montrer à la fois la très grande qualité de multi-tasking et multithreading du couple Solaris 10 / processeur T1, ainsi que la limite imposée par la relative faible performance brute du processeurs T1 (1 GHz).</p>
<p><a id="graph2" href="graph2"></a></p>
<p><a onclick="window.open('/images/blog/benchmysql/smack-update-select-all.png','image','width=804,height=604,scrollbars=0')" href="#graph2">Ce second graphique</a> est un peu plus chaotique. Il présente les résultats du test "select-update" pour les mêmes couples de clients et serveurs.</p>
<p><ins>client et serveur linux, même machine</ins> : comme pour le test précédent, le départ est très bon. Par la suite de fortes oscillations se produisent avec une stabilisation progressive vers une moyenne à plus de 10K select+update/secondes. La courbe en dents de scie est peut être attribuable à la gestion des écritures sur le disques. C'est encore cette fois la combinaison qui donne les meilleurs résultats, à égalité avec le couple <ins>client sun et serveur linux</ins>.</p>
<p><ins>client et serveur Mac OS X, même machine</ins> : ce n'est plus tout à fait une catastrophe. Cette combinaison fait 2 fois moins bien que le linux sur lui même, pour 12% de puissance brute en moins.</p>
<p><ins>client et serveur sun, même machine</ins> et <ins>client linux et serveur sun</ins> : ce sont les deux cas les moins favorables, mais le système de fichier n'a pas été du tout optimisé, donc c'est un facteur pénalisant potentiel pour les écritures. client sun et serveur Mac OS X : un peu moins des deux tiers du score obtenu par la combinaison client-serveur linux. L'écart avec la combinaison client-serveur mac est relativement faible.</p>
<h4>Conclusion avec jolis graphiques pour décideur pressé</h4>
<p><img class="alignright" src="/images/blog/benchmysql/select-p-seconde-remote.001.jpg" alt="select par seconde, tcp" />La combinaison idéale pour un serveur MySQL dédié est donc sans doute un Mac OS X Server sur XServe Intel, à condition que la base de données soit utilisée à majorité en lecture. Il a pour lui la facilité d'administration, et de bonnes performances (<em>ci-contre, nombre de SELECT par seconde pour chaque machine soumise à 4, 40 et 80 clients concurrents connectés par TCP</em>).</p>
<p><img class="alignleft" src="/images/blog/benchmysql/select-update-p-seconde-remote.001.jpg" alt="select+update par seconde, tcp" />Si les performances d'écriture sont importantes pour l'application, le Supermicro sous linux est le meilleur choix, bien que le XServe Intel doivent être testé pour évaluer l'impact du SAS sur les performances d'écriture (<em>ci-contre, nombre de SELECT+UPDATE par seconde pour chaque machine soumise à 4, 40 et 80 clients concurrents connectés par TCP</em>).</p>
<p>La Sun T2000 aurait mérité un professionnel de Solaris pour un réglage fin du réseau et du système de fichier. Néanmoins, la stabilité des performances est excellente. C'est une bonne machine pour des requêtes demandant peu de puissance de calcul et devant gérer une forte concurrence de connections.</p>
<p><img class="alignright" src="/images/blog/benchmysql/select-p-seconde.001.jpg" alt="select par seconde, socket unix" />Pour une machine "tout en un", type serveur LAMP, linux sur Xeon Woodcrest offre les meilleurs performances, incontestablement. Cette solution n'a pas néanmoins la robustesse d'une offre intégrée telle que la Sun T2000 avec Solaris 10, et elle nécessite un peu de bricolage pour être opérationnelle. Elle est par contre moins coûteuse que la T2000, mais consomme sensiblement plus de puissance électrique (<em>ci-contre, nombre de SELECT par seconde pour chaque machine soumise à 4, 40 et 80 clients concurrents connectés par socket Unix</em>).</p>
<p><em>édit. ortho et mise en page</em></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2006/11/15/66-sun-t2000-contre-apple-mac-pro-contre-linux-fin-des-tests/' addthis:title='Sun T2000 contre Apple Mac Pro, contre Linux, fin des tests '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2006/11/15/66-sun-t2000-contre-apple-mac-pro-contre-linux-fin-des-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Il y a des benchmarks MySQL qui tournent à la violence pure</title>
		<link>http://www.patpro.net/blog/index.php/2006/10/20/60-il-y-a-des-benchmarks-mysql-qui-tournent-a-la-violence-pure/</link>
		<comments>http://www.patpro.net/blog/index.php/2006/10/20/60-il-y-a-des-benchmarks-mysql-qui-tournent-a-la-violence-pure/#comments</comments>
		<pubDate>Fri, 20 Oct 2006 09:01:59 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">https://www.patpro.net/wp/index.php/2006/10/20/60-il-y-a-des-benchmarks-mysql-qui-tournent-a-la-violence-pure/</guid>
		<description><![CDATA[Joli aileron de requin, cela dit.<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2006/10/20/60-il-y-a-des-benchmarks-mysql-qui-tournent-a-la-violence-pure/' addthis:title='Il y a des benchmarks MySQL qui tournent à la violence pure '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p><img src="/images/blog/cpu_load_mysql.png" alt="" /><br />
Joli aileron de requin, cela dit.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2006/10/20/60-il-y-a-des-benchmarks-mysql-qui-tournent-a-la-violence-pure/' addthis:title='Il y a des benchmarks MySQL qui tournent à la violence pure '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2006/10/20/60-il-y-a-des-benchmarks-mysql-qui-tournent-a-la-violence-pure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SUN T2000 contre Apple Mac Pro ?</title>
		<link>http://www.patpro.net/blog/index.php/2006/10/09/58-sun-t2000-contre-apple-mac-pro/</link>
		<comments>http://www.patpro.net/blog/index.php/2006/10/09/58-sun-t2000-contre-apple-mac-pro/#comments</comments>
		<pubDate>Mon, 09 Oct 2006 15:56:53 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">https://www.patpro.net/wp/index.php/2006/10/09/58-sun-t2000-contre-apple-mac-pro/</guid>
		<description><![CDATA[La T2000 revient pour une nouvelle série de tests préliminaires, cette fois contre un Mac Pro, gracieusement prêté par Apple. Je rappelle sommairement les caractéristiques de la machine Sun : 1 processeur physique à 1 GHz, avec 8 cores capables d'exécuter chacun 4 threads, 8 Go de RAM, des disques SAS. Le Mac Pro est [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2006/10/09/58-sun-t2000-contre-apple-mac-pro/' addthis:title='SUN T2000 contre Apple Mac Pro ? '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>La T2000 revient pour une nouvelle série de tests préliminaires, cette fois contre un Mac Pro, gracieusement prêté par Apple. Je rappelle sommairement les caractéristiques de la machine Sun : 1 processeur physique à 1 GHz, avec 8 cores capables d'exécuter chacun 4 threads, 8 Go de RAM, des disques SAS. Le Mac Pro est bien doté aussi : 2 Xeon Woodcrest 2,66 GHz à deux cores, 7 Go de RAM et 4 disques SATA II.</p>
<p>Comme <a hreflang="fr" href="/blog/index.php/2006/09/28/57-sun-t2000-contre-apple-xserve">précédemment</a>, le but est de mettre en face du serveur MySQL de la T2000, un client capable de mettre à genoux la machine Sun.<br />
On a vu qu'un client XServe bi G5 à 2 GHz n'est pas assez puissant pour faire chauffer le serveur. Au plus fort de mes tests j'ai dépassé 90 de charge sur le XServe, et la T2000 n'a jamais atteint les 20% cpu. Le nombre de selects par seconde, obtenu via super-smack sql_select-key.smack $i 10000 (avec $i un nombre de threads entre 1 et 80), plafonne à 13400 ±300.<br />
Dans les mêmes conditions, le client Mac Pro arrive à tirer 26700 ±200 selects par seconde du serveur Sun. Pendant cette charge de threads et de requêtes, le MySQL consomme 16% du cpu sur le serveur. À moins de faire une attaque distribuée à partir de plusieurs clients, je ne vois aucun moyen de mettre la T2000 en échec, ce qui est bon signe si je veux remplacer nos trois XServes/MySQL par une seule T2000/MySQL.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2006/10/09/58-sun-t2000-contre-apple-mac-pro/' addthis:title='SUN T2000 contre Apple Mac Pro ? '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2006/10/09/58-sun-t2000-contre-apple-mac-pro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SUN T2000 contre Apple XServe ?</title>
		<link>http://www.patpro.net/blog/index.php/2006/09/28/57-sun-t2000-contre-apple-xserve/</link>
		<comments>http://www.patpro.net/blog/index.php/2006/09/28/57-sun-t2000-contre-apple-xserve/#comments</comments>
		<pubDate>Thu, 28 Sep 2006 17:21:16 +0000</pubDate>
		<dc:creator>patpro</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">https://www.patpro.net/wp/index.php/2006/09/28/57-sun-t2000-contre-apple-xserve/</guid>
		<description><![CDATA[J'ai reçu il y a deux jours un nouveau jouet : un serveur SUN T2000 en prét pour 60 jours. Sans rentrer dans les détails, puisque j'y reviendrai, je peux affirmer une chose : je vais avoir bien du mal à faire mes benchmarks MySQL sur cette machine. La raison est simple, je crois que je n'ai [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2006/09/28/57-sun-t2000-contre-apple-xserve/' addthis:title='SUN T2000 contre Apple XServe ? '><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></description>
			<content:encoded><![CDATA[<p>J'ai reçu il y a deux jours un nouveau jouet : un serveur <a hreflang="en" href="http://www.sun.com/servers/coolthreads/t2000/">SUN T2000</a> en prét pour 60 jours. Sans rentrer dans les détails, puisque j'y reviendrai, je peux affirmer une chose : je vais avoir bien du mal à faire mes benchmarks MySQL sur cette machine. La raison est simple, je crois que je n'ai pas de machine assez puissante à mettre en face !<br />
Pour mes tests préliminaires, j'ai confronté la SUN à notre machine de test habituelle, un XServe bi-G5 2GHz avec 4 Go de RAM. La T2000 à un seul processeur physique, à 1GHz, mais il dispose de 8 cores, chacun pouvant exécuter 4 threads. On se retrouve alors avec une machine possédant 32 processeurs virtuels, elle dispose par ailleurs de 8 Go de RAM :</p>
<pre>root@sunt2000 # psrinfo -pv
The physical processor has 32 virtual processors (0, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
 29, 30, 31)
  UltraSPARC-T1 (cpuid 0 clock 1000 MHz)
</pre>
<p>Et bien, le XServe mouline comme un taré (actuellement Load Avg: 15.14, 13.33, 9.61, et ça monte), alors que la SUN ne fait presque rien :</p>
<pre>   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
   935 mysql    2565M  856M cpu9    45    0   2:37:15 6.1% mysqld/25
../..
Total: 45 processes, 188 lwps, load averages: 2.78, 2.77, 2.50
</pre>
<p>Je reviendrai là dessus quand je serai un peu plus familier avec Solaris d'une part et les méthodes de bench MySQL d'autre part, mais j'ai dans l'idée que les 60 jours vont très vite passer.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.patpro.net/blog/index.php/2006/09/28/57-sun-t2000-contre-apple-xserve/' addthis:title='SUN T2000 contre Apple XServe ? '><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47f81ddfbdce" class="addthis_button_compact">Share</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.patpro.net/blog/index.php/2006/09/28/57-sun-t2000-contre-apple-xserve/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

