انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تثبيت MySQL و MariaDB: دليل الإدارة الأساسية

تثبيت MySQL و MariaDB على Linux خطوة بخطوة، mysql_secure_installation، إنشاء قواعد البيانات والمستخدمين، أوامر SQL الأساسية، تكوين الوصول عن بُعد وضبط الأداء.

وقت القراءة: 14 dk قاعدة البيانات
mysqlmariadbقاعدة البياناتتثبيتsqlubuntudebianlinux

جدول المحتويات

تثبيت MySQL و MariaDB: دليل الإدارة الأساسية

MySQL و MariaDB هما أكثر أنظمة إدارة قواعد البيانات العلائقية استخداماً في العالم. تعتمد عليهما معظم تطبيقات الويب ومواقع التجارة الإلكترونية والأنظمة المؤسسية. في هذا الدليل سنتناول تثبيت كلا النظامين وإعدادهما الأساسي وإدارتهما.

MySQL أم MariaDB؟

MariaDB هي نسخة مجتمعية من MySQL أنشأها المطورون الأصليون لـ MySQL. الفروق الرئيسية:

الميزةMySQLMariaDB
الترخيصGPL + تجاريGPL (مفتوح بالكامل)
المطورOracleMariaDB Foundation
الأداءجيدأسرع عموماً
التوافقمرجعيمتوافق مع MySQL
الميزات الجديدةبطيءأسرع

يُنصح بـ MariaDB للمشاريع الجديدة. متوافق تماماً مع MySQL وعادةً يوفر أداءً أفضل. الانتقال من MySQL إلى MariaDB سهل جداً.

تثبيت MySQL (Ubuntu/Debian)

تحديث المستودع والتثبيت

hljs bash
# تحديث قائمة الحزم
apt update

# تثبيت MySQL Server
apt install -y mysql-server

# التحقق من حالة الخدمة
systemctl status mysql

# تفعيل البدء التلقائي
systemctl enable mysql

التحقق من إصدار MySQL

hljs bash
mysql --version
# الناتج: mysql  Ver 8.0.xx Distrib 8.0.xx, for Linux (x86_64)

تثبيت MariaDB (Ubuntu/Debian)

hljs bash
# تحديث قائمة الحزم
apt update

# تثبيت MariaDB Server
apt install -y mariadb-server mariadb-client

# التحقق من حالة الخدمة
systemctl status mariadb

# تفعيل البدء التلقائي
systemctl enable mariadb

# التحقق من الإصدار
mysql --version
# الناتج: mysql  Ver 15.1 Distrib 10.x.x-MariaDB

تثبيت MariaDB (CentOS/AlmaLinux/Rocky Linux)

hljs bash
# إضافة مستودع MariaDB
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash

# تثبيت MariaDB
dnf install -y MariaDB-server MariaDB-client

# تشغيل الخدمة وتفعيلها
systemctl start mariadb
systemctl enable mariadb

إعداد الأمان: mysql_secure_installation

بعد التثبيت، شغّل معالج الأمان:

hljs bash
mysql_secure_installation

سيطرح المعالج الأسئلة التالية:

Enter current password for root (enter for none): [Enter]
Switch to unix_socket authentication [Y/n]: n
Change the root password? [Y/n]: Y
New password: [أدخل كلمة مرور قوية]
Re-enter new password: [أعد إدخال كلمة المرور]
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

أغلق الوصول عن بُعد لمستخدم root. أنشئ مستخدماً منفصلاً للاتصالات البعيدة. استخدم كلمة مرور قوية (12 حرفاً على الأقل، أحرف كبيرة وصغيرة وأرقام ورموز خاصة).

الاتصال بـ MySQL/MariaDB

hljs bash
# الاتصال كـ root
mysql -u root -p

# الاتصال بقاعدة بيانات محددة
mysql -u user -p database_name

# الاتصال بخادم بعيد
mysql -h 192.168.1.100 -u user -p database_name

# الاتصال مع تحديد المنفذ
mysql -h server -P 3306 -u user -p

إنشاء قواعد البيانات وإدارتها

hljs sql
-- إنشاء قاعدة بيانات
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- عرض جميع قواعد البيانات
SHOW DATABASES;

-- اختيار قاعدة بيانات
USE myapp;

-- حذف قاعدة بيانات (بحذر!)
DROP DATABASE old_database;

-- التحقق من حجم قاعدة البيانات
SELECT table_schema AS 'Database',
  ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
GROUP BY table_schema;

إنشاء المستخدمين وإدارة الصلاحيات

hljs sql
-- إنشاء مستخدم (وصول localhost فقط)
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPass123!';

-- إنشاء مستخدم (وصول بعيد)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPass123!';

-- وصول من IP محدد
CREATE USER 'appuser'@'192.168.1.50' IDENTIFIED BY 'StrongPass123!';

-- منح صلاحيات كاملة لقاعدة بيانات
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';

-- منح صلاحية القراءة فقط
GRANT SELECT ON myapp.* TO 'readonly'@'localhost';

-- منح صلاحيات لجدول محدد
GRANT SELECT, INSERT, UPDATE ON myapp.users TO 'appuser'@'localhost';

-- تطبيق الصلاحيات
FLUSH PRIVILEGES;

-- عرض صلاحيات المستخدم
SHOW GRANTS FOR 'appuser'@'localhost';

-- حذف مستخدم
DROP USER 'old_user'@'localhost';

أوامر SQL الأساسية

hljs sql
-- إنشاء جدول
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL UNIQUE,
  email VARCHAR(100) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- إدراج بيانات
INSERT INTO users (username, email) VALUES ('ahmed', 'ahmed@example.com');

-- استعلام البيانات
SELECT * FROM users;
SELECT username, email FROM users WHERE id = 1;

-- تحديث البيانات
UPDATE users SET email = 'new@example.com' WHERE id = 1;

-- حذف البيانات
DELETE FROM users WHERE id = 5;

-- عرض الجداول
SHOW TABLES;

-- عرض هيكل الجدول
DESCRIBE users;

إعداد الوصول عن بُعد

افتراضياً يقبل MySQL/MariaDB الاتصالات من localhost فقط. للوصول البعيد:

1. تعديل ملف الإعداد

hljs bash
# لـ MySQL
nano /etc/mysql/mysql.conf.d/mysqld.cnf

# لـ MariaDB
nano /etc/mysql/mariadb.conf.d/50-server.cnf
hljs ini
# تغيير سطر bind-address أو تعليقه
# bind-address = 127.0.0.1
bind-address = 0.0.0.0

2. إعادة تشغيل الخدمة

hljs bash
systemctl restart mysql
# أو
systemctl restart mariadb

3. إضافة قاعدة جدار الحماية

hljs bash
# مع UFW
ufw allow 3306/tcp

# مع iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

فتح منفذ MySQL (3306) للإنترنت يشكّل خطراً أمنياً. استخدم نفق SSH أو VPN إن أمكن. إذا كان الوصول البعيد ضرورياً، قيّده بعناوين IP محددة.

ضبط الأداء

تحسين الإعداد الأساسي

hljs bash
nano /etc/mysql/mysql.conf.d/mysqld.cnf
hljs ini
[mysqld]
# InnoDB buffer pool (70-80% من الذاكرة)
innodb_buffer_pool_size = 1G

# مجموعة الاتصالات
max_connections = 150

# حجم الجدول المؤقت
tmp_table_size = 64M
max_heap_table_size = 64M

# سجل الاستعلامات البطيئة
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

تطبيق الإعداد

hljs bash
systemctl restart mysql

# التحقق من المتغيرات
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

إدارة الخدمة

hljs bash
# تشغيل الخدمة
systemctl start mysql

# إيقاف الخدمة
systemctl stop mysql

# إعادة تشغيل الخدمة
systemctl restart mysql

# إعادة تحميل الإعداد
systemctl reload mysql

# التحقق من حالة الخدمة
systemctl status mysql

# عرض السجلات
journalctl -u mysql -f
tail -f /var/log/mysql/error.log

الخلاصة

MySQL و MariaDB أنظمة قواعد بيانات قوية وموثوقة. لا تهمل إعداد الأمان بعد التثبيت، وقم بالنسخ الاحتياطي بانتظام، وحسّن إعدادات الأداء وفقاً لموارد خادمك. كلا النظامين يعملان بسلاسة على خوادم REXE.