Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

MySQL

De AJLSM
Aller à la navigation Aller à la recherche

Commandes utiles

  • Pour voir les dates créée et modifiée des tableaux:
select table_schema, table_name, create_time, update_time from information_schema.tables where table_schema='bmorleans_prod_pleade' order by create_time;
  • Pour voir la progression pendant un import d'un gros fichier dans MySQL:
sudo apt-get install pv
pv /data/client/bm-orleans/bmorleans_prod_pleade.sql | mysql -u bmorleans_pleade -p6DvP8ana bmorleans_prod_pleade

Statistiques

  • Pour voir la taille nécessaire pour la valeur du VARCHAR(...) :

Statistiques pour voir le nombre de caractères maximum utilisés dans une table.

Où (2,2) = (RAM attribuée, enum).

select * from [table] procedure analyse(2,2);

Retourne un tableau.

select * from [table] procedure analyse(2,2)\G;

Retourne une liste (présentation différente.

La valeur à regarder ici est dans le paramètre :

Max_lenght:
  • Pour voir le sql_mode :
show global variables like 'sql_mode';

Configuration de MySQL pour Pleade par défaut

  • Pour voir le max_allowed_packet pour MySQL :
show variables like 'max_allowed_packet';
  • Il faut modifier le fichier /etc/mysql/my.cnf
  • Changer tous les "max_allowed_packet" à 100M
  • Il faut changer max_allowed_packet=100M pour ajouter des gros fichiers EAD dans la base de données de Pleade :
sudo mysqld --max_allowed_packet=100M
sudo service mysql restart

ou

mysql -u root -p
set global max_allowed_packet=1024 * 1024 * 100;
  • Erreur lors d'un dump :
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `module_eadeac_ead_docs` at row: 207253

Pour faire un mysqldump avec max_allowed_packet=512M :

mysqldump --max_allowed_packet=512M -u pleade -p  pleade_preprod > /home/ajlsm/backup/update-PREPROD-ad84-2014-11-05-backup.sql
  • Si non, vous pouvez avoir une erreur comme :

ERROR (2014-06-20) 11:45.54:450 [sdx.framework] (/pleade-mets/edit/ead-publish.xml) http-20380-66/LoggingUtils: Impossible d'ajouter un document avec l'identifiant « FRAD084_paroissiaux » dans l'entrepôt « ead-docs » : « Impossible d'exécuter la requête « INSERT INTO module_eadeac_ead_docs (id,data) VALUES (?, ?) » : impossible de lire l'index de recherche de «  » : « Packet for query is too large (26462104 > 16777216). You can change this value on the server by setting the max_allowed_packet' variable. » »

mysqlreport

mysqlreport est installer normalement avec mysql sur linux. Il donne des informations sur la performance de mysql utiles. Voir cette page pour davantage d'info : http://hackmysql.com/nontech

show processlist

Après avoir connecté à mysql terminal, on peut faire

show processlist;

Pour voir les requêtes à cette instant.


Encodage des caratéres

L'encodage par défaut de MySQL est *ISO Latin1*. Ainsi, plusieurs caractères accentués ne sont pas gérés. Les problèmes apparaissent souvent au niveau de la partie gauche de la fenêtre EAD (car les données correspondantes sont dans la base de données).

Pour corriger ce problème, il faut changer par défaut l'encodage de MySQL en *utf8*.

Il y a deux manières de régler le problème.

A) Il faut ajouter les deux lignes suivantes dans les sections client et mysqld du fichier my.cnf.

[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8
      • OU ***

B) Ajouter le paramètrage suivant à la connexion jdbc dans tomcat/conf/context.xml:

?useEncoding=true&characterEncoding=UTF-8

Exemple:

<Resource name="jdbc/pleade3" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" 
		url="jdbc:mysql://localhost/pleade310?useEncoding=true&amp;characterEncoding=UTF-8" driverClassName="com.mysql.jdbc.Driver" username="sdxapp" password="sdxapp-pwd"/>

Source

Optimisation : Modification de la configuration de la base de données Pleade

Désactivation du cache

Ne surtout pas utiliser le cache de MySQL. Génère des problèmes de lenteur.

Changement de la config

/etc/mysql/mysql.conf.d$ vim mysqld.cnf Remplacer :

query_cache_type        = 1
query_cache_limit       = 1M
query_cache_size        = 4G

Par :

query_cache_type        = 0
query_cache_limit       = 1M
query_cache_size        = 0

Bonnes pratiques : Réplication des tables

Remplacer :

binlog_do_db            = pleade_internet
binlog_do_db            = pleade_persistant
binlog_do_db            = pleade_slecture

Par :

replicate_do_db         = pleade_internet
replicate_do_db         = pleade_persistant
replicate_do_db         = ppleade_slecture

Modification à chaud :

SET global query_cache_type = 0;
SET global query_cache_size = 0;

Ajout des index manquants

Pour la création des index dans les bases concernées :

ALTER TABLE ark  ADD INDEX dba1  (name___ark );
ALTER TABLE ark  ADD INDEX dba2  (method,updated );
ALTER TABLE o_anotice  ADD INDEX dba4  (STATUS,idiiif );
ALTER TABLE o_anotice  ADD INDEX dba5  (idiiif,STATUS );
ALTER TABLE publication  ADD INDEX dba6  (insertfinished,started );
ALTER TABLE publication  ADD INDEX dba7  (started,insertfinished );
ALTER TABLE ark  ADD INDEX dba8  (updated,method );

Pour afficher les index créés dans les tables :

MySQL [(NONE)]> SELECT TABLE_SCHEMA, TABLE_NAME,INDEX_NAME,GROUP_CONCAT(COLUMN_NAME)AS COLUMN_NAMES FROM INFORMATION_SCHEMA.STATISTICS WHERE INDEX_NAME LIKE 'dba%' GROUP BY TABLE_SCHEMA, TABLE_NAME,INDEX_NAME ORDER BY INDEX_NAME;
+----------------------+-------------+------------+------------------------+
| TABLE_SCHEMA         | TABLE_NAME  | INDEX_NAME | COLUMN_NAMES           |
+----------------------+-------------+------------+------------------------+
| pleade_persistant_v2 | ark         | dba1       | name___ark             |
| pleade_persistant_v2 | ark         | dba2       | method,updated         |
| pleade_internet_v2   | o_anotice   | dba4       | status,idiiif          |
| pleade_preprod_v2    | o_anotice   | dba4       | status,idiiif          |
| pleade_slecture      | o_anotice   | dba4       | status,idiiif          |
| pleade_internet_v2   | o_anotice   | dba5       | idiiif,status          |
| pleade_preprod_v2    | o_anotice   | dba5       | idiiif,status          |
| pleade_slecture      | o_anotice   | dba5       | idiiif,status          |
| pleade_internet_v2   | publication | dba6       | insertfinished,started |
| pleade_preprod_v2    | publication | dba6       | insertfinished,started |
| pleade_slecture      | publication | dba6       | insertfinished,started |
| pleade_internet_v2   | publication | dba7       | started,insertfinished |
| pleade_preprod_v2    | publication | dba7       | started,insertfinished |
| pleade_slecture      | publication | dba7       | started,insertfinished |
| pleade_persistant_v2 | ark         | dba8       | updated,method         |
+----------------------+-------------+------------+------------------------+
7 ROWS IN SET (0.015 sec)

Les index sur la table ark ont permis, avec le retrait du cache de 4Go, d'améliorer drastiquement les performances.

Pleade : Supprimer l'historique de publication

Dans l'exemple suivant, on va supprimer l'historique de publication de la base pleade_preprod.

  • Les commandes sont lancées depuis l'utilisateur root.
$ mysql -u root -p
Enter Password :                        (mot de passe root de mysql -> tomcat/conf/context.xml)
mysql> use pleade_preprod               (use [la base à modifier])
   Reading table information for completion of table and column names
   You can turn off this feature to get a quicker startup with -A
   Database changed
mysql> drop table publication           (drop table [la table à supprimer])
     > ;                                (Validation avec ";")
mysql> drop table publication_document  (drop table [la table à supprimer])
     > ;                                (Validation avec ";")
mysql> exit                             (Quitter)
$
  • Redémarrer le Tomcat du Pleade concerné.

Commandes utiles MAC OS X

  • Démarrer mysql:
sudo port load mysql56-server
  • Arrêter mysql:
sudo port unload mysql56-server