web-dev-qa-db-fra.com

Est-il sûr de supprimer des fichiers mysql-bin?

J'ai la réplication MM dans mysql, et je veux compresser de l'espace libre dans la boîte en supprimant les fichiers inutiles, je suis tombé sur ces mysql-bin fichiers à l'intérieur /var/db/mysql/ Il y a des centaines de ces fichiers comme mysql-bin.000123, mysql-bin.000223 etc. J'ai vérifié la réplication mysql en faisant show master status et show slave status ils utilisent des fichiers mysql-bin à certaines positions, mais je suppose que tous les autres fichiers bin sont restes qui ne seront plus utilisés. Dans ce cas, est-il sûr de supprimer tous ces fichiers mysql-bin, à l'exception de ceux vers lesquels pointe la réplication?

Si la suppression est sûre, puis-je faire quoi que ce soit pour automatiquement supprimer ces fichiers une fois qu'ils ne sont pas utilisés?

100
user18530

Veuillez ne pas simplement les supprimer dans le système d'exploitation.

Vous devez laisser mysqld le faire pour vous. Voici comment mysqld le gère:

Le fichier mysql-bin.[index] conserve une liste de tous les journaux binaires que mysqld a générés et tournés automatiquement. Les mécanismes de nettoyage des binlogs conjointement avec mysql-bin.[index] sont:

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

Ceux-ci effaceront tous les journaux binaires avant le binlog ou l'horodatage que vous venez de spécifier.

Par exemple, si vous exécutez

PURGE BINARY LOGS TO 'mysql-bin.000223';

cela effacera tous les journaux binaires avant mysql-bin.000223.

Si vous courez

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;

cela effacera tous les journaux binaires avant minuit il y a 3 jours.

Si vous souhaitez que binlog soit automatiquement pivoté et conserver 3 jours, définissez simplement ceci:

mysql> SET GLOBAL expire_logs_days = 3;

puis ajoutez ceci à /etc/my.cnf

[mysqld]
expire_logs_days=3

et mysqld supprimera les journaux pour vous

AFFICHER LE STATUT DES ESCLAVES\G

C'est critique. Lorsque vous exécutez SHOW SLAVE STATUS\G, vous verrez deux journaux binaires du maître:

  • Master_Log_File
  • Relay_Master_Log_File

Lorsque la réplication a peu ou pas de décalage, ce sont généralement la même valeur. Lorsqu'il y a beaucoup de retard de réplication, ces valeurs sont différentes. Juste pour faire simple, choisissez ce que Relay_Master_Log_File est, et retournez au maître et exécutez

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

De cette façon, la réplication n'est pas interrompue.

148
RolandoMySQLDBA

Cela dépend vraiment de votre stratégie de sauvegarde. L'une des principales raisons de conserver les journaux binaires est de restaurer votre base de données à un "point dans le temps". Si votre base de données tombe en panne et nécessite une restauration, vous devez restaurer la dernière sauvegarde complète, puis lire les journaux binaires en commençant par la position de la sauvegarde complète.

Donc, si vous effectuez une sauvegarde complète tous les jours et que vous disposez de 7 jours de journaux binaires, il est probable que vous puissiez supprimer les 4 à 6 derniers jours de journaux binaires. Vous pouvez contrôler combien de jours de journaux binaires sont conservés avec le expire_logs_days réglage.

Vous pouvez supprimer les journaux binaires dont vous n'avez pas besoin en voyant d'abord le journal le plus ancien que vous souhaitez conserver:

ls -lh /path/to/binary/logs/mysql-bin.0*

puis dans mysql:

mysql> PURGE BINARY LOGS TO 'mysql-bin.XXXXX';
22
Derek Downey

Essaye ça:

RESET MASTER;

comme le dit document :

RESET MASTER vous permet de supprimer tous les fichiers journaux binaires et leur fichier d'index de journaux binaire associé, remettant le maître dans son état avant le démarrage de la journalisation binaire.

Cela supprimera tous les fichiers journaux binaires associés, qui peuvent ne pas être ce que vous voulez.

6
Xiaofeng