دليل تثبيت PostgreSQL وإدارته الأساسية
تثبيت PostgreSQL على Ubuntu/Debian وRHEL/CentOS، إنشاء المستخدمين وقواعد البيانات، أوامر SQL الأساسية، إعداد الاتصال عن بُعد واستراتيجيات النسخ الاحتياطي. دليل خطوة بخطوة.
تثبيت MySQL و MariaDB على Linux خطوة بخطوة، mysql_secure_installation، إنشاء قواعد البيانات والمستخدمين، أوامر SQL الأساسية، تكوين الوصول عن بُعد وضبط الأداء.
MySQL و MariaDB هما أكثر أنظمة إدارة قواعد البيانات العلائقية استخداماً في العالم. تعتمد عليهما معظم تطبيقات الويب ومواقع التجارة الإلكترونية والأنظمة المؤسسية. في هذا الدليل سنتناول تثبيت كلا النظامين وإعدادهما الأساسي وإدارتهما.
MariaDB هي نسخة مجتمعية من MySQL أنشأها المطورون الأصليون لـ MySQL. الفروق الرئيسية:
| الميزة | MySQL | MariaDB |
|---|---|---|
| الترخيص | GPL + تجاري | GPL (مفتوح بالكامل) |
| المطور | Oracle | MariaDB Foundation |
| الأداء | جيد | أسرع عموماً |
| التوافق | مرجعي | متوافق مع MySQL |
| الميزات الجديدة | بطيء | أسرع |
يُنصح بـ MariaDB للمشاريع الجديدة. متوافق تماماً مع MySQL وعادةً يوفر أداءً أفضل. الانتقال من MySQL إلى MariaDB سهل جداً.
# تحديث قائمة الحزم
apt update
# تثبيت MySQL Server
apt install -y mysql-server
# التحقق من حالة الخدمة
systemctl status mysql
# تفعيل البدء التلقائي
systemctl enable mysql
mysql --version
# الناتج: mysql Ver 8.0.xx Distrib 8.0.xx, for Linux (x86_64)
# تحديث قائمة الحزم
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
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
سيطرح المعالج الأسئلة التالية:
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 حرفاً على الأقل، أحرف كبيرة وصغيرة وأرقام ورموز خاصة).
# الاتصال كـ 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';
-- إنشاء جدول
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 فقط. للوصول البعيد:
# لـ 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
systemctl restart mysql
# أو
systemctl restart mariadb
# مع 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.
يُنصح بـ MariaDB للمشاريع الجديدة. متوافق تماماً مع MySQL، يوفر أداءً أفضل عموماً، ومفتوح المصدر بالكامل. تطبيقات MySQL الحالية تعمل على MariaDB دون تعديل. لكن إذا كنت تحتاج ميزات Oracle الخاصة بـ MySQL (مثل Group Replication أو MySQL Shell) فاختر MySQL.
أوقف MySQL: systemctl stop mysql، ثم شغّله في الوضع الآمن: mysqld_safe --skip-grant-tables &. اتصل بـ mysql -u root وشغّل: ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword'; ثم FLUSH PRIVILEGES; وأعد تشغيل الخدمة بشكل طبيعي.
تحقق من ثلاثة أشياء: 1) تأكد أن bind-address معيّن على 0.0.0.0، 2) تحقق أن المستخدم أُنشئ بـ '%' أو IP المناسب (SHOW GRANTS FOR 'user'@'%')، 3) تأكد أن المنفذ 3306 مفتوح في جدار الحماية (ufw status أو iptables -L).
اضبطها على 70-80% من إجمالي ذاكرة الخادم. مثلاً: لـ 4GB ذاكرة استخدم 2-3GB، ولـ 8GB استخدم 5-6GB. إذا كان الخادم مخصصاً لقاعدة البيانات فقط يمكن الوصول إلى 80%. لا تنسَ إعادة تشغيل الخدمة بعد التغيير.
ممكن تقنياً لكن غير مستحسن. كلاهما يستخدم المنفذ 3306 افتراضياً مما يسبب تعارضاً. يمكن نقل أحدهما إلى منفذ مختلف لكن هذا يزيد التعقيد. الأفضل اختيار أحدهما والالتزام به.
تثبيت PostgreSQL على Ubuntu/Debian وRHEL/CentOS، إنشاء المستخدمين وقواعد البيانات، أوامر SQL الأساسية، إعداد الاتصال عن بُعد واستراتيجيات النسخ الاحتياطي. دليل خطوة بخطوة.
تثبيت Redis و Memcached على Ubuntu/Debian، الأوامر الأساسية، إعدادات الاستمرارية، تكوين TTL، مقارنة Redis مقابل Memcached، وتكامل التطبيقات.
دليل خطوة بخطوة لتثبيت phpMyAdmin على Apache وNginx، وإعداد SSL، وإدارة المستخدمين، وتقييد IP، وتعزيز الأمان.