لماذا تستضيف MySQL ذاتيًا على خادم VPS
على الاستضافة المشتركة، تتقاسم قاعدة بيانات MySQL الخاصة بك ذاكرة RAM وعمليات الإدخال/الإخراج مع مئات المواقع الأخرى، ولا يمكنك تعديل innodb_buffer_pool_size ولا أوضاع SQL ولا إصدار المحرك. على خادم VPS، تحصل على موارد مخصصة، وتختار بين MySQL 8.x وMariaDB، وتصل إلى ملف my.cnf لتحسين كل معامل. إنه الخيار الصحيح لمتجر تجارة إلكترونية، أو نظام إدارة محتوى عالي الحركة، أو واجهة برمجية (API) تحتاج إلى معاملات سريعة وbuffer pool سخي. كما تدير المستخدمين الخاصين بك، وصلاحيات المنح (grants) على مستوى الجداول، واستراتيجية النسخ المتماثل بين الخادم الرئيسي والتابع (master-replica).
الفوائد الملموسة لـ MySQL مُستضاف ذاتيًا
- موارد مخصصة: كامل buffer pool الخاص بـ InnoDB لبياناتك، دون جيران مزعجين.
- وصول كامل إلى
my.cnf:innodb_buffer_pool_sizeوmax_connectionsوأوضاع SQL الصارمة. - اختيار المحرك: MySQL 8 لوظائف JSON/CTE، أو MariaDB لمحركاتها الإضافية.
- نسخ متماثل بين الخادم الرئيسي والتابع قابل للتهيئة لتوزيع عمليات القراءة أو التعافي من الأعطال.
- نسخ احتياطية منطقية (
mysqldump) أو فيزيائية (xtrabackup) حسب حجم بياناتك. - لا حصص تعسفية على حجم قواعد البيانات أو عدد الاتصالات المتزامنة.
المتطلبات المادية والبرمجية
تعمل نسخة MySQL لموقع WordPress أو تطبيق صغير بأريحية على خادم VPS بمعالجين افتراضيين (2 vCPU) و2 إلى 4 غيغابايت من ذاكرة RAM مع 30 غيغابايت من قرص SSD. أما لـ Magento أو PrestaShop أو حركة تجارة إلكترونية حقيقية، فارتقِ إلى 4 vCPU و8 غيغابايت من RAM، لأن buffer pool الخاص بـ InnoDB يجب أن يكون قادرًا على احتواء الجزء الأكبر من مجموعة بياناتك النشطة. على الصعيد البرمجي: Ubuntu 22.04/24.04 LTS، وDocker وDocker Compose v2، ووحدة تخزين دائمة مخصصة، ونطاق (مثل: mysql.mysite.com) فقط إذا كان الوصول عن بُعد مطلوبًا. خصّص أيضًا مساحة قرص لملفات binlogs إذا فعّلت النسخ المتماثل أو الاستعادة إلى نقطة زمنية محددة (point-in-time).
نشر MySQL باستخدام Docker في بيئة الإنتاج
تأمين خادم VPS
حدّث النظام، وثبّت Docker، وعطّل الدخول عبر SSH بكلمة المرور لصالح المفاتيح، وأغلق المنفذ 3306 نحو الخارج باستخدام ufw deny 3306. يجب ألا يستمع MySQL إلا على الشبكة الداخلية للحاوية.
تعريف ملف docker-compose.yml
أعلن عن خدمة mysql:8.4، وركّب وحدة تخزين على /var/lib/mysql، ومرّر MYSQL_ROOT_PASSWORD وMYSQL_DATABASE وMYSQL_USER عبر ملف .env. وركّب أيضًا ملف conf.d/custom.cnf للقراءة فقط لإعداداتك المخصصة.
تعزيز أمان التثبيت
بعد docker compose up -d، نفّذ ما يعادل mysql_secure_installation: احذف المستخدمين المجهولين، وامنع تسجيل دخول root عن بُعد، وأنشئ حسابًا تطبيقيًا مخصصًا بصلاحية GRANT محصورة في قاعدة بيانات واحدة. لا تستخدم أبدًا حساب root من تطبيقك.
تحسين InnoDB
في ملف custom.cnf، اضبط innodb_buffer_pool_size على نحو 60-70% من ذاكرة RAM الخاصة بخادم VPS، وinnodb_flush_log_at_trx_commit=2 لتحقيق موازنة جيدة بين الأداء والمتانة، وmax_connections وفقًا لحملك الفعلي. فعّل سجل الاستعلامات البطيئة (slow query log) لتعقّب الاستعلامات المكلفة.
الكشف عبر TLS عند الحاجة
إذا كان على تطبيق خارجي الاتصال، فعّل تشفير TLS من جانب MySQL وضع الوصول خلف نفق SSH أو وكيل (proxy). تجنّب كشف المنفذ 3306 مباشرة: فضّل وصولاً عبر شبكة خاصة بين خوادم VPS الخاصة بك.
جدولة النسخ الاحتياطية
جدوِل mysqldump --single-transaction يوميًا عبر cron للحصول على نسخ متسقة دون قفل، واضغطها، وأرشفها خارج خادم VPS. أما لقواعد البيانات الكبيرة، فانتقل إلى Percona XtraBackup للحصول على نسخ احتياطية فيزيائية سريعة.
فعّل ملفات binlogs (log_bin + binlog_format=ROW) منذ البداية: فهي مفتاح الاستعادة إلى نقطة زمنية محددة. وبدمجها مع mysqldump كامل أسبوعي، تتيح لك إعادة تشغيل جميع المعاملات حتى الثانية التي تسبق العطل. وإذا أنشأت تابعًا (replica) للنسخ المتماثل على خادم VPS ثانٍ، فإن ملفات binlogs نفسها تغذّي النسخة التابعة في الوقت الفعلي لعمليات القراءة الموزّعة.