Skip to content
VDS · قواعد البيانات

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 سريع، لكنه واحد فقط.