Lorsque le serveur MySQL démarre, il vérifie les opérations sur sa ligne de commande pour voir s'il doit effectuer une connexion et ouvre le fichier journal approprié (si c'est le cas). Vous pouvez demander au serveur de générer deux types principaux de fichiers journaux : Fichiers journaux normaux. Il signale les connexions client, les requêtes et divers autres événements. Lorsque le serveur MySQL démarre, il vérifie les opérations sur sa ligne de commande pour voir s'il doit effectuer une connexion et ouvre le fichier journal approprié (si c'est le cas). Vous pouvez demander au serveur de générer deux types principaux de fichiers journaux : Fichiers journaux normaux. Il signale les connexions client, les requêtes et divers autres événements. C'est utile pour suivre l'activité du serveur : qui se connecte, d'où et ce qu'ils font.
Journal des modifications
Il rapporte les requêtes qui modifient la base de données. Le terme « mise à jour » dans ce contexte fait référence non seulement aux instructions UPDATE, mais à toutes les instructions qui modifient la base de données. Pour cette raison, il contient des enregistrements de requête pour DELETE, INSERT, REPLACE, CREATE TABLE, DROP TABLE, GRANT et REVOKE. Le contenu du journal de mise à jour est écrit sous forme d'instructions SQL, qui sont utilisées comme entrée dans MySQL. Les journaux de mise à jour et les sauvegardes sont utiles si la table doit être restaurée après un crash. Vous pouvez restaurer la base de données à partir d'un fichier de sauvegarde, puis réexécuter toutes les requêtes qui ont modifié la base de données après ce fichier de sauvegarde en utilisant le journal de mise à jour comme entrée dans MySQL. Cela restaure la table dans son état au moment du crash.
Pour rendre les journaux efficaces, utilisez l'option --log pour activer la journalisation régulière et l'option --log-update pour activer la journalisation des mises à jour. Ces options peuvent être spécifiées sur la ligne de commande dans mysqld.safe_mysqld ou mysql.server, ou dans le groupe [mysqld] d'une option. Lorsque la journalisation est activée, les fichiers journaux sont écrits par défaut dans le répertoire de données du serveur.
L'auteur recommande que les deux types de journaux soient valides lors de la première utilisation de MySQL. Après avoir acquis une certaine expérience avec MySQL, vous pourriez être tenté d'utiliser simplement le journal de mise à jour pour réduire les besoins en espace disque.
Après avoir activé la journalisation, veillez à ne pas remplir le disque avec une grande quantité d'informations de journal, surtout si le serveur gère un grand nombre de requêtes. La rotation et les délais d'expiration des fichiers journaux peuvent être utilisés pour empêcher la croissance illimitée des fichiers journaux tout en conservant les journaux les plus récents disponibles en ligne.
La rotation des fichiers journaux fonctionne comme suit. Supposons que le fichier journal s'appelle log. Dans la première boucle, log est renommé log 0 et le serveur commence à écrire un nouveau fichier journal. Dans la deuxième boucle, log.0 est renommé log.1, log est renommé log.0 et le serveur commence à écrire un autre nouveau fichier journal. De cette façon, chaque fichier parcourt les noms log 0, log 1, etc. Lorsque le fichier atteint un certain point dans la boucle, il peut être terminé.
Journaux de mise à jour et instructions LOAD DATA
Normalement, lorsque le serveur exécute une instruction LOAD DATE, il écrit uniquement l'instruction elle-même, et non le contenu de la ligne chargée, dans le journal de mise à jour. Cela signifie que les opérations de récupération utilisant le journal de mise à jour seront incomplètes à moins que les fichiers de données restent accessibles. Pour garantir la sécurité, les fichiers de données ne doivent pas être supprimés à moins que la base de données n'ait été sauvegardée.
Sauvegarde du système
Les journaux de mise à jour ne sont pas toujours utiles pour la récupération de bases de données, et si une panne de disque vous fait perdre vos journaux de mise à jour, assurez-vous d'effectuer régulièrement des sauvegardes du système de fichiers. C'est également une bonne idée d'écrire le journal de mise à jour sur un disque différent de celui sur lequel la base de données est stockée.
Par exemple, si vous parcourez les journaux tous les jours et souhaitez conserver les journaux pendant une semaine, vous conserverez log.0 à log.6. Dans la boucle suivante, log.6 se terminera en laissant log.5 écraser log.6 pour devenir le nouveau log.6. De cette façon, vous pouvez conserver de nombreux journaux sans dépasser la limite du disque.
La fréquence de rotation des journaux et le nombre d'anciens journaux conservés dépendront de l'occupation du serveur (les serveurs actifs produisent plus de messages de journal) et de la quantité d'espace disque que vous souhaitez consacrer aux anciens journaux. Lors de la rotation des journaux réguliers, vous pouvez utiliser la commande mysqla d - min flush-logs pour indiquer au serveur de fermer le fichier journal actuel et d'ouvrir un nouveau fichier journal.
Un script pour effectuer une rotation régulière des journaux ressemblerait à ceci (cela peut être modifié pour refléter le nom de votre base de journaux et l'emplacement de votre répertoire de données, et peut-être le nombre d'anciens journaux que vous souhaitez conserver) :
Il est préférable d'exécuter ce script à partir du compte mysqladm pour garantir que les fichiers journaux appartiennent à cet utilisateur. Si vous laissez les paramètres de connexion dans le fichier d'options .my.cnf, vous n'avez pas besoin de spécifier de paramètres dans la commande mysqladmin du script. Si vous ne le faites pas, vous pouvez créer un utilisateur restreint qui ne fait rien d'autre qu'émettre des commandes d'actualisation. Le mot de passe de cet utilisateur peut ensuite être placé dans le script avec un risque minimal. Si vous souhaitez faire cela, l'utilisateur ne doit disposer que des autorisations RELOAD. Par exemple, pour appeler le vidage de l'utilisateur et attribuer un mot de passe, fl us h pass, utilisez l'instruction GRANT suivante :
ACCORDER LE RECHARGEMENT SUR *.* À flush@localhost IDENTIFIÉ PAR "flushpass"
Lorsque vous devez effectuer une opération d'actualisation dans un script, vous pouvez procéder comme suit :
mysqladmin -ufush -pflushpass flush -logs
Sous Linux, il est préférable d'utiliser logrotate pour installer le script mysql-log-rotate dans le package de distribution MySQL plutôt que d'écrire le script vous-même. Si mysql-log-rotate n'est pas installé automatiquement via un fichier RPM, vous devez vérifier le répertoire support-files du package de distribution MySQL.
En raison des différences dans la manière dont les serveurs gèrent les fichiers journaux de mise à jour, la rotation des fichiers journaux diffère légèrement entre les journaux de mise à jour et les journaux normaux. Si vous demandez au serveur d'utiliser un nom de fichier journal de mise à jour sans extension (comme up date), le serveur créera automatiquement des noms de fichier journal de mise à jour en utilisant la séquence up date 0 0 1, update.002, etc. Un nouveau journal de mise à jour est généré au démarrage du serveur et lorsque le journal est actualisé. Si vous activez la journalisation des mises à jour sans spécifier de nom de fichier, le serveur génère une séquence de fichiers journaux de mise à jour en utilisant le nom d'hôte comme nom de base.
Lorsque vous terminez une séquence de fichiers générés de cette manière, vous souhaiterez peut-être les terminer en fonction de leur âge (l'heure à laquelle ils ont été modifiés pour la dernière fois) plutôt que par leur nom. La raison en est que puisque vous ne savez pas quand la commande flush-log sera émise, vous ne pouvez pas vous attendre à créer un nombre fixe de journaux de mise à jour au cours d'une période donnée. Par exemple, si vous sauvegardez une table avec mysqldump et utilisez l'option --flush-logs, un nouveau fichier dans cette séquence de noms de journaux de mise à jour est créé à chaque sauvegarde.
Pour les journaux de mise à jour avec des noms de fichiers séquentiels générés automatiquement par le serveur, le script de terminaison basé sur l'âge des journaux ressemble à ceci :
La commande find localise et supprime les fichiers journaux de mise à jour modifiés il y a plus d'une semaine. Il est important d'utiliser le paramètre -name pour tester une extension de fichier numérique afin d'éviter de supprimer les tables spécifiées par une mauvaise mise à jour.
Vous pouvez également demander au serveur d'utiliser un nom de fichier journal de mise à jour fixe (si vous le souhaitez), ce qui est utile si vous souhaitez parcourir le journal de mise à jour de la même manière qu'un journal normal. Pour utiliser un nom de journal de mise à jour fixe, spécifiez un nom incluant une extension. Par exemple, vous pouvez démarrer le serveur avec l'option --log-update=update.log pour utiliser le nom up date .log. Le serveur s'arrêtera toujours et ouvrira le journal lors de la réception de la commande flush-logs, mais le serveur ne générera pas de nouveaux fichiers à chaque fois. Dans ce cas, le script de rotation du journal pour le journal de mise à jour et le script pour le journal normal diffèrent uniquement par le nom de base du fichier de rotation.
Si vous souhaitez automatiser la rotation et la terminaison des journaux, utilisez cron. Il est supposé que les scripts pour la rotation des journaux réguliers et des journaux de mise à jour sont les journaux de rotation et de mise à jour des journaux et sont installés dans le répertoire /usr/user/mysql/bin. Enregistrez-vous en tant qu'utilisateur mysqlladm, puis utilisez la commande suivante pour modifier le fichier crontab de l'utilisateur mysqladm : % crontab -e
Cette commande permet d'éditer la sauvegarde du fichier crontab actuel (elle peut être vide si cela n'a pas été fait précédemment). Ajoutez des lignes au fichier comme suit :
Cette entrée indique à cron d'exécuter ce script tous les matins à 4 heures du matin. Vous pouvez modifier l'heure ou la programmer selon vos besoins. Consultez la page de manuel de crontab pour obtenir des instructions.
-