it-swarm.asia

هل من الآمن حذف ملفات mysql-bin؟

لدي MM Replication في الخلية ، وأريد الضغط على بعض المساحة الحرة في الصندوق لحذف الملفات غير الضرورية ، جئت عبر هذه mysql-bin ملفات داخل /var/db/mysql/ هناك المئات من تلك الملفات مثل mysql-bin.000123 ، mysql-bin.000223 إلخ. راجعت النسخ المتماثل الخلية عن طريق القيام show master status و show slave status إنهم يستخدمون بعض ملفات mysql-bin في مواقع معينة ، ولكن أعتقد أن جميع ملفات bin الأخرى هي بقايا والتي لن يتم استخدامها بعد الآن. في هذه الحالة ، هل من الآمن حذف جميع ملفات mysql-bin باستثناء الملفات التي يشير النسخ المتماثل إليها حاليًا؟

إذا كان من الآمن حذفه ، فهل هناك أي شيء يمكنني القيام به تلقائيًا حذف هذه الملفات بمجرد عدم استخدامها؟

100
user18530

يرجى عدم حذفها فقط في نظام التشغيل.

تحتاج إلى السماح لـ mysqld بالقيام بذلك نيابة عنك. إليك كيفية إدارة الخلية:

الملف mysql-bin.[index] يحتفظ بقائمة بجميع السجلات الثنائية التي أنشأها mysqld وتدويرها تلقائيًا. آليات تنظيف المنابر بالتزامن مع mysql-bin.[index] هم:

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

سيؤدي هذا إلى محو جميع السجلات الثنائية قبل binlog أو الطابع الزمني الذي حددته للتو.

على سبيل المثال ، إذا قمت بتشغيل

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

سيؤدي هذا إلى محو جميع السجلات الثنائية قبل mysql-bin.000223.

اذا ركضت

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

سيؤدي هذا إلى محو جميع السجلات الثنائية قبل منتصف ليل 3 أيام.

إذا كنت تريد تدوير binlog تلقائيًا والحفاظ على 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';

بهذه الطريقة ، لا ينقطع النسخ المتماثل.

148
RolandoMySQLDBA

هذا يعتمد حقًا على استراتيجية النسخ الاحتياطي الخاصة بك. أحد الأسباب الرئيسية للاحتفاظ بالسجلات الثنائية هو استعادة قاعدة البيانات الخاصة بك إلى "نقطة زمنية". إذا تعطلت قاعدة البيانات الخاصة بك وتطلبت الاستعادة ، فستستعيد أحدث نسخة احتياطية كاملة ، ثم تقوم بتشغيل السجلات الثنائية بدءًا من موضع النسخ الاحتياطي الكامل.

لذلك ، إذا كنت تقوم بعمل نسخة احتياطية كاملة كل يوم ولديك 7 أيام من السجلات الثنائية ، فمن المحتمل أنه يمكنك حذف 4-6 أيام الماضية من السجلات الثنائية. يمكنك التحكم في عدد الأيام التي يتم الاحتفاظ فيها بالسجلات الثنائية باستخدام expire_logs_days ضبط.

يمكنك حذف السجلات الثنائية التي لا تحتاج إليها من خلال الاطلاع أولاً على أقدم سجل تريد الاحتفاظ به:

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

ثم في الخلية:

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

جرب هذا:

RESET MASTER;

كما قال المستند :

يمكّنك RESET MASTER من حذف أي ملفات سجل ثنائية وملف فهرس السجل الثنائي المرتبط بها ، مما يعيد الرئيسي إلى حالته قبل بدء التسجيل الثنائي.

سيؤدي هذا إلى حذف جميع ملفات السجلات الثنائية ذات الصلة ، والتي قد لا تريدها.

6
Xiaofeng