Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
linux:mysql [03-10-2019 08:31] – [Strict Mode] edmc73 | linux:mysql [14-02-2023 10:39] (Version actuelle) – [Sauvegarder] edmc73 | ||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
* http:// | * http:// | ||
- | * http://mysqltuner.com/ - script | + | * https://github.com/major/ |
wget --no-check-certificate https:// | wget --no-check-certificate https:// | ||
Ligne 54: | Ligne 54: | ||
mysqldump -h hostname -u user -p $(mysql nom_de_la_base -h hostname -u user -p -Bse 'show tables like" | mysqldump -h hostname -u user -p $(mysql nom_de_la_base -h hostname -u user -p -Bse 'show tables like" | ||
- | Restaurer | + | La bonne pratique en prod est d' |
+ | |||
+ | mysqldump -u USER -p --single-transaction --quick --lock-tables=false --all-databases (or) DATABASE | gzip > OUTPUT.sql.gz | ||
+ | |||
+ | * --quick : This option is useful for dumping large tables. It forces mysqldump to retrieve rows for a table from the server a row at a time rather than retrieving the entire row set and buffering it in memory before writing it out | ||
+ | |||
+ | * --single-transaction : This option sets the transaction isolation mode to REPEATABLE READ and sends a START TRANSACTION SQL statement to the server before dumping data. It is useful only with transactional tables such as InnoDB, because then it dumps the consistent state of the database at the time when START TRANSACTION was issued without blocking any applications. | ||
+ | |||
+ | * --lock-tables=false : option stops MyISAM tables (if they exsit) being locked during the backup | ||
+ | |||
+ | |||
+ | Sauvegarder une table avec des conditions WHERE | ||
+ | |||
+ | <code bash> | ||
+ | # Dump only the rows with the id column bigger than 500 | ||
+ | mysqldump my_db_name my_table_name --where=" | ||
+ | |||
+ | # Dump only the rows with the created_at column in the given interval | ||
+ | mysqldump my_db_name my_table_name --where=" | ||
+ | </ | ||
+ | ==== Restaurer | ||
mysql -u user -p nom_de_la_base < backup.sql | mysql -u user -p nom_de_la_base < backup.sql | ||
Ligne 69: | Ligne 89: | ||
/^DROP TABLE IF EXISTS `$table`/ .. /^UNLOCK TABLES;$/ and print; | /^DROP TABLE IF EXISTS `$table`/ .. /^UNLOCK TABLES;$/ and print; | ||
+ | </ | ||
+ | |||
+ | Pour automatiser la connexion a mysql et ne pas avoir à taper de mot de passe, créer un fichier **~/ | ||
+ | < | ||
+ | [client] | ||
+ | user=root | ||
+ | password=somepassword | ||
</ | </ | ||
===== Logguer les requêtes en temps réel ponctuellement ===== | ===== Logguer les requêtes en temps réel ponctuellement ===== | ||
Ligne 196: | Ligne 223: | ||
Une requête intégressante | Une requête intégressante | ||
SHOW ENGINE INNODB STATUS | SHOW ENGINE INNODB STATUS | ||
+ | |||
+ | La commande **innotop** permet de faire comme **htop** avec beaucoup d'info sur ce qu'il se passe sur innodb | ||
+ | innotop | ||
| | ||
Ligne 348: | Ligne 378: | ||
Utiliser des log binaire pour mettre à jour une base de données distante après avoir fait un mysqldump | Utiliser des log binaire pour mettre à jour une base de données distante après avoir fait un mysqldump | ||
+ | Vérifier si les log binaires sont activé | ||
+ | < | ||
+ | MariaDB [(none)]> | ||
+ | +------------------+-----------+ | ||
+ | | Log_name | ||
+ | +------------------+-----------+ | ||
+ | | mysql-bin.000001 | 328 | | ||
+ | +------------------+-----------+ | ||
+ | 1 row in set (0.000 sec) | ||
+ | |||
+ | |||
+ | MariaDB [(none)]> | ||
+ | +---------------------------------+--------------------------------+ | ||
+ | | Variable_name | ||
+ | +---------------------------------+--------------------------------+ | ||
+ | | log_bin | ||
+ | | log_bin_basename | ||
+ | | log_bin_compress | ||
+ | | log_bin_compress_min_len | ||
+ | | log_bin_index | ||
+ | | log_bin_trust_function_creators | OFF | | ||
+ | +---------------------------------+--------------------------------+ | ||
+ | 6 rows in set (0.001 sec) | ||
+ | |||
+ | </ | ||
+ | |||
+ | Si non | ||
+ | < | ||
+ | mysql> SHOW BINARY LOGS; | ||
+ | ERROR 1381 (HY000): You are not using binary logging | ||
+ | </ | ||
+ | |||
+ | Pour activer dans le cas de mariaDB | ||
+ | vi / | ||
+ | Décommenter la ligne | ||
+ | log_bin | ||
+ | et restarter mariaDB | ||
+ | systemctl restart mariadb.service | ||
+ | |||
+ | |||
+ | Vos fichiers de log binaires sont maintenant stocké dans / | ||
+ | |||
+ | **mysqlbinlog** permet de lire les fichiers de log binaire et de générer une sortie sql | ||
+ | < | ||
+ | # mysqlbinlog mysql-bin.000001 | ||
+ | mysqlbinlog: | ||
+ | |||
+ | ---------- Si vous avez ce message d' | ||
+ | |||
+ | # mysqlbinlog --no-defaults mysql-bin.000001 | ||
+ | </ | ||
+ | |||
+ | Filtre possible: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | example de restauration | ||
+ | mysqlbinlog / | ||
+ | |||
+ | mysqlbinlog --no-defaults --start-datetime=" | ||
+ | |||
+ | Par défaut, mysql s' | ||
+ | |||
+ | mysqlbinlog --no-defaults --start-datetime=" | ||
+ | |||
+ | ===== Auto increment ===== | ||
+ | |||
+ | On peut réinitialiser la valeur de l'auto increment d'un id avec la requete | ||
+ | <code sql> | ||
+ | ALTER TABLE `users` AUTO_INCREMENT = 1; | ||
+ | </ | ||
+ | Mysql prendra automatiquement le max(id) + 1 | ||
+ | |||
+ | Pour réinitialiser complètement une colonne d'id | ||
+ | <code sql> | ||
+ | ALTER TABLE `users` DROP `id`; | ||
+ | ALTER TABLE `users` AUTO_INCREMENT = 1; | ||
+ | ALTER TABLE `users` ADD `id` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; | ||
+ | </ | ||
+ | |||
+ | Si votre id est utilisé dans d' | ||
+ | |||
+ | <code sql> | ||
+ | SET @count = 0; | ||
+ | UPDATE `users` SET `users`.`id` = @count:= @count + 1; | ||
+ | ALTER TABLE `users` AUTO_INCREMENT = 1; | ||
+ | </ |