MySQL وMariaDB: التثبيت وأول قاعدة بيانات لك
تثبيت خادم قاعدة بيانات على VDS، والإعداد الأولي الآمن، وإنشاء قاعدة بيانات ومستخدم، والتحقق من الاتصال، والأخطاء الأولى الشائعة.
آخر تحديث 23 أغسطس 2026
MySQL وفرعه المتوافق MariaDB هما ما تعمل عليه معظم مواقع PHP. أوامرهما وعميلهما متماثلان، والاختلافات تبدأ في الضبط الدقيق.
التثبيت
apt update && apt install -y mariadb-server # Debian, Ubuntu
dnf install -y mariadb-server # AlmaLinux, CentOS Stream
systemctl enable --now mariadb
إذا كنت بحاجة تحديدًا إلى MySQL من Oracle، فثبّت mysql-server من مستودعه الرسمي. ستكون الخدمة باسم mysql.
سدّ الثغرات الأساسية فورًا:
mariadb-secure-installation
سيسألك السكربت عن تعيين كلمة مرور root، وإزالة المستخدمين المجهولين، ومنع تسجيل دخول root عن بُعد، وحذف قاعدة بيانات الاختبار. أجب بـ «نعم» على كل شيء.
قاعدة البيانات والمستخدم
لا تشغّل تطبيقك بصلاحيات root — أنشئ مستخدمًا منفصلًا لكل مشروع:
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'long-random-password';
GRANT ALL PRIVILEGES ON shop.* TO 'shop'@'localhost';
FLUSH PRIVILEGES;
ترميز utf8mb4 إلزامي: فالترميز القديم utf8 في MySQL يخزّن ثلاثة بايتات فقط لكل حرف ويتعطل مع الرموز التعبيرية وبعض الأحرف.
تحقق:
mariadb -u shop -p shop -e "SELECT 1;"
لمزيد عن الصلاحيات، راجع المستخدمون والصلاحيات.
الإعداد الأولي
توجد الإعدادات في /etc/mysql/mariadb.conf.d/50-server.cnf أو /etc/my.cnf.d/. إليك الحد الأدنى الذي ينبغي إصلاحه فورًا:
[mysqld]
bind-address = 127.0.0.1
innodb_buffer_pool_size = 1G
max_connections = 100
يبقي bind-address = 127.0.0.1 قاعدة البيانات متاحة محليًا فقط. إذا كان تطبيقك على الجهاز نفسه، فهكذا ينبغي أن يكون. وإذا احتجت قاعدة البيانات من الخارج، فاقرأ الوصول عن بُعد قبل تغيير أي شيء.
يُختار حجم buffer pool حسب المستوى — راجع ضبط الذاكرة.
بعد التعديل: systemctl restart mariadb.
الأخطاء الشائعة
| العَرَض | السبب | ما العمل |
|---|---|---|
Access denied for user | كلمة مرور خاطئة أو أن مدخل المستخدم مرتبط بمضيف مختلف | تحقق من SELECT user, host FROM mysql.user; |
Can't connect through socket | الخدمة لا تعمل | systemctl status mariadb، وراجع journalctl -u mariadb |
Too many connections | التطبيق لا يغلق الاتصالات | تجميع الاتصالات من جهة التطبيق، ثم max_connections |
| نص مشوّه | ترميزات مختلفة لقاعدة البيانات والاتصال | وحّد كل شيء على utf8mb4 |
| قاعدة البيانات لا تبدأ بعد إعادة التشغيل | الخدمة غير مضبوطة على البدء عند الإقلاع | systemctl enable mariadb |
لا توجد نسخ احتياطية تلقائية للجهاز. أعدّ نسخًا احتياطيًا فورًا بعد أول جدول يعمل — النسخ الاحتياطي لقاعدة البيانات. قرص NVMe سريع، لكنه واحد فقط.