تثبيت MySQL و MariaDB: دليل الإدارة الأساسية
تثبيت MySQL و MariaDB على Linux خطوة بخطوة، mysql_secure_installation، إنشاء قواعد البيانات والمستخدمين، أوامر SQL الأساسية، تكوين الوصول عن بُعد وضبط الأداء.
جدول المحتويات
تثبيت MySQL و MariaDB: دليل الإدارة الأساسية
MySQL و MariaDB هما أكثر أنظمة إدارة قواعد البيانات العلائقية استخداماً في العالم. تعتمد عليهما معظم تطبيقات الويب ومواقع التجارة الإلكترونية والأنظمة المؤسسية. في هذا الدليل سنتناول تثبيت كلا النظامين وإعدادهما الأساسي وإدارتهما.
MySQL أم MariaDB؟
MariaDB هي نسخة مجتمعية من MySQL أنشأها المطورون الأصليون لـ MySQL. الفروق الرئيسية:
| الميزة | MySQL | MariaDB |
|---|---|---|
| الترخيص | GPL + تجاري | GPL (مفتوح بالكامل) |
| المطور | Oracle | MariaDB Foundation |
| الأداء | جيد | أسرع عموماً |
| التوافق | مرجعي | متوافق مع MySQL |
| الميزات الجديدة | بطيء | أسرع |
يُنصح بـ MariaDB للمشاريع الجديدة. متوافق تماماً مع MySQL وعادةً يوفر أداءً أفضل. الانتقال من MySQL إلى MariaDB سهل جداً.
تثبيت MySQL (Ubuntu/Debian)
تحديث المستودع والتثبيت
# تحديث قائمة الحزم
apt update
# تثبيت MySQL Server
apt install -y mysql-server
# التحقق من حالة الخدمة
systemctl status mysql
# تفعيل البدء التلقائي
systemctl enable mysql
التحقق من إصدار MySQL
mysql --version
# الناتج: mysql Ver 8.0.xx Distrib 8.0.xx, for Linux (x86_64)
تثبيت MariaDB (Ubuntu/Debian)
# تحديث قائمة الحزم
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)
# إضافة مستودع 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
بعد التثبيت، شغّل معالج الأمان:
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
# الاتصال كـ 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
إنشاء قواعد البيانات وإدارتها
-- إنشاء قاعدة بيانات
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;
إنشاء المستخدمين وإدارة الصلاحيات
-- إنشاء مستخدم (وصول 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 الأساسية
-- إنشاء جدول
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. تعديل ملف الإعداد
# لـ MySQL
nano /etc/mysql/mysql.conf.d/mysqld.cnf
# لـ MariaDB
nano /etc/mysql/mariadb.conf.d/50-server.cnf
# تغيير سطر bind-address أو تعليقه
# bind-address = 127.0.0.1
bind-address = 0.0.0.0
2. إعادة تشغيل الخدمة
systemctl restart mysql
# أو
systemctl restart mariadb
3. إضافة قاعدة جدار الحماية
# مع UFW
ufw allow 3306/tcp
# مع iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
فتح منفذ MySQL (3306) للإنترنت يشكّل خطراً أمنياً. استخدم نفق SSH أو VPN إن أمكن. إذا كان الوصول البعيد ضرورياً، قيّده بعناوين IP محددة.
ضبط الأداء
تحسين الإعداد الأساسي
nano /etc/mysql/mysql.conf.d/mysqld.cnf
[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
تطبيق الإعداد
systemctl restart mysql
# التحقق من المتغيرات
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
إدارة الخدمة
# تشغيل الخدمة
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.
مقالات ذات صلة
دليل تثبيت PostgreSQL وإدارته الأساسية
تثبيت PostgreSQL على Ubuntu/Debian وRHEL/CentOS، إنشاء المستخدمين وقواعد البيانات، أوامر SQL الأساسية، إعداد الاتصال عن بُعد واستراتيجيات النسخ الاحتياطي. دليل خطوة بخطوة.
تثبيت Redis و Memcached: دليل طبقة التخزين المؤقت
تثبيت Redis و Memcached على Ubuntu/Debian، الأوامر الأساسية، إعدادات الاستمرارية، تكوين TTL، مقارنة Redis مقابل Memcached، وتكامل التطبيقات.
تثبيت phpMyAdmin والوصول الآمن
دليل خطوة بخطوة لتثبيت phpMyAdmin على Apache وNginx، وإعداد SSL، وإدارة المستخدمين، وتقييد IP، وتعزيز الأمان.