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

« MySQL » : différence entre les versions

De AJLSM
Aller à la navigation Aller à la recherche
 
(11 versions intermédiaires par le même utilisateur non affichées)
Ligne 122 : Ligne 122 :
{{path|replicate-do-db}} n'a aucun effet sur le maître, car il n'y a pas de journal de relais à lire.
{{path|replicate-do-db}} n'a aucun effet sur le maître, car il n'y a pas de journal de relais à lire.


Dans le cas, suivant, on souhaite le scénario 2 :
Dans le cas, suivant, on souhaite le scénario 2, on remplace :
<syntaxhighlight lang="bash">binlog_do_db            = pleade_internet
<syntaxhighlight lang="bash">binlog_do_db            = pleade_internet
binlog_do_db            = pleade_persistant
binlog_do_db            = pleade_persistant
Ligne 175 : Ligne 175 :


= Pleade : Supprimer l'historique de publication =
= Pleade : Supprimer l'historique de publication =
{{notice|À utiliser lorsque l'historique de publication affiche "Data error"}}
Dans l'exemple suivant, on va supprimer l'historique de publication de la base pleade_preprod.
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.
* Les commandes sont lancées depuis l'utilisateur root ou ajlsm, selon le cas.


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Ligne 190 : Ligne 191 :
mysql> drop table publication_document  (drop table [la table à supprimer])
mysql> drop table publication_document  (drop table [la table à supprimer])
     > ;                                (Validation avec ";")
     > ;                                (Validation avec ";")
mysql> exit                            (Quitter)
$
</syntaxhighlight>
* Redémarrer le Tomcat du Pleade concerné.
= Pleade : RàZ des documents publiés =
Dans l'exemple suivant, on va supprimer les publications de la base EAD d'une application Internet.
* Les commandes sont lancées depuis l'utilisateur ajlsm.
{{important|Attention, vous allez supprimer l'indexation et les paramètres de publications des documents EAD}}
Supprimer ce qui est indexé :
<syntaxhighlight lang="bash">rm -rf datadirs/internet/dbs/ead
rm -rf datadirs/internet/docs/ead
rm -rf datadirs/internet/pleade/ead</syntaxhighlight>
* Supprimer les tables de la base de données :
<syntaxhighlight lang="bash">
$ mysql -u ajlsm -p
Enter Password :                        (mot de passe root de mysql -> tomcat/conf/context.xml)
mysql> show databases;                  (liste les bases de données)
mysql> use pleade_internet;            (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> show tables;
+-------------------------------+
| Tables_in_pleade_internet    |
+-------------------------------+
| ark                          |
| arkq                          |
| module_eadeac_eac            |
| module_eadeac_eac_docs        |
| module_eadeac_ead            |
| module_eadeac_ead_docs        |
| module_eadeac_mets            |
| module_eadeac_mets_docs      |
| module_eadeac_oai_dc          |
| module_eadeac_oai_dc_docs    |
| module_eadeac_qdc            |
| module_eadeac_qdc_docs        |
| module_maps                  |
| o_anotice                    |
| oai_harvest                  |
| oai_harvest_page              |
| oai_harvest_record            |
| oai_harvester                |
| oai_harvester_history        |
| oai_harvester_metadata_format |
| oai_harvester_set            |
| oai_set                      |
| oai_set_document              |
| plink                        |
| publication                  |
| publication_document          |
| role                          |
| saved_basket                  |
| saved_basket_document        |
| saved_search                  |
| user                          |
| vnotice                      |
+-------------------------------+</syntaxhighlight>
{{important|Attention, vous allez supprimer les tables correspondant aux fragments EAD. Pour supprimer uniquement l'historique, cf. supra}}
<syntaxhighlight lang="bash">mysql> drop table module_eadeac_ead;    (drop table [la table à supprimer])
Query OK, 0 rows affected (0.03 sec)
mysql> drop table module_eadeac_ead_docs;    (drop table [la table à supprimer])
mysql> exit                            (Quitter)
mysql> exit                            (Quitter)
$  
$  

Dernière version du 25 novembre 2024 à 12:54

= 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
  • 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

[modifier | modifier le wikicode]
  • 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 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

[modifier | modifier le wikicode]

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

show processlist;

Pour voir les requêtes à cette instant.


Encodage des caratéres

[modifier | modifier le wikicode]

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

[modifier | modifier le wikicode]

Désactivation du cache

[modifier | modifier le wikicode]

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

Changement de la config

[modifier | modifier le wikicode]

/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

[modifier | modifier le wikicode]

En cas de configuration avec un master et un slave.

Voir : https://stackoverflow.com/questions/44431961/what-is-the-difference-between-binlog-do-db-and-replicate-do-db

  1. binlog-do-db oblige le maître à écrire uniquement des instructions pour la base de données spécifiée dans son journal binaire.
  1. replicate-do-db fait que l'esclave lit simplement les instructions du journal de relais, qui sont pour la base de données spécifiée.

replicate-do-db n'a aucun effet sur le maître, car il n'y a pas de journal de relais à lire.

Dans le cas, suivant, on souhaite le scénario 2, on remplace :

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 :

[modifier | modifier le wikicode]
SET global query_cache_type = 0;
SET global query_cache_size = 0;

Ajout des index manquants

[modifier | modifier le wikicode]

Pour la création des index (dans les bases dont les tables sont concernées) :

Par exemple, dans l'exemple ci-dessous, la table "ark" se trouve dans la base "pleade_persistant_v2".

Les table "o_anotice" et "publication" se trouvent dans les bases "pleade_internet_v2", "pleade_preprod_v2", "pleade_slecture". etc.

On sélectionne d'abord la base, par exemple mysql > use pleade_persistant_v2, puis on lance la création d'index pour la ou les tables 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

[modifier | modifier le wikicode]
Notice :
À utiliser lorsque l'historique de publication affiche "Data error".

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 ou ajlsm, selon le cas.
$ 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é.

Pleade : RàZ des documents publiés

[modifier | modifier le wikicode]

Dans l'exemple suivant, on va supprimer les publications de la base EAD d'une application Internet.

  • Les commandes sont lancées depuis l'utilisateur ajlsm.
Important :
Attention, vous allez supprimer l'indexation et les paramètres de publications des documents EAD.

Supprimer ce qui est indexé :

rm -rf datadirs/internet/dbs/ead
rm -rf datadirs/internet/docs/ead
rm -rf datadirs/internet/pleade/ead
  • Supprimer les tables de la base de données :
$ mysql -u ajlsm -p
Enter Password :                        (mot de passe root de mysql -> tomcat/conf/context.xml)
mysql> show databases;                  (liste les bases de données)
mysql> use pleade_internet;             (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> show tables;
+-------------------------------+
| Tables_in_pleade_internet     |
+-------------------------------+
| ark                           |
| arkq                          |
| module_eadeac_eac             |
| module_eadeac_eac_docs        |
| module_eadeac_ead             |
| module_eadeac_ead_docs        |
| module_eadeac_mets            |
| module_eadeac_mets_docs       |
| module_eadeac_oai_dc          |
| module_eadeac_oai_dc_docs     |
| module_eadeac_qdc             |
| module_eadeac_qdc_docs        |
| module_maps                   |
| o_anotice                     |
| oai_harvest                   |
| oai_harvest_page              |
| oai_harvest_record            |
| oai_harvester                 |
| oai_harvester_history         |
| oai_harvester_metadata_format |
| oai_harvester_set             |
| oai_set                       |
| oai_set_document              |
| plink                         |
| publication                   |
| publication_document          |
| role                          |
| saved_basket                  |
| saved_basket_document         |
| saved_search                  |
| user                          |
| vnotice                       |
+-------------------------------+
Important :
Attention, vous allez supprimer les tables correspondant aux fragments EAD. Pour supprimer uniquement l'historique, cf. supra.
mysql> drop table module_eadeac_ead;    (drop table [la table à supprimer])
Query OK, 0 rows affected (0.03 sec)

mysql> drop table module_eadeac_ead_docs;    (drop table [la table à supprimer])

mysql> exit                             (Quitter)
$
  • Redémarrer le Tomcat du Pleade concerné.

Commandes utiles MAC OS X

[modifier | modifier le wikicode]
  • Démarrer mysql:
sudo port load mysql56-server
  • Arrêter mysql:
sudo port unload mysql56-server