Outils pour utilisateurs

Outils du site


linux:mysql (lu 65379 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
linux:mysql [06-08-2019 11:35]
edmc73 [Erreur]
linux:mysql [09-10-2019 16:40]
edmc73
Ligne 69: Ligne 69:
    
 /^DROP TABLE IF EXISTS `$table`/ .. /^UNLOCK TABLES;$/ and print; /^DROP TABLE IF EXISTS `$table`/ .. /^UNLOCK TABLES;$/ and print;
 +</code>
 +
 +Pour automatiser la connexion a mysql et ne pas avoir à taper de mot de passe, créer un fichier **~/.my.cnf**
 +<code>
 +[client]
 +user=root
 +password=somepassword
 </code> </code>
 ===== Logguer les requêtes en temps réel ponctuellement ===== ===== Logguer les requêtes en temps réel ponctuellement =====
Ligne 335: Ligne 342:
 </code> </code>
  
 +
 +===== Strict Mode =====
 +
 +Bon à savoir si jamais vous copiez des dates en 0000-00-00 et que vous avez une erreur
 +
 +  SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '0000-00-00' for column...
 +
 +Strict mode affects whether the server permits '0000-00-00' as a valid date: If strict mode is not enabled, '0000-00-00' is permitted and inserts produce no warning. If strict mode is enabled, '0000-00-00' is not permitted and inserts produce an error, unless IGNORE is given as well. For INSERT IGNORE and UPDATE IGNORE, '0000-00-00' is permitted and inserts produce a warning.
 +
 +===== Log binaire =====
 +
 +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é
 +
 +<code>
 +MariaDB [(none)]> SHOW BINARY LOGS;
 ++------------------+-----------+
 +| Log_name         | File_size |
 ++------------------+-----------+
 +| mysql-bin.000001 |       328 |
 ++------------------+-----------+
 +1 row in set (0.000 sec)
 +
 +
 +MariaDB [(none)]> show variables like 'log_bin%';
 ++---------------------------------+--------------------------------+
 +| Variable_name                   | Value                          |
 ++---------------------------------+--------------------------------+
 +| log_bin                         | ON                             |
 +| log_bin_basename                | /var/log/mysql/mysql-bin       |
 +| log_bin_compress                | OFF                            |
 +| log_bin_compress_min_len        | 256                            |
 +| log_bin_index                   | /var/log/mysql/mysql-bin.index |
 +| log_bin_trust_function_creators | OFF                            |
 ++---------------------------------+--------------------------------+
 +6 rows in set (0.001 sec)
 +
 +</code>
 +
 +Si non
 +<code>
 +mysql> SHOW BINARY LOGS;
 +ERROR 1381 (HY000): You are not using binary logging
 +</code>
 +
 +Pour activer dans le cas de mariaDB
 +  vi /etc/mysql/mariadb.conf.d/50-server.cnf
 +Décommenter la ligne
 +  log_bin                = /var/log/mysql/mysql-bin.log
 +et restarter mariaDB
 +  systemctl restart mariadb.service
 +
 +
 +Vos fichiers de log binaires sont maintenant stocké dans /var/log/mysql/
 +
 +**mysqlbinlog** permet de lire les fichiers de log binaire et de générer une sortie sql
 +<code>
 +# mysqlbinlog mysql-bin.000001 
 +mysqlbinlog: unknown variable 'default-character-set=utf8mb4'
 +
 +---------- Si vous avez ce message d'erreur, utilisez l'option suivante
 +
 +# mysqlbinlog --no-defaults mysql-bin.000001 
 +</code>
 +
 +Filtre possible:
 +  * ''--database=ma_base''  ou ''-d ma_base''
 +  * ''--start-datetime="2019-09-09 12:15:00"''  supérieur ou égal à cette date
 +  * ''--stop-datetime="2019-12-24 13:15:00"''   inférieur à cette date
 +  * ''--start-position=N''   commence à la position N
 +  * ''--stop-position=N''  s'arrête à la position N
 +
 +example de restauration
 +  mysqlbinlog /var/log/mysql/mysql-bin.[0-9]* | mysql -u root -p
 +
 +  mysqlbinlog --no-defaults --start-datetime="2019-09-09 12:15:00" /var/log/mysql/mysql-bin.[0-9]* | mysql -u root -p
 +
 +Par défaut, mysql s'arrête dès la 1ère erreur (par ex: duplicate entry), pour continuer après une erreur, ajouté l'option -f
 +
 +  mysqlbinlog --no-defaults --start-datetime="2019-09-09 12:15:00" /var/log/mysql/mysql-bin.[0-9]* | mysql -u root -p -f
 +
 +===== 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;
 +</code>
 +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;
 +</code>
 +
 +Si votre id est utilisé dans d'autres tables, il convient de définir les clés étrangères sur les autres tables avec l'option ''ON UPDATE CASCADE'' plutot que l'option par défaut ''ON UPDATE NO ACTION''
 +
 +<code sql>
 +SET @count = 0;
 +UPDATE `users` SET `users`.`id` = @count:= @count + 1;
 +ALTER TABLE `users` AUTO_INCREMENT = 1;
 +</code>
linux/mysql.txt · Dernière modification: 14-02-2023 11:39 de edmc73