پیکربندی Replication در MySQL و MariaDB: راهاندازی Read Replica
وقتی حجم درخواستهای خواندن (Read) از پایگاه داده افزایش مییابد، تکیه بر یک سرور واحد میتواند به گلوگاه عملکردی تبدیل شود. Replication با ایجاد یک یا چند نسخه Read Replica از پایگاه داده اصلی، امکان توزیع بار خواندن و افزایش دسترسپذیری را فراهم میکند.
Replication چگونه کار میکند؟
در معماری Master-Slave، تمام عملیات نوشتن (Write) روی سرور اصلی (Master) انجام میشود و تغییرات از طریق Binary Log به سرور یا سرورهای فرعی (Replica) منتقل میشود. اپلیکیشن میتواند درخواستهای خواندن را به Replicaها هدایت کند تا فشار از روی سرور اصلی برداشته شود.
پیکربندی سرور Master
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = production_dbCREATE USER 'replica_user'@'%' IDENTIFIED BY 'PasswordStrong123';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;پیکربندی سرور Replica
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.logCHANGE MASTER TO
MASTER_HOST='master-server-ip',
MASTER_USER='replica_user',
MASTER_PASSWORD='PasswordStrong123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS= 154;
START SLAVE;
SHOW SLAVE STATUS\Gبررسی وضعیت Replication
پس از راهاندازی، باید مقادیر Slave_IO_Running و Slave_SQL_Running هر دو برابر Yes باشند تا از سلامت فرآیند تکرار اطمینان حاصل شود.
نکات مهم در استفاده عملی
- پیش از راهاندازی Replication، مطمئن شوید که مدیریت کاربران و دسترسیهای پایگاه داده بهدرستی انجام شده است؛ جزئیات این موضوع در مقاله آموزش ساخت کاربر در MySQL و دادن دسترسیها آمده است.
- Replication جایگزین بکاپگیری منظم نیست، بلکه مکمل آن است؛ زیرا خطاهای انسانی مانند حذف اشتباه داده به Replicaها نیز منتقل میشوند.
- برای کوئریهای پیچیده روی Replica، بهینهسازی صحیح کوئری همچنان اهمیت دارد و در مقاله آموزش استفاده از کوئریهای تو در تو در SQL بررسی شده است.
جمعبندی
راهاندازی Read Replica یکی از راههای مؤثر برای افزایش عملکرد و دسترسپذیری پایگاه داده در پروژههای با ترافیک بالاست و پایهای برای معماریهای مقیاسپذیرتر مانند Redis Cluster یا Sharding محسوب میشود.
بهینهسازی کوئری روی Replicaها
راهاندازی Read Replica بهتنهایی تضمینکننده سرعت بالا نیست؛ کوئریهایی که روی Replicaها اجرا میشوند نیز باید بهدرستی بهینه شده باشند تا از ظرفیت جدید به بهترین شکل استفاده شود. تکنیکهای کامل بهینهسازی کوئری در مقاله بهینهسازی کوئریهای MySQL آمده است.