لماذا تستضيف MariaDB على VPS؟
MariaDB هو تفرّع مجتمعي من MySQL، مفتوح المصدر 100%، معروف بأدائه وموثوقيته وتوافقه الكامل مع تطبيقات MySQL القائمة. باستضافته على VPS، يحرّرك من قيود الاستضافة المشتركة: لا حدود مفروضة على الاتصالات، ولا حصص اعتباطية على حجم قواعد البيانات، مع إمكانية ضبط معاملات محرّك InnoDB بدقة حسب حِملك الفعلي. تحتفظ بالتحكم في نسخك الاحتياطية ومستخدميك وأمان الشبكة، دون الاعتماد على مزوّد خارجي في كل عملية صيانة.
تتوفر اليوم نسختان LTS: MariaDB 11.4 LTS (صدرت في مايو 2024، دعم مضمون حتى 2028+) وMariaDB 10.11 LTS (دعم حتى فبراير 2028). كلتاهما مستقرتان للإنتاج؛ تتميز 11.4 بالتخلي النهائي عن عميل mysql لصالح mariadb، وتحسينات في توازي الخيوط وInnoDB.
ما الذي يمكنك فعله باستخدام MariaDB على VPS الخاص بك
- استضافة عدة قواعد بيانات لمشاريع أو عملاء مختلفين على نسخة واحدة، مع العزل لكل مستخدم MariaDB
- توصيل تطبيقك المبني على Laravel أو Symfony أو WordPress أو أي إطار عمل آخر عبر المنفذ القياسي 3306، محليًا أو من خادم بعيد مؤمَّن بجدار حماية
- إجراء نسخ احتياطية مؤتمتة باستخدام
mariadb-dumpوتخزينها مضغوطة مع احتفاظ قابل للتكوين - إعداد النسخ المتماثل بنمط السيد-التابع لضمان التوفر العالي أو تخفيف عمليات القراءة المكثفة
- تحسين الأداء بضبط المتغيّرات الرئيسية مثل
innodb_buffer_pool_sizeوinnodb_log_file_sizeوmax_connectionsمباشرةً في/etc/mysql/conf.d/ - إدارة قواعد بياناتك عبر واجهات رسومية مثل phpMyAdmin أو Adminer أو DBeaver متصلة عن بُعد عبر نفق SSH آمن
المتطلبات الأساسية
قبل البدء، تأكد من توفر العناصر التالية:
- VPS من ServOrbit: ذاكرة وصول عشوائي لا تقل عن 2 غيغابايت (الاستخدام الخفيف أو الاختبار)، يُوصى بـ 4 غيغابايت في بيئة الإنتاج. يستهلك MariaDB ذاته موارد قليلة، لكن مجموعة ذاكرة التخزين المؤقت InnoDB (innodb_buffer_pool_size) يجب أن تمثل 60 إلى 70% من ذاكرة الوصول العشوائي المتاحة لتكون فعّالة.
- وصول SSH root أو sudo إلى VPS الخاص بك.
- إصدار MariaDB حديث: MariaDB 11.4 LTS (مايو 2024، دعم حتى 2028+) أو MariaDB 10.11 LTS (دعم حتى فبراير 2028). تجنّب 10.6 وما دونها في الإنتاج: فهي تقترب من نهاية الدعم.
- جدار حماية نشط (UFW أو ما يعادله): يجب ألا يُعرض المنفذ 3306 مباشرةً على الإنترنت أبدًا.
ثبّت MariaDB على VPS من ServOrbit
اطلب VPS Cloud من ServOrbit
توجّه إلى /vps-cloud واختر العرض المناسب لحِملك. بالنسبة لنسخة MariaDB للإنتاج، يُشكّل VPS بـ 2 vCPU و4 غيغابايت من ذاكرة RAM نقطة انطلاق جيدة. أكمل الطلب ودوّن بيانات اتصال SSH (IP، المستخدم، كلمة المرور أو المفتاح) المُرسلة عبر البريد الإلكتروني.
الاتصال بـ VPS عبر SSH
افتح طرفية واتصل بـ VPS الخاص بك:
ssh root@<your-ip>إذا كنت تستخدم مفتاح SSH بدلاً من كلمة مرور:
ssh -i ~/.ssh/my_key root@<your-ip>بعد الاتصال، تحقق من إصدار النظام والموارد المتاحة:
free -mللذاكرة،nprocلعدد الأنوية.الوصول إلى Marketplace في مساحة العميل
سجّل الدخول إلى مساحة العميل في ServOrbit، ثم انتقل إلى قسم «VPS الخاصة بي». اختر VPS المطلوب حديثًا وانقر على تبويب «Marketplace» للوصول إلى كتالوج التطبيقات المتاحة للتثبيت بنقرة واحدة.
اختيار MariaDB وإطلاق التثبيت
في Marketplace، ابحث عن «MariaDB» وانقر على بطاقة التطبيق. تحقّق من الإصدار المعروض (يُوصى بـ MariaDB 10.11 LTS أو 11.4 LTS)، ثم انقر على «تثبيت». يهيّئ النظام MariaDB تلقائيًا على VPS الخاص بك، ويضبط خدمة systemd، ويولّد كلمة مرور root عشوائية تُبلَّغ لك في نهاية التثبيت.
تأمين التثبيت باستخدام mysql_secure_installation
من جلسة SSH الخاصة بك، نفّذ:
mysql_secure_installationيرشدك هذا السكربت التفاعلي إلى تعيين كلمة مرور root أو تقويتها، وإزالة المستخدمين المجهولين، وتعطيل تسجيل دخول root عن بُعد، وحذف قاعدة بيانات الاختبار. هذه الخطوات ضرورية قبل أي استخدام إنتاجي.
الاتصال بشل MariaDB
منذ MariaDB 11، يُسمى العميل
mariadb(لم يعدmysql). كلاهما يعمل في الإصدار 10.11، لكنmariadbهو الأمر القانوني:mariadb -u root -pأدخل كلمة مرور root المحددة في الخطوة السابقة. أنت الآن في شل SQL التفاعلي (
MariaDB [(none)]>).إنشاء قاعدة بيانات بترميز utf8mb4
أنشئ دائمًا قواعد البيانات بترميز
utf8mb4وترتيبutf8mb4_unicode_ciللتعامل الصحيح مع جميع الأحرف (بما فيها الرموز التعبيرية):CREATE DATABASE my_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; SHOW DATABASES;تؤكد
SHOW DATABASES;ظهور قاعدة البيانات في القائمة.إنشاء مستخدم تطبيق مخصص
لا تستخدم root أبدًا من تطبيقك. أنشئ مستخدمًا محدودًا بقاعدة بياناتك:
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strong_password'; GRANT ALL PRIVILEGES ON my_app.* TO 'appuser'@'localhost'; FLUSH PRIVILEGES;يمكن لتطبيقك الآن الاتصال عبر المضيف
127.0.0.1، المنفذ3306، بهذه البيانات.التحقق من أن MariaDB يبدأ تلقائيًا
تأكد من إعادة تشغيل الخدمة بعد إعادة تشغيل VPS:
systemctl enable mariadb systemctl status mariadbيجب أن تظهر النتيجة
active (running). إذا لم تكن الخدمة مفعّلة عند بدء التشغيل، يقومsystemctl enable mariadbبتكوينها.
النسخ الاحتياطية الآلية باستخدام mariadb-dump
قاعدة بيانات بدون نسخ احتياطية آلية هي قنبلة موقوتة. ينشئ السكربت التالي نسخة احتياطية مضغوطة كل ليلة مع احتفاظ لمدة 7 أيام.
أنشئ سكربت النسخ الاحتياطي في /usr/local/bin/backup-mariadb.sh:
#!/bin/bash
BACKUP_DIR="/var/backups/mariadb"
DATE=$(date +%Y%m%d_%H%M%S)
DB_USER="root"
DB_PASS="your_root_password"
RETENTION=7
mkdir -p "$BACKUP_DIR"
# List all databases (excluding system ones)
DATABASES=$(mariadb -u"$DB_USER" -p"$DB_PASS" -e "SHOW DATABASES;" 2>/dev/null | \
grep -vE "^(Database|information_schema|performance_schema|mysql|sys)$")
for DB in $DATABASES; do
mariadb-dump \
-u"$DB_USER" -p"$DB_PASS" \
--single-transaction \
--quick \
--routines \
--triggers \
"$DB" | gzip > "$BACKUP_DIR/${DB}_${DATE}.sql.gz"
done
# Remove backups older than RETENTION days
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +$RETENTION -deleteاجعل السكربت قابلاً للتنفيذ وأضف مهمة cron لتشغيله كل ليلة الساعة 02:00:
chmod +x /usr/local/bin/backup-mariadb.sh
crontab -eأضف السطر التالي:
0 2 * * * /usr/local/bin/backup-mariadb.sh >> /var/log/backup-mariadb.log 2>&1لاستعادة قاعدة بيانات من نسخة احتياطية:
zcat /var/backups/mariadb/my_app_20261007_020000.sql.gz | mariadb -u root -p my_appالتحسين: تكوين InnoDB
التكوين الافتراضي لـ MariaDB محافظ جدًا (بضعة عشرات من الميغابايت لـ innodb_buffer_pool_size). على VPS للإنتاج، اضبط معاملات InnoDB للاستفادة الكاملة من الذاكرة المتاحة.
أنشئ الملف /etc/mysql/conf.d/performance.cnf:
[mysqld]
# InnoDB buffer pool: 60-70% of total RAM
# On 4 GB RAM → 2.5 GB
innodb_buffer_pool_size = 2560M
# Log file size (recommended: 25% of pool)
innodb_log_file_size = 640M
innodb_log_files_in_group = 2
# Query cache disabled on MariaDB 10.3+
query_cache_size = 0
query_cache_type = 0
max_connections = 150
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.logاضبط innodb_buffer_pool_size وفقًا لذاكرة وصول عشوائي VPS الخاص بك: على 2 غيغابايت، استخدم 1228M؛ على 8 غيغابايت، استخدم 5632M.
ثم أعد تشغيل MariaDB لتطبيق التكوين:
systemctl restart mariadbتحقق من تطبيق المعاملات:
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'query_cache_size';الوصول البعيد الآمن
بشكل افتراضي، لا يستمع MariaDB إلا على 127.0.0.1 — وهذا هو التكوين الآمن. للوصول من تطبيق على خادم آخر، توجد طريقتان.
الخيار الأول — نفق SSH (موصى به، دون فتح المنفذ 3306)
من جهازك المحلي أو خادم التطبيق:
ssh -L 3306:127.0.0.1:3306 -N root@<mariadb-vps-ip>يتصل تطبيقك بعد ذلك بـ 127.0.0.1:3306 محليًا — ويشفّر نفق SSH حركة البيانات. أضف -f لوضع النفق في الخلفية.
الخيار الثاني — اتصال بين VPS مع السماح بـ IP محددة
إذا كان تطبيقك يعمل على VPS آخر من ServOrbit، افتح المنفذ فقط لعنوان IP الخاص بذلك الخادم:
# في /etc/mysql/conf.d/network.cnf
[mysqld]
bind-address = 0.0.0.0# السماح فقط لـ IP خادم التطبيق
ufw allow from <app-ip> to any port 3306أنشئ مستخدم MariaDB محدودًا بـ IP خادم التطبيق:
CREATE USER 'app'@'<app-ip>' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON my_app.* TO 'app'@'<app-ip>';
FLUSH PRIVILEGES;استكشاف الأخطاء وإصلاحها
فيما يلي أكثر أربعة أخطاء شيوعًا عند تشغيل MariaDB على VPS، وكيفية حلها.
1. Can't connect to local MariaDB server through socket
خدمة MariaDB لا تعمل أو المقبس غير موجود.
systemctl status mariadb
systemctl start mariadbإذا رفضت الخدمة البدء، اقرأ السجلات:
journalctl -xe -u mariadb --no-pager | tail -402. Too many connections
وصل عدد الاتصالات المتزامنة إلى الحد الأقصى. زد max_connections في /etc/mysql/conf.d/performance.cnf ثم أعد التحميل:
systemctl reload mariadb3. Table '<name>' is marked as crashed
جدول MyISAM تالف. أصلحه:
mysqlcheck -u root -p --repair my_app table_name4. Access denied for user 'root'@'localhost'
كلمة مرور root منسية. أعد الضبط في وضع تخطي الأذونات:
systemctl stop mariadb
mysqld_safe --skip-grant-tables &
mariadb -u rootثم في شل MariaDB:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
EXIT;أعد تشغيل MariaDB بشكل طبيعي: systemctl restart mariadb.
MariaDB 11.4 LTS مقابل MariaDB 10.11 LTS مقابل MySQL 8.0
مرّر الجدول أفقيًا
| المعيار | MariaDB 11.4 LTS | MariaDB 10.11 LTS | MySQL 8.0 |
|---|---|---|---|
| الرخصة | GPL v2 (مجتمعية) | GPL v2 (مجتمعية) | GPL v2 / تجارية (Oracle) |
| الدعم حتى | 2028+ (LTS، مايو 2024) | فبراير 2028 (LTS) | أبريل 2026 (قريب من نهاية الدعم) |
| عميل CLI | `mariadb` (mysql مهمل) | `mariadb` و`mysql` | `mysql` |
| أداء InnoDB | محسَّن (threadpool مدمج) | مستقر ومُجرَّب | جيد، محسَّن من Oracle |
| توافق MySQL | عالٍ جدًا (drop-in) | عالٍ جدًا (drop-in) | مرجعي |
| JSON مدمج | نعم (من MariaDB 10.2) | نعم | نعم (أعمدة JSON) |
| التوصية | المشاريع الجديدة، الترحيل من MySQL 8.0 | الإنتاج الحالي، أقصى استقرار | في حالة تبعية Oracle أو سحابية محددة |
لا تعرّض المنفذ 3306 مباشرةً على الإنترنت أبدًا: اضبط جدار الحماية للسماح باتصالات MariaDB محليًا فقط (127.0.0.1) أو عبر نفق SSH. فعّل أيضًا سجل الاستعلامات البطيئة (slow_query_log = 1، long_query_time = 1) من البداية لتحديد الاستعلامات التي تحتاج إلى تحسين قبل أن تؤثر على مستخدميك.
الوثائق الرسمية
للإعدادات المتقدمة والخيارات الخاصة بالأداة وتغييرات الإصدارات، راجع الوثائق الرسمية لـ MariaDB. يغطّي هذا الدليل النشر على VPS من ServOrbit؛ وتبقى وثائق الناشر المرجع للإعدادات الدقيقة.