it-swarm.asia

كيف أقوم بتغيير متغير MySQL innodb "innodb_log_file_size"؟

لذا فأنا جديد تمامًا على ضبط InnoDB. أقوم بتغيير الجداول ببطء (عند الضرورة) من MyIsam إلى InnoDB. لقد حصلت على حوالي 100 ميجا بايت في Innodb ، لذلك قمت بزيادة innodb_buffer_pool_size متغير إلى 128 ميجابايت:

mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)

عندما ذهبت لتغيير innodb_log_file_size القيمة (مثال my.cnf على صفحة تكوين innodb الخاصة بـ mysql التعليقات لتغيير حجم ملف السجل إلى 25٪ من حجم المخزن المؤقت. لذا يبدو my.cnf الآن كما يلي:

# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M

عند إعادة تشغيل الخادم ، أحصل على هذا الخطأ:

110216 9:48:41 InnoDB: تهيئة تجمع المخزن المؤقت ، الحجم = 128.0M
110216 9:48:41 InnoDB: تم الانتهاء من تهيئة تجمع المخزن المؤقت
InnoDB: خطأ: ملف السجل ./ib_logfile0 بحجم مختلف 0 5242880 بايت
InnoDB: مما هو محدد في ملف .cnf 0 33554432 بايت!
110216 9:48:41 [خطأ] وظيفة الحرف المساعد 'InnoDB' عادت الخطأ.
110216 9:48:41 [خطأ] فشل تسجيل البرنامج المساعد 'InnoDB' كمحرك تخزين.

لذا سؤالي: هل من الآمن حذف ملفات السجل القديمة ، أم أن هناك طريقة أخرى لتغيير innodb_log_file_size متغير؟

108
Derek Downey

نعم ، من الآمن حذف ملف السجل بمجرد إيقاف تشغيل mysqld

في ضوء ذلك ، ما عليك سوى تنفيذ الخطوات التالية:

mysql -uroot -p... -e"SET GLOBAL innodb_fast_shutdown = 0"
service mysql stop
mv /var/lib/mysql/ib_logfile[01] /tmp
service mysql start

بدء الخلية سوف يعيد إنشاء ib_logfile0 و ib_logfile1

جربها !!!

تحديث 2011-10-20 16:40 بتوقيت شرق الولايات المتحدة

يعمل على تنظيف جميع البيانات الموجودة في InnoDB Buffer Pool قبل إعادة ملفات السجل ، يجب عليك تعيين هذا الخيار قبل ساعة واحدة من إيقاف التشغيل:

SET GLOBAL innodb_max_dirty_pages_pct = 0;

بشكل افتراضي ، innodb_max_dirty_pages_pct = 75 (MySQL 5.5+) أو 90 (قبل MySQL 5.5). يؤدي تعيين هذا على صفر إلى الحفاظ على عدد الصفحات المتسخة أقل من 1٪ من InnoDB Buffer Pool. أداء service mysql stop يفعل هذا على أي حال. بالإضافة إلى ذلك ، سيتم إنهاء أي عناصر متبقية في سجل الإعادة. للاحتفاظ بهذا الخيار ما عليك سوى إضافته إلى /etc/my.cnf:

[mysqld]
innodb_max_dirty_pages_pct = 0

تحديث 2013-04-19 16:16 بتوقيت شرق الولايات المتحدة

لقد قمت بتحديث إجابتي أكثر بقليل باستخدام innodb_fast_shutdown لأنني اعتدت على إعادة تشغيل الخلية وإيقاف الخلية للقيام بذلك. الآن ، هذه الخطوة الواحدة ضرورية لأن كل معاملة غير ملتزمة قد تحتوي على أجزاء متحركة أخرى داخل وخارج سجلات معاملات InnoDB ( راجع البنية التحتية لـ InnoDB ).

يرجى ملاحظة أن إعداد innodb_fast_shutdown إلى 2 سيؤدي إلى تنظيف عمليات تسجيل الخروج أيضًا ولكن لا يزال هناك المزيد من الأجزاء المتحركة ويتم التقاطها في Crash الانتعاش أثناء بدء الخلية. من الأفضل تحديد 0.

86
RolandoMySQLDBA

أوصي بدلاً من ذلك بـ الطريقة الرسمية ، والتي أعيد إنتاجها هنا من أجل الراحة:

لتغيير عدد أو حجم ملفات سجل InnoDB في MySQL 5.6.7 أو أقدم ، استخدم الإرشادات التالية. يعتمد الإجراء المستخدم على قيمة innodb_fast_shutdown ، التي تحدد ما إذا كان سيتم تحديث مساحة جداول النظام بالكامل قبل عملية إيقاف التشغيل أم لا:

  • إذا لم يتم تعيين innodb_fast_shutdown على 2: أوقف خادم MySQL وتأكد من إيقاف تشغيله بدون أخطاء ، للتأكد من عدم وجود معلومات للمعاملات المعلقة في سجل الإعادة. انسخ ملفات سجل الإعادة القديمة إلى مكان آمن ، في حالة حدوث خطأ ما أثناء الإغلاق وتحتاج إليها لاستعادة مساحة الطاولة. احذف ملفات السجل القديمة من دليل ملف السجل ، وقم بتحرير my.cnf لتغيير تكوين ملف السجل ، وابدأ خادم MySQL مرة أخرى. يرى mysqld عدم وجود ملفات سجل InnoDB عند بدء التشغيل وإنشاء ملفات جديدة.

  • إذا تم ضبط innodb_fast_shutdown على 2: اضبط innodb_fast_shutdown على 1:

mysql> SET GLOBAL innodb_fast_shutdown = 1;

ثم اتبع التعليمات الموجودة في البند السابق.

اعتبارًا من MySQL 5.6.8 ، لم يعد إعداد innodb_fast_shutdown ملائمًا عند تغيير عدد ملفات سجل InnoDB أو حجمها. بالإضافة إلى ذلك ، لم تعد مطالبًا بإزالة ملفات السجل القديمة ، على الرغم من أنك قد لا تزال ترغب في نسخ ملفات السجل القديمة إلى مكان آمن ، كنسخة احتياطية. لتغيير عدد أو حجم ملفات سجل InnoDB ، اتبع الخطوات التالية:

  1. أوقف خادم MySQL وتأكد من إيقاف تشغيله دون أخطاء.

  2. قم بتحرير my.cnf لتغيير تكوين ملف السجل. لتغيير حجم ملف السجل ، قم بتكوين innodb_log_file_size. لزيادة عدد ملفات السجل ، قم بتكوين innodb_log_files_in_group.

  3. قم بتشغيل خادم MySQL مرة أخرى.

إذا اكتشف InnoDB أن Innodb_log_file_size يختلف عن حجم ملف سجل الإعادة ، فسيتم كتابة نقطة تحقق للسجل ، وإغلاق ملفات السجل القديمة وإزالتها ، وإنشاء ملفات سجل جديدة بالحجم المطلوب ، وفتح ملفات السجل الجديدة.

31
RandomSeed

innodb_buffer_pool_size - ببساطة تغيير my.cnf (my.ini) وإعادة تشغيل الخلية.

innodb_log_file_size أقل أهمية. لا تغيره إلا إذا كان هناك سبب لذلك. Roland بشرط الخطوات ، ولكن جانب واحد يقلقني ... لا أعرف ما إذا كانت الخطوتان الأوليان مهمتان ؛ يبدو أنها يمكن أن تكون:

  1. set innodb_fast_shutdown = OFF
  2. إعادة تشغيل الخلية
  3. توقف الخلية
  4. إزالة ملفات السجل
  5. بدء الخلية

تتبع ملفات السجل الأعمال التي لم تكتمل ؛ " innodb_fast_shutdown "للتعامل مع هذه الأشياء after إعادة التشغيل. لذا قد تؤدي إزالة الملفات إلى فقدان المعلومات؟

الإصدارات الجديدة لها أشياء محسنة: (المزيد من المناقشة في التعليقات)

  • 5.6 يسمح بـ innodb_log_file_size> 4 جيجابايت
  • 5.6 innodb_log_file_size يمكن تغييره دون إزالة iblog أولاً *
  • 5.7 يسمح بتغيير الحجم بشكل ديناميكي innodb_buffer_pool_size

هل يجب علي تغيير log_file_size؟

استعمال GLOBAL STATUS لحساب عدد الدقائق قبل دورات السجل.

Uptime / 60 * innodb_log_file_size / Innodb_os_log_written`

إذا كان كثيرًا أقل من 60 (دقيقة) ، فقد يساعد ذلك على زيادة حجم السجل. إذا كان أكثر من ذلك بكثير ، فإن ملفات السجل تهدر مساحة القرص. هذه "ساعة واحدة" تعسفية إلى حد ما ، لذلك إذا كنت قريبًا منها ، فلا تهتم بتغيير حجم ملف_الملف.

غادر innodb_log_files_in_group عند التقصير 2.

22
Rick James

عند تسجيل الدخول إلى mysql ، اكتب تلك الأوامر:

pager grep seq;
show engine innodb status \G select sleep(60); show engine innodb status \G

ستحصل على رقمين. أولاً تحصل على واحدة ثم انتظر دقيقة. ستحصل على آخر.

لنفترض أن الأول هو 3.456.718.123 والثاني هو 4.098.873.134

الآن (4.098.873.134-3.856.718.123) * 60/1024/1024

والنتيجة هي = 13.856 ميغابايت

لديك ملفي سجل. لذا قم بتقسيمها على اثنين وستحصل على رقم بالقرب من 7.000 ميجابايت. فقط للتأكد ، قم بتعيين حجم ملف السجل الخاص بك 8 جيجابايت

2
Linux Newbie