البرمجة

تفعيل تسجيل الأحداث في MySQL داخل Docker

تفضل، هذا نص المقال:


تفاصيل تفعيل تسجيل الأحداث في حاوية MySQL داخل Docker

تواجه العديد من المطورين التحدي عند محاولة إعداد حاويات Docker لتشغيل خوادم قواعد البيانات مثل MySQL، واحدًا من هذه التحديات يتمثل في تمكين تسجيل الأحداث (Logging) بشكل صحيح. في هذا المقال، سنقدم لكم الطريقة الصحيحة لتحقيق هذا الهدف.

في البداية، يتم استخدام Docker Compose لتحديد تكوين الحاوية. يمكنك استخدام مثال التكوين التالي كنقطة انطلاق:

yaml
version: '2' services: db: image: mysql:5.6.33@sha256:31ad2efd094a1336ef1f8efaf40b88a5019778e7d9b8a8579a4f95a6be88eaba volumes: - "./db/data:/var/lib/mysql" - "./db/log:/var/log/mysql" - "./db/conf:/etc/mysql/conf.d" restart: "yes" environment: MYSQL_ROOT_PASSWORD: rootpw MYSQL_DATABASE: db MYSQL_USER: db MYSQL_PASSWORD: dbpw

ومن ثم، يتم إنشاء ملف تكوين my.cnf في دليل conf الخاص بك. يجب أن يحتوي هذا الملف على الإعدادات التالية:

ini
[mysqld] log_error = /var/log/mysql/mysql_error.log general_log_file = /var/log/mysql/mysql.log general_log = 1 slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql_slow.log long_query_time = 2 log_queries_not_using_indexes = 1

الآن، هذا هو المكان الذي يحدث فيه الخلل بالطريقة السابقة: عند استخدام Docker Compose مع تحديد ملفات التكوين، قد لا تتمكن من إنشاء ملفات السجل بشكل صحيح. لحل هذه المشكلة، يمكنك استخدام خاصية “entrypoint” في Docker Compose.

إليك كيف يمكن تعديل ملف Docker Compose لتضمين خاصية “entrypoint”:

yaml
version: '2' services: db: image: mysql:5.6.33@sha256:31ad2efd094a1336ef1f8efaf40b88a5019778e7d9b8a8579a4f95a6be88eaba volumes: - "./db/data:/var/lib/mysql" - "./db/log:/var/log/mysql" - "./db/conf:/etc/mysql/conf.d" restart: "yes" environment: MYSQL_ROOT_PASSWORD: rootpw MYSQL_DATABASE: db MYSQL_USER: db MYSQL_PASSWORD: dbpw entrypoint: ["/bin/bash", "-c", "touch /var/log/mysql/mysql_error.log /var/log/mysql/mysql.log /var/log/mysql/mysql_slow.log && chown mysql:mysql /var/log/mysql/*.log && exec docker-entrypoint.sh mysqld"]

هذا التعديل يقوم بتشغيل سكريبت docker-entrypoint.sh بعد إعداد الحاوية، والذي يقوم ببدوره بتشغيل خادم MySQL. بعد ذلك، يتم إنشاء وتعيين أذونات الملفات ضرورية لتسجيل الأحداث.

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

وبهذا، يتم تحقيق الهدف المطلوب بشكل صحيح، مما يضمن سير عمل تسجيل الأحداث بسلاسة وفعالية داخل حاوية MySQL داخل Docker.

المزيد من المعلومات

المزيد من التفاصيل حول تفعيل تسجيل الأحداث في حاوية MySQL داخل Docker

بعد إجراء التعديلات المقترحة على ملف Docker Compose، يمكن أن يكون من الفائدة فهم بعض النقاط الإضافية حول كيفية عمل هذه العملية ولماذا تمت بعض الخطوات.

أولاً، يتم استخدام الأمر entrypoint لتحديد الأمر الذي يجب تشغيله عند بدء تشغيل الحاوية. في هذه الحالة، تم تحديد الأمر "/bin/bash", "-c", "touch /var/log/mysql/mysql_error.log /var/log/mysql/mysql.log /var/log/mysql/mysql_slow.log && chown mysql:mysql /var/log/mysql/*.log && exec docker-entrypoint.sh mysqld" كقيمة لخاصية entrypoint. هذا الأمر يقوم بتنفيذ عدة إجراءات متتالية:

  1. touch /var/log/mysql/mysql_error.log /var/log/mysql/mysql.log /var/log/mysql/mysql_slow.log: يقوم بإنشاء الملفات التي سيتم تسجيل الأحداث فيها، في حالة عدم وجودها بالفعل.
  2. chown mysql:mysql /var/log/mysql/*.log: يقوم بتغيير مالكية وصلاحيات الملفات المنشأة إلى المستخدم mysql، الذي يعمل عادةً كمالك لعمليات MySQL في الحاوية.
  3. exec docker-entrypoint.sh mysqld: يشير إلى تنفيذ سكريبت داخلي docker-entrypoint.sh الذي يُعد مسؤولاً عن بدء خادم MySQL (mysqld).

ثانياً، يتم إنشاء الملف my.cnf في دليل conf الخاص بك لتعريف إعدادات تسجيل الأحداث لخادم MySQL. يتم استخدام هذا الملف عندما يبدأ خادم MySQL في الحاوية، مما يجعله يطبق تلك الإعدادات.

بعد تنفيذ هذه الخطوات، يجب أن تكون قادرًا الآن على تفعيل تسجيل الأحداث بنجاح في حاوية MySQL الخاصة بك داخل بيئة Docker، مما يمكنك من متابعة وتحليل الأنشطة داخل قاعدة البيانات بشكل أكثر فعالية.

ومن الجدير بالذكر أنه على الرغم من أن هذا المقال قد استخدم MySQL كمثال، إلا أن نفس النهج يمكن تطبيقه على أنواع أخرى من خوادم قواعد البيانات داخل حاويات Docker، مثل PostgreSQL أو MongoDB، مما يسهل عملية تحقيق تسجيل الأحداث لجميع أنواع قواعد البيانات التي تعمل في بيئة Docker.

بهذا، يتم توفير الطريقة الصحيحة لتفعيل تسجيل الأحداث في حاوية MySQL داخل بيئة Docker، مما يمكن المطورين من تتبع وفهم الأنشطة داخل قاعدة البيانات بشكل أفضل وأكثر فعالية.

زر الذهاب إلى الأعلى