Maison > Article > base de données > Comment restaurer le journal MySQL
Méthode de récupération du journal MySQL : spécifiez d'abord l'heure de récupération, le code est [mysqlbinlog --stop-date=""] puis spécifiez l'emplacement de récupération, le code est [mysqlbinlog --start-date="" 2020-10-09 9:55:00"].
Méthode de récupération du journal MySQL :
Pour récupérer les données du journal binaire, vous devez connaître le binaire actuel log Le chemin et le nom du fichier. Le chemin peut généralement être trouvé à partir du fichier d'options (c'est-à-dire my.cnf ou my.ini, selon votre système). S'il n'est pas inclus dans le fichier d'options, il peut être donné en option sur la ligne de commande au démarrage du serveur. L'option pour activer la journalisation binaire est --log-bin. Pour déterminer le nom de fichier du fichier journal binaire actuel, saisissez l'instruction MySQL suivante :
SHOW BINLOG EVENTS /G
Vous pouvez également saisir ce qui suit à partir de la ligne de commande :
mysql --user=root -pmy_pwd -e 'SHOW BINLOG EVENTS /G'
Remplacez le mot de passe my_pwd par la racine du serveur. mot de passe.
1. Spécifiez l'heure de récupération
Pour MySQL 4.1.4, vous pouvez spécifier l'heure de début et de fin au format DATETIME via les options --start-date et --stop-date dans l'instruction mysqlbinlog. Par exemple, supposons qu'à 10h00 ce matin (nous sommes aujourd'hui le 20 avril 2006), exécutez une instruction SQL pour supprimer une table volumineuse. Pour restaurer les tables et les données, vous pouvez restaurer la sauvegarde de la nuit précédente et saisir :
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 / mysql -u root -pmypwd
Cette commande restaurera toutes les sauvegardes jusqu'à la date et l'heure indiquées dans l'option --stop-date dans les données au format DATETIME. Si vous ne détectez pas d'instruction SQL incorrecte saisie plusieurs heures plus tard, vous souhaiterez peut-être reprendre l'activité qui s'est produite plus tard. Sur cette base, vous pouvez réexécuter mysqlbinlog avec la date et l'heure :
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 / mysql -u root -pmypwd /
Dans cette ligne, l'instruction SQL enregistrée à partir de 10h01 sera exécutée. La combinaison du fichier de vidage de la veille de l'exécution et de deux lignes de mysqlbinlog peut restaurer toutes les données une seconde avant 10h00. Vous devez vérifier les journaux pour vous assurer que les heures sont exactes. La section suivante explique comment procéder.
2. Spécifiez l'emplacement de récupération
Vous pouvez également utiliser les options mysqlbinlog --start-position et --stop-position pour spécifier l'emplacement du journal sans spécifier la date et l'heure. Elles ont le même effet que les options de date de début et de fin, sauf qu'elles donnent un numéro de position issu du journal. L'utilisation des emplacements de journaux constitue une méthode de récupération plus précise, en particulier lorsque de nombreuses transactions se produisent simultanément en raison d'instructions SQL destructrices. Pour déterminer le numéro de position, vous pouvez exécuter mysqlbinlog pour trouver la plage de temps dans laquelle la transaction inattendue a été effectuée, mais rediriger les résultats vers un fichier texte pour inspection. La méthode de fonctionnement est :
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" / /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
Cette commande créera un petit fichier texte dans le répertoire /tmp et affichera l'instruction SQL lorsqu'une mauvaise instruction SQL est exécutée. Vous pouvez ouvrir le fichier avec un éditeur de texte et rechercher les déclarations que vous ne souhaitez pas répéter. Les numéros de position dans le journal binaire doivent être commentés s'ils sont utilisés pour arrêter et poursuivre les opérations de récupération. Utilisez log_pos plus un nombre pour marquer la position. Après avoir restauré le fichier de sauvegarde précédent à l'aide du numéro de position, vous devez saisir ce qui suit à partir de la ligne de commande :
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 / mysql -u root -pmypwd mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 / mysql -u root -pmypwd /
La ligne 1 ci-dessus restaurera toutes les transactions jusqu'au point où elle a été arrêtée. La ligne suivante restaurera toutes les transactions depuis la position de départ donnée jusqu'à la fin du journal binaire. Étant donné que la sortie de mysqlbinlog inclut l'instruction SET TIMESTAMP avant que chaque instruction SQL ne soit enregistrée, les données récupérées et les journaux MySQL associés refléteront l'heure d'origine de l'exécution de la transaction.
1. La base de données MySQL ne dispose pas de mécanisme de sauvegarde incrémentielle. Lorsque la quantité de données est trop importante, la sauvegarde est un gros problème. Heureusement, la base de données MySQL fournit un mécanisme de sauvegarde maître-esclave, qui écrit simultanément toutes les données de la base de données maître dans la base de données de sauvegarde. Implémentez une sauvegarde à chaud de la base de données MySQL.
2. Afin de réaliser une sauvegarde à chaud de deux machines, vous devez d'abord comprendre les exigences relatives aux versions des serveurs de base de données maître et esclave. Pour obtenir une veille chaude, la version de MySQL doit être supérieure à 3.2. Un autre principe de base est que la version de la base de données esclave peut être supérieure à la version de la base de données du serveur maître, mais elle ne peut pas être inférieure à la version de la base de données du serveur maître.
3. Configurez le serveur de base de données principal :
a. Vérifiez d'abord si la version du serveur principal prend en charge la veille chaude. Vérifiez ensuite si la configuration du bloc de configuration mysqld dans my.cnf (de type Unix) ou my.ini (windows) a un log-bin (enregistrement du journal des modifications de la base de données). Parce que le mécanisme de réplication de mysql est un mécanisme de réplication basé sur les journaux). , le serveur principal doit Il nécessite la prise en charge des journaux de modifications. Définissez ensuite la base de données dans laquelle le journal doit être écrit ou la base de données dans laquelle le journal ne doit pas être écrit. De cette façon, seules les modifications apportées à la base de données qui vous intéressent sont écrites dans le journal de la base de données.
server-id=1 //L'ID de la base de données doit être 1 par défaut et il n'est pas nécessaire de le changer
log-bin=log_name //Le nom de le fichier journal, vous pouvez spécifier le journal ici. Si d'autres répertoires ne sont pas définis, un nom de journal du nom d'hôte par défaut
binlog-do-db=db_name //Base de données pour l'enregistrement des journaux
binlog-ignore-db=db_name //Aucun enregistrement de la base de données du journal
S'il y a plusieurs bases de données ci-dessus, séparez-les par ",", puis définissez le compte utilisateur pour synchroniser la base de données
mysql> ; ACCORDER UN ESCLAVE DE RÉPLICATION SUR *.*
-> À
[email='repl'@'%.mydomain.com']'repl'@'%.mydomain.com' [/e-mail]
IDENTIFIED BY 'slavepass';
4.0.2 以前的版本, 因为不支持 REPLICATION 要使用下面的语句来实现这个功能
mysql> GRANT FILE ON *.*
-> TO
[email='repl'@'%.mydomain.com']'repl'@'%.mydomain.com'[/email]
IDENTIFIED BY 'slavepass';
设置好主服务器的配置文件后重新启动数据库
b.锁定现有的数据库并备份现在的数据
锁定数据库
mysql> FLUSH TABLES WITH READ LOCK;
备份数据库有两种办法一种是直接进入到 mysql 的 data 目录然后打包你需要备份数据库的文件夹,第二种是使用 mysqldump 的方式来备份数据库但是要加上"--master-data " 这个参数,建议使用第一种方法来备份数据库.
解除表的锁定的方法:
unlock tables;
c.查看主服务器的状态
mysql> show master statusG;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
记录 File 和 Position 项目的值,以后要用的。
相关免费学习推荐:mysql数据库(视频)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!