{"id":31,"date":"2009-03-05T22:34:58","date_gmt":"2009-03-05T21:34:58","guid":{"rendered":"https:\/\/arliguy.net\/?p=31"},"modified":"2009-07-31T11:07:54","modified_gmt":"2009-07-31T10:07:54","slug":"configuration-mysql-quelques-astuces","status":"publish","type":"post","link":"https:\/\/arliguy.net\/2009\/03\/05\/configuration-mysql-quelques-astuces\/","title":{"rendered":"Configuration MySQL – quelques astuces"},"content":{"rendered":"
Il faut augmenter la valeur du param\u00e8tre max_allowed_packet<\/strong> dans le fichier de configuration de MySQL pour permettre de g\u00e9rer les grosses requ\u00eates : principalement pour les tables qui contiennent des BLOB et CLOB qui peuvent \u00eatre volumineux.<\/p>\n Ajouter ce qui suit dans la section [mysqld]<\/strong> du fichier de configuration<\/p>\n Modifier le param\u00e8tre dans l’interface graphique comme dans la capture d’\u00e9cran suivant :<\/p>\n La gestion des noms de tables est configur\u00e9e diff\u00e9remment par d\u00e9faut sous Windows ou Linux :<\/p>\n Le passage du contenu d’une base de donn\u00e9es d’un OS \u00e0 un autre peut donc \u00eatre probl\u00e9matique, principalement dans le sens Windows -> Linux. En effet, faire le dump depuis Windows va minimiser tous les noms de tables. Et si jamais le code source de votre application r\u00e9f\u00e9rence les tables avec des majuscules, cela peut posser des soucis. Surtout qu’il n’est pas toujours possible de re-\u00e9crire le code pour n’utiliser que des noms de tables en minuscules. Voici les solutions que j’utilise dans ces cas-l\u00e0.<\/p>\n Pour importer une base MySQL depuis une machine Windows vers une machine Linux, il est possible de configurer le serveur MySQL sous Linux avec le param\u00e8tre lower_case_table_names<\/strong> \u00e0 1. Pour cela, \u00e9diter le fichier my.ini et placer dans la section [mysqld]<\/strong> la ligne suivante :<\/p>\n Voir la documentation MySQL<\/a> pour plus de d\u00e9tails sur ce sujet.<\/p>\n Si il n’est pas possible de modifier la configuration du serveur MySQL sous linux, il reste la solution – beaucoup plus sport – qui consiste \u00e0 modifier le fichier de dump. En fait, il va falloir diviser le dump en deux fichiers :<\/p>\n Le premier fichier<\/strong> qui ne contient que la structure de la base :\u00a0 dump.struct.sql<\/strong> Il peut \u00eatre cr\u00e9\u00e9 avec la commande suivante :<\/p>\n Le deuxi\u00e8me fichier<\/strong> qui ne contient que les donn\u00e9es de la base : dump.data.sql<\/strong> Il peut \u00eatre cr\u00e9\u00e9 avec la commande suivante (–hex-blob<\/strong> pour exporter les binaires en hexad\u00e9cimal et –extended-insert=false<\/strong> pour avoir une commande INSERT par enregistrement) :<\/p>\n Il va ensuite falloir transformer ces fichiers pour que les noms des tables soient en majuscules :<\/p>\n C’est l’op\u00e9ration la plus simple. Utilisez la commande ‘tr<\/strong>‘ comme suit :<\/p>\n Et importer le fichier dump.struct.upper.sql<\/strong> r\u00e9sultant dans la base.<\/p>\n L\u00e0 c’est un peu plus compliqu\u00e9, car on ne veut pas tout mettre en majuscules, car ce fichier contient aussi les donn\u00e9es des diff\u00e9rentes tables de notre base.<\/p>\n Note : il est \u00e0 rapeller que le fichier dump.data.sql ne contient qu’une ligne de donn\u00e9es – ie un INSERT – par enregistrement de chaque table.<\/p><\/blockquote>\n Utiliser la commande ‘awk<\/strong>‘ pour modifier les commandes ‘INSERT INTO<\/strong>‘ et ‘LOCK TABLE<\/strong>‘ comme suit – chaque commande awk doit \u00eatre sur une seule ligne :<\/p>\n En fonction de la structure du fichier d’import des donn\u00e9es, il se peut que le nom des tables soit utilis\u00e9 dans d’autres commandes, comme par exemple des commandes pour ignorer les int\u00e9grit\u00e9s r\u00e9f\u00e9rentielles : ALTER TABLE `une_table` DISABLE KEYS<\/strong>. Il faut dans ce cas se baser sur les scripts ci-dessus pour cr\u00e9er un nouveau qui corrigera ce probl\u00e8me.<\/p>\n Il n’y a plus qu’\u00e0 importer le fichier dump.data.upper.sql dans la base MySQL.<\/p>\n","protected":false},"excerpt":{"rendered":" Param\u00e8tre Max Packet Size pour les grosses requ\u00eates Il faut augmenter la valeur du param\u00e8tre max_allowed_packet dans le fichier de configuration de MySQL pour permettre de g\u00e9rer les grosses requ\u00eates : principalement pour les tables qui contiennent des BLOB et CLOB qui peuvent \u00eatre volumineux. M\u00e9thodes \u00c9diter le fichier my.ini Ajouter ce qui suit dans … Continuer la lecture de Configuration MySQL – quelques astuces<\/span> M\u00e9thodes<\/h2>\n
\u00c9diter le fichier my.ini<\/h3>\n
\n
#Max packetlength to send\/receive from to server.\r\nmax_allowed_packet=8M<\/pre>\n<\/blockquote>\n
Utiliser l’interface graphique MySQL Administrator<\/h3>\n
<\/a>
Importer une base de Windows \u00e0 Linux<\/h1>\n
\n
Choix 1 : Modifier la configuration du MySQL sous Linux<\/h2>\n
\n
set-variable = lower_case_table_names=1<\/pre>\n<\/blockquote>\n
Choix 2 : Transformer le fichier de dump<\/h2>\n
\n
\u00a0mysqldump -hHOSTNAME -uUSER -p -d DBNAME > dump.struct.sql<\/pre>\n<\/blockquote>\n
\n
mysqldump -hHOSTNAME -uUSER -p --hex-blob --extended-insert=false -t DBNAME > dump.data.sql<\/pre>\n<\/blockquote>\n
Pour le fichier dump.struct.sql<\/h3>\n
\n
$ cat dump.struct.sql | tr '[:lower:]' '[:upper:]' > dump.struct.upper.sql<\/pre>\n<\/blockquote>\n
Pour le fichier dump.data.sql<\/h3>\n
\n
$ awk '$1 == \"LOCK\" || $1 == \"INSERT\" { $3 = toupper($3) ; print $0 };\r\n $1 != \"INSERT\" && $1 != \"LOCK\" {print $0}; ' dump.data.sql > dump.data.upper.sql<\/pre>\n<\/blockquote>\n