تثبيت MySQL و MariaDB: دليل الإدارة الأساسية
تثبيت MySQL و MariaDB على Linux خطوة بخطوة، mysql_secure_installation، إنشاء قواعد البيانات والمستخدمين، أوامر SQL الأساسية، تكوين الوصول عن بُعد وضبط الأداء.
تثبيت Redis و Memcached على Ubuntu/Debian، الأوامر الأساسية، إعدادات الاستمرارية، تكوين TTL، مقارنة Redis مقابل Memcached، وتكامل التطبيقات.
طبقة التخزين المؤقت هي مكوّن بنية تحتية حيوي يحسّن أداء تطبيقات الويب بشكل كبير. من خلال تخزين استعلامات قاعدة البيانات واستجابات API ونتائج الحسابات في الذاكرة، تتيح الاستجابة في أجزاء من الثانية للطلبات المتكررة. يتناول هذا الدليل تثبيت وتكوين وتكامل Redis و Memcached — أكثر نظامَي تخزين مؤقت استخداماً.
يوفر كلا النظامين تخزين بيانات عالي الأداء في الذاكرة، لكنهما يستهدفان حالات استخدام مختلفة:
| الميزة | Redis | Memcached |
|---|---|---|
| هياكل البيانات | String, Hash, List, Set, ZSet | String فقط |
| الاستمرارية | RDB + AOF | لا يوجد |
| النسخ المتماثل | Master-Replica + Cluster | لا يوجد |
| Pub/Sub | نعم | لا |
| Lua scripting | نعم | لا |
| تعدد الخيوط | جزئي (I/O) | كامل |
| كفاءة الذاكرة | متوسطة | عالية |
يُوصى بـ Redis للمشاريع الجديدة. بفضل هياكل البيانات الغنية ودعم الاستمرارية والنسخ المتماثل، يغطي حالات استخدام أكثر بكثير. يُفضَّل Memcached فقط عند الحاجة إلى تخزين مؤقت بسيط للسلاسل وأقصى أداء متعدد الخيوط.
# تحديث قائمة الحزم
apt update
# تثبيت Redis
apt install -y redis-server
# التحقق من حالة الخدمة
systemctl status redis-server
# تفعيل التشغيل التلقائي
systemctl enable redis-server
# تثبيت الأدوات المطلوبة
apt install -y curl gpg
# إضافة مفتاح GPG لـ Redis
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
# إضافة المستودع
echo 'deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb '$(lsb_release -cs)' main' | tee /etc/apt/sources.list.d/redis.list
# التحديث والتثبيت
apt update
apt install -y redis
redis-server --version
# الإخراج: Redis server v=7.x.x ...
redis-cli --version
# الإخراج: redis-cli 7.x.x
# تفعيل مستودع EPEL
dnf install -y epel-release
# تثبيت Redis
dnf install -y redis
# تشغيل الخدمة وتفعيلها
systemctl start redis
systemctl enable redis
# التحقق من الحالة
systemctl status redis
# تعديل ملف التكوين
nano /etc/redis/redis.conf
# عنوان الاستماع (localhost فقط)
bind 127.0.0.1
# المنفذ (الافتراضي 6379)
port 6379
# حماية بكلمة مرور
requirepass كلمةمرورRedisقوية123!
# الحد الأقصى لاستخدام الذاكرة
maxmemory 512mb
# سياسة الإخلاء عند امتلاء الذاكرة
maxmemory-policy allkeys-lru
# التشغيل كخدمة خلفية
daemonize yes
# ملف السجل
logfile /var/log/redis/redis-server.log
# عدد قواعد البيانات
databases 16
systemctl restart redis-server
# التحقق من التكوين
redis-cli -a كلمةمرورRedisقوية123! ping
# الإخراج: PONG
# الاتصال بـ Redis CLI
redis-cli
# الاتصال بكلمة مرور
redis-cli -a كلمةمرورRedisقوية123!
# الاتصال بخادم بعيد
redis-cli -h 192.168.1.100 -p 6379 -a كلمةالمرور
# اختبار الاتصال
PING
# الاستجابة: PONG
# تعيين قيمة نصية
SET مستخدم:1:اسم 'أحمد محمد'
# قراءة القيمة
GET مستخدم:1:اسم
# تعيين قيمة مع TTL (بالثواني)
SETEX جلسة:abc123 3600 'بيانات_المستخدم'
# التحقق من الوقت المتبقي
TTL جلسة:abc123
# حذف القيمة
DEL مستخدم:1:اسم
# التحقق من وجود المفتاح
EXISTS مستخدم:1:اسم
# سرد جميع المفاتيح (استخدم بحذر في الإنتاج)
KEYS *
# البحث بنمط معين
KEYS مستخدم:*
# تعيين hash
HSET مستخدم:1 اسم 'أحمد' email 'ahmed@example.com' عمر 30
# قراءة حقل hash
HGET مستخدم:1 اسم
# قراءة جميع حقول hash
HGETALL مستخدم:1
# حذف حقل hash
HDEL مستخدم:1 عمر
# التحقق من وجود حقل hash
HEXISTS مستخدم:1 email
# إضافة عنصر للقائمة (يساراً)
LPUSH مهام 'مهمة1' 'مهمة2'
# إضافة عنصر للقائمة (يميناً)
RPUSH مهام 'مهمة3'
# الحصول على عنصر من القائمة (يساراً)
LPOP مهام
# طول القائمة
LLEN مهام
# نطاق القائمة
LRANGE مهام 0 -1
# إضافة عنصر إلى set
SADD وسوم 'redis' 'cache' 'nosql'
# سرد أعضاء set
SMEMBERS وسوم
# إضافة إلى sorted set بنقاط
ZADD لوحة_المتصدرين 1500 'لاعب1' 2300 'لاعب2' 800 'لاعب3'
# سرد مرتب (تصاعدي)
ZRANGE لوحة_المتصدرين 0 -1 WITHSCORES
# سرد مرتب (تنازلي)
ZREVRANGE لوحة_المتصدرين 0 2 WITHSCORES
يكتب RDB لقطة من مجموعة البيانات بأكملها على القرص على فترات محددة:
# /etc/redis/redis.conf
# الحفظ عند تغيير واحد في 900 ثانية
save 900 1
# الحفظ عند 10 تغييرات في 300 ثانية
save 300 10
# الحفظ عند 10000 تغيير في 60 ثانية
save 60 10000
# اسم ملف RDB
dbfilename dump.rdb
# مجلد RDB
dir /var/lib/redis
يُلحق AOF كل عملية كتابة بملف سجل، مما يوفر استمرارية أكثر موثوقية:
# تفعيل AOF
appendonlyfile yes
# اسم ملف AOF
appendfilename 'appendonly.aof'
# سياسة المزامنة
# always: عند كل كتابة (الأكثر أماناً، الأبطأ)
# everysec: كل ثانية (موصى به)
# no: اترك للنظام (الأسرع، الأقل أماناً)
appendsync everysec
# عتبة إعادة كتابة AOF
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
يُوصى باستخدام كل من RDB و AOF في بيئة الإنتاج. يوفر RDB إعادة تشغيل سريعة، بينما يقلل AOF من فقدان البيانات.
# تحديث قائمة الحزم
apt update
# تثبيت Memcached
apt install -y memcached libmemcached-tools
# التحقق من حالة الخدمة
systemctl status memcached
# تفعيل التشغيل التلقائي
systemctl enable memcached
# تثبيت Memcached
dnf install -y memcached
# تشغيل الخدمة وتفعيلها
systemctl start memcached
systemctl enable memcached
# تعديل ملف التكوين
nano /etc/memcached.conf
# حد الذاكرة (ميغابايت)
-m 256
# عنوان الاستماع
-l 127.0.0.1
# المنفذ
-p 11211
# الحد الأقصى للاتصالات
-c 1024
# عدد الخيوط (بناءً على أنوية المعالج)
-t 4
# الحجم الأقصى للكائن (بايت)
-I 1m
# إعادة تشغيل الخدمة
systemctl restart memcached
# اختبار الاتصال
echo 'stats' | nc 127.0.0.1 11211
# الاتصال عبر telnet
telnet 127.0.0.1 11211
# تعيين قيمة (مفتاح، علامة، TTL ثواني، حجم بايت)
set جلسة:xyz 0 3600 12
بيانات_المستخدم
# الحصول على قيمة
get جلسة:xyz
# حذف قيمة
delete جلسة:xyz
# عرض الإحصائيات
stats
# مسح جميع البيانات
flush_all
# تثبيت امتداد PHP Redis
apt install -y php-redis
systemctl restart php8.x-fpm
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('كلمةمرورRedisقوية123!');
// الكتابة في التخزين المؤقت
$redis->setex('مستخدم:1', 3600, json_encode(['اسم' => 'أحمد', 'email' => 'ahmed@example.com']));
// القراءة من التخزين المؤقت
$بيانات = $redis->get('مستخدم:1');
if ($بيانات) {
$مستخدم = json_decode($بيانات, true);
} else {
// الجلب من قاعدة البيانات والتخزين المؤقت
$مستخدم = جلب_من_قاعدة_البيانات(1);
$redis->setex('مستخدم:1', 3600, json_encode($مستخدم));
}
# تثبيت حزمة ioredis
npm install ioredis
const Redis = require('ioredis');
const redis = new Redis({
host: '127.0.0.1',
port: 6379,
password: 'كلمةمرورRedisقوية123!'
});
// الكتابة في التخزين المؤقت
await redis.setex('منتج:42', 1800, JSON.stringify({ اسم: 'لابتوب', سعر: 999 }));
// القراءة من التخزين المؤقت
const بيانات = await redis.get('منتج:42');
if (بيانات) {
const منتج = JSON.parse(بيانات);
console.log(منتج);
}
// مسح التخزين المؤقت
await redis.del('منتج:42');
# تثبيت حزمة redis-py
pip install redis
import redis
import json
r = redis.Redis(
host='127.0.0.1',
port=6379,
password='كلمةمرورRedisقوية123!',
decode_responses=True
)
# الكتابة في التخزين المؤقت
r.setex('مقال:5', 7200, json.dumps({'عنوان': 'دليل Redis', 'محتوى': '...'}))
# القراءة من التخزين المؤقت
بيانات = r.get('مقال:5')
if بيانات:
مقال = json.loads(بيانات)
# إدارة خدمة Redis
systemctl start redis-server
systemctl stop redis-server
systemctl restart redis-server
systemctl status redis-server
# عرض سجلات Redis
journalctl -u redis-server -f
tail -f /var/log/redis/redis-server.log
# الحصول على معلومات Redis عبر CLI
redis-cli INFO server
redis-cli INFO memory
redis-cli INFO stats
# إدارة خدمة Memcached
systemctl start memcached
systemctl stop memcached
systemctl restart memcached
systemctl status memcached
Redis و Memcached حلول تخزين مؤقت قوية تحسّن أداء التطبيقات بشكل ملحوظ. تجعل هياكل البيانات الغنية وميزات الاستمرارية في Redis منه مثالياً لمعظم السيناريوهات، بينما يمكن تفضيل Memcached لاحتياجات التخزين المؤقت البسيطة عالية الأداء. يعمل كلا النظامين بسلاسة على خوادم REXE.
يُوصى بـ Redis للمشاريع الجديدة. يوفر هياكل بيانات غنية تتجاوز السلاسل — Hash و List و Set و Sorted Set؛ يوفر الاستمرارية مع RDB و AOF؛ يدعم Pub/Sub للمراسلة وLua scripting. يُفضَّل Memcached فقط للتخزين المؤقت البسيط للسلاسل وأقصى أداء متعدد الخيوط. لمعظم تطبيقات الويب، Redis هو الخيار الأفضل.
أكثر السياسات شيوعاً: allkeys-lru (حذف الأقل استخداماً مؤخراً من جميع المفاتيح — موصى به للتخزين المؤقت العام)، volatile-lru (LRU بين المفاتيح ذات TTL — للاستخدام المختلط)، allkeys-lfu (حذف الأقل استخداماً تكراراً — لأنماط الوصول المتكررة)، noeviction (إرجاع خطأ عند امتلاء الذاكرة — للبيانات الحيوية). للتخزين المؤقت العام، allkeys-lru هو الخيار الأكثر أماناً.
استخدام كليهما معاً هو أفضل نهج. يأخذ RDB لقطات دورية ويوفر إعادة تشغيل سريعة، لكن البيانات منذ آخر لقطة قد تُفقد. يسجّل AOF كل عملية كتابة ويقلل من فقدان البيانات لكنه يستخدم المزيد من I/O للقرص. في الإنتاج، فعّل كليهما: RDB مع توجيهات save و AOF مع appendonlyfile yes.
في redis.conf، غيّر bind 127.0.0.1 إلى bind 0.0.0.0 وعيّن كلمة مرور قوية باستخدام requirepass. ثم افتح المنفذ 6379 في جدار الحماية: ufw allow 6379/tcp. لأسباب أمنية، يُوصى باستخدام SSH tunneling أو VPN بدلاً من تعريض Redis مباشرة للإنترنت. إن أمكن، قيّد الوصول بعناوين IP محددة.
لا، Memcached نظام قائم على الذاكرة بالكامل بدون دعم للاستمرارية. تُفقد جميع البيانات عند إعادة تشغيل الخادم. لذلك يجب استخدام Memcached فقط للبيانات المؤقتة القابلة لإعادة التوليد. لتخزين البيانات الدائمة أو إدارة الجلسات، استخدم Redis بدلاً من ذلك.
استخدم redis-cli INFO memory لرؤية إحصائيات الذاكرة التفصيلية. انتبه إلى used_memory (الذاكرة المستخدمة) و maxmemory (الحد الأقصى) و mem_fragmentation_ratio (نسبة التجزئة). إذا تجاوزت نسبة التجزئة 1.5، يمكنك تحسين الذاكرة بأمر MEMORY PURGE. يمكنك أيضاً مراقبة الإحصائيات في الوقت الفعلي باستخدام redis-cli --stat.
تثبيت MySQL و MariaDB على Linux خطوة بخطوة، mysql_secure_installation، إنشاء قواعد البيانات والمستخدمين، أوامر SQL الأساسية، تكوين الوصول عن بُعد وضبط الأداء.
تثبيت PostgreSQL على Ubuntu/Debian وRHEL/CentOS، إنشاء المستخدمين وقواعد البيانات، أوامر SQL الأساسية، إعداد الاتصال عن بُعد واستراتيجيات النسخ الاحتياطي. دليل خطوة بخطوة.
دليل خطوة بخطوة لتثبيت phpMyAdmin على Apache وNginx، وإعداد SSL، وإدارة المستخدمين، وتقييد IP، وتعزيز الأمان.