Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
mysql [2020/05/14 07:53] florian [Sous Windows] |
mysql [2025/04/14 13:59] (Version actuelle) florian [Réparation] |
||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
et, sous l'angle de celui-ci, de SQL dans le cadre de l'application EzGED. | et, sous l'angle de celui-ci, de SQL dans le cadre de l'application EzGED. | ||
+ | ====== Créer une base de données ====== | ||
+ | |||
+ | Pour créer une base de données nommée //nchp_test// | ||
+ | <code> | ||
+ | mysql -u root -p -e "create database nchp_test;" | ||
+ | </code> | ||
====== Sauvegarder / Exporter ====== | ====== Sauvegarder / Exporter ====== | ||
- | Pour sauvegarder notre base de données nous allons réaliser un [[http://fr.wikipedia.org/wiki/Dump|dump]]. | + | Pour sauvegarder notre base de données nous allons réaliser un dump. |
===== Structures et données dans un seul fichier ===== | ===== Structures et données dans un seul fichier ===== | ||
Ligne 35: | Ligne 41: | ||
<code>mysqldump -u root -p base table_1 table_2 ... table_n > dump_selection_tables.sql </code> | <code>mysqldump -u root -p base table_1 table_2 ... table_n > dump_selection_tables.sql </code> | ||
+ | |||
+ | ====== Reparer les tables InnoDB ====== | ||
+ | |||
+ | Si besoin de réparer les tables InnoDB vous pouvez utiliser la fonction //db_regenerate_innodb_indexes()// du module python db_mysql livré par EzGED. | ||
+ | |||
+ | Pour les instructions voir la page [[https://wiki.ezdev.fr/doku.php?id=dev:api:python:db_mysql#regenerer_les_indexes_innodb | de documentation du module db_mysql ]] | ||
====== Importer / Restaurer ====== | ====== Importer / Restaurer ====== | ||
Ligne 72: | Ligne 84: | ||
La plupart des opérations ci-dessus sont accessibles via l'interface graphique phpmyadmin mais la ligne de commande est plus performante. | La plupart des opérations ci-dessus sont accessibles via l'interface graphique phpmyadmin mais la ligne de commande est plus performante. | ||
Avec phpmyadmin vous seriez par exemple limité sur la taille du fichier sql pour l'import en fonction des paramètres de configuration de php. | Avec phpmyadmin vous seriez par exemple limité sur la taille du fichier sql pour l'import en fonction des paramètres de configuration de php. | ||
+ | |||
+ | ====== Base de données d'archivage ====== | ||
+ | |||
+ | Objectif: déplacer sur une autre base de données des tables qui sont en consultation afin d'alléger les dumps. | ||
+ | |||
+ | La base de données d'archive reste sur la même instance il n'y aura donc aucune difficulté pour continuer à | ||
+ | y accéder depuis la ged. | ||
+ | |||
+ | On commence par créer la base de données | ||
+ | <code sql> | ||
+ | CREATE DATABASE nchp_archive; | ||
+ | </code> | ||
+ | |||
+ | La procédure est ensuite la suivante ([[https://mariadb.com/kb/en/copying-tables-between-different-mariadb-databases-and-mariadb-servers/|Documentation MarIADB]]): | ||
+ | <code sql> | ||
+ | FLUSH TABLES db_name.table_name FOR EXPORT | ||
+ | |||
+ | # Copy the relevant files associated with the table | ||
+ | |||
+ | UNLOCK TABLES; | ||
+ | </code> | ||
+ | |||
+ | En passant par PhpMyAdmin il suffit d'aller dans ''Operation'' et tout au début de la page il est proposer de déplacer la table vers la base de donnée qu'il suffit donc de sélectionner. | ||
+ | |||
+ | Une fois le déplacement effectué on peut créer une vue (sur la table de production) qui va sélectionner tout les champs de la table qui maintenance se trouve sur la base d'archivage | ||
+ | |||
+ | <code sql> | ||
+ | CREATE VIEW nomtable AS SELECT * FROM base_archive.nomtable | ||
+ | </code> | ||
====== Migration vers MySQL 5.6 ====== | ====== Migration vers MySQL 5.6 ====== | ||
Ligne 84: | Ligne 125: | ||
https://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_secure-auth\\ | https://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_secure-auth\\ | ||
https://dev.mysql.com/doc/refman/5.0/en/old-client.html | https://dev.mysql.com/doc/refman/5.0/en/old-client.html | ||
+ | |||
+ | |||
+ | ====== Réinitialiser le mot de passe root====== | ||
+ | |||
+ | Suivre la procédure indiqué sur la documentation de MySQL : https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html | ||
+ | |||
+ | ====== Configuration adaptée aux tables volumineuses ====== | ||
+ | |||
+ | Voici une configuration adaptée aux instances MySQL/MariaDB traitant | ||
+ | des volumes de données importants. | ||
+ | |||
+ | <file my.ini> | ||
+ | [mysqld] | ||
+ | datadir=C:/nchp/mysql/data | ||
+ | port=3306 | ||
+ | #EGE-20190429 : Ajout-Modif suite retour Fabrice | ||
+ | #innodb_buffer_pool_size=1023M | ||
+ | sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" | ||
+ | default_storage_engine=innodb | ||
+ | skip-external-locking | ||
+ | key_buffer_size = 512M | ||
+ | table_open_cache = 512 | ||
+ | sort_buffer_size = 2M | ||
+ | read_buffer_size = 2M | ||
+ | read_rnd_buffer_size = 8M | ||
+ | myisam_sort_buffer_size = 64M | ||
+ | thread_cache_size = 8 | ||
+ | query_cache_size = 64M | ||
+ | thread_concurrency = 10 | ||
+ | max_connections = 1000 | ||
+ | #EGE-20201230 : Optimisation suite erreurs bdd | ||
+ | innodb_buffer_pool_size= 4G | ||
+ | wait_timeout = 43200 | ||
+ | max_allowed_packet = 64M | ||
+ | innodb_log_file_size= 20M | ||
+ | |||
+ | #EGE-20190429 : Traces requetes longues | ||
+ | slow_query_log=1 | ||
+ | slow_query_log_file=C:/nchp/mysql/log/mysql-slow.log | ||
+ | long_query_time = 2 | ||
+ | net_read_timeout = 60 | ||
+ | connect_timeout = 20 | ||
+ | |||
+ | [client] | ||
+ | port=3306 | ||
+ | plugin-dir=C:/nchp/mysql/lib/plugin | ||
+ | </file> | ||
+ | |||
+ | |||
+ | ====== Résolution des problèmes ====== | ||
+ | |||
+ | ===== La base de données ne démarre plus ===== | ||
+ | |||
+ | Les causes peuvent être variées donc nous allons présenter ici une solution qui doit fonctionner dans la plupart des cas. | ||
+ | |||
+ | ==== Cas 1: je n'ai pas de sauvegarde (récente) ==== | ||
+ | |||
+ | |||
+ | Si vous ne disposez pas de sauvegarde récente ou souhaitez tout de même tenter de sauvegarder la | ||
+ | base de données dans l'état actuel alors vous pouvez essayer de forcer le démarrage de MySQL/MariaDB | ||
+ | en utilisant le paramètre ''innodb_force_recovery'' (fonctionne donc uniquement si on utilise InnoDB) | ||
+ | |||
+ | 1. Arrêter le service MySQL. | ||
+ | |||
+ | 2. Modifier le fichier de configuration my.ini \\ | ||
+ | Ajoutez dans la section ''[mysqld]'' la ligne suivante: | ||
+ | <code> | ||
+ | [mysqld] | ||
+ | innodb_force_recovery = 1 #Niveau de 0 à 6 | ||
+ | </code> | ||
+ | |||
+ | 3. Redémarrer le service MySQL \\ | ||
+ | Si le service ne démarre pas vous pouvez augmenter le niveau jusqu'à 6. \\ | ||
+ | Si au niveau 6 le service n'a pas pu démarrer, vous ne pourrez rien faire de plus concernant | ||
+ | la récupération des données. | ||
+ | |||
+ | 4. Le service a pu démarrer. \\ | ||
+ | Faites une sauvegarde ([[mysql#structures_et_donnees_dans_des_fichiers_separes|générer une sauvegarde]]) | ||
+ | |||
+ | |||
+ | ==== Cas 2: j'ai une sauvegarde ==== | ||
+ | |||
+ | Vous pouvez passer directement à la partie [[mysql#réparation]]. | ||
+ | |||
+ | |||
+ | ===== Réparation ===== | ||
+ | |||
+ | 1. Arrêter le service MySQL | ||
+ | |||
+ | 2. Supprimer le fichier ibdata1 | ||
+ | |||
+ | 3. Enlever le paramètre 'innodb_force_recovery ' (ou le mettre à 0) | ||
+ | |||
+ | 4. Démarrer le service MySQL | ||
+ | |||
+ | 5. Si vous en avez une, remontez la sauvegarde. | ||
+ | Suivre la procédure habituelle [[mysql#structures_et_donnees_dans_des_fichiers_separes1|Remonter une sauvegarde]] | ||
+ | |||
+ |