Чи безпечно видаляти файли mysql-bin?


92

У мене є реплікація MM в mysql, і я хочу видавити трохи вільного місця в полі, видаляючи непотрібні файли, я натрапив на ці mysql-binфайли всередині. /var/db/mysql/Є сотні таких файлів, як mysql-bin.000123і mysql-bin.000223т. Д. Я перевірив реплікацію mysql, роблячи, show master statusі show slave statusвони є використовуючи деякі файли mysql-bin у певних положеннях, але я думаю, що всі інші файли бін - це залишки, які більше не використовуватимуться. Чи безпечно в цьому випадку видалити всі файли mysql-bin, крім тих, на які наразі вказується реплікація?

Якщо безпечно видалити, чи є щось, що я міг би зробити, щоб автоматично видалити ці файли, коли вони не використовуються?

Відповіді:


136

Будь ласка, не просто видаляйте їх в ОС.

Вам потрібно дозволити mysqld зробити це за вас. Ось як управляє mysqld:

У файлі mysql-bin.[index]зберігається список усіх двійкових журналів, які mysqld генерував та автоматично обертав. Механізми очищення бінлогів спільно з mysql-bin.[index]:

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

Вони очистять усі бінарні журнали перед вказаним вами бінгом або часовою позначкою.

Наприклад, якщо ти біжиш

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

це видалить усі бінарні журнали раніше mysql-bin.000223.

Якщо ти біжиш

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

це видалить усі бінарні журнали до півночі 3 дні тому.

Якщо ви хочете, щоб бінлог автоматично обертався та тривав 3 дні, просто встановіть це:

mysql> SET GLOBAL expire_logs_days = 3;

потім додайте це до /etc/my.cnf

[mysqld]
expire_logs_days=3

і mysqld видалить їх для вас

ПОКАЗНІТЬ СТАТУС РОБОТИ \ G

Це критично. Під час запуску SHOW SLAVE STATUS\Gви побачите два двійкові журнали від Master:

  • Master_Log_File
  • Relay_Master_Log_File

Якщо реплікація має невеликий або зовсім відсутній відставання, вони зазвичай мають однакове значення. Коли затримка реплікації багато, ці значення відрізняються. Щоб зробити це просто, виберіть все, що Relay_Master_Log_Fileє, і поверніться до Майстра та біжіть

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

Таким чином реплікація не переривається.


1
Зверніть увагу на друкарські помилки - підкреслення, а не тире: [mysqld] expire_logs_days=3(і ви повинні включити [mysqld]розділ
Чангокун

@changokun Це не помилка. my.cnf прийме тире. Запуск SET GLOBAL expire_logs_days = 3;від mysql клієнта не прийме їх. Приклад в документах MySQL: dev.mysql.com/doc/refman/5.5/uk/mysqld-option-tables.html
RolandoMySQLDBA

Це працює для мене. Питання, в чому різниця між ... mysql> SET GLOBAL expire_logs_days = 3;і expire-logs-days=3в /etc/my.cnf.. Чи однакові вони? Це зайве чи ні? Або важливо запустити SET GLOBAL...потім додати expire-logs-days=..? Дякую.
Ніно Паоло

Швидко видаліть усі журнали, очевидно: PURGE BINARY LOGS BEFORE DATE(NOW());чому для цього немає здорових стандартних параметрів? У мене ніде, ніколи експліцитність не змінювала розмір файлу журналу на якусь гігантську суму. У мене було 10,0 ГБ файлів журналів, після запуску цієї команди розмір папки mysql.bin скоротився до 1,6 Гб.
Майкл Трув

20

Це дійсно залежить від вашої стратегії резервного копіювання. Однією з головних причин для збереження бінарних журналів є відновлення вашої бази даних "момент часу". Якщо ваша база даних виходить з ладу і вимагає відновлення, ви відновите останню повну резервну копію, а потім відтворите двійкові журнали, починаючи з положення повної резервної копії.

Отже, якщо ви робите повне резервне копіювання кожного дня, і у вас є двійкові журнали, які варті 7 днів, цілком ймовірно, що ви можете видалити бінарні журнали вартістю за останні 4-6 днів. Ви можете контролювати, скільки днів бінарних журналів ведеться за допомогою expire_logs_daysналаштування.

Ви можете видалити бінарні журнали, які вам не потрібні, попередньо побачивши, який найдавніший журнал ви хочете зберегти:

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

а потім у mysql:

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

4

Спробуйте це:

RESET MASTER;

як зазначено в документі :

RESET MASTER дозволяє видалити будь-які файли бінарних журналів та пов’язані з ними файли індексів двійкового журналу, повертаючи майстер у свій стан до початку бінарного журналу.

Це видалить усі пов’язані файли бінарних журналів, які можуть не мати те, що потрібно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.