SQL replication فرآیندی است که از طریق آن دادهها از یک پایگاه داده به پایگاه دادههای دیگر کپی میشود تا
سازگاری و تداوم دادهها حفظ شود. این فرایند میتواند برای افزایش دسترسی به دادهها، بهبود عملکرد سیستم و تضمین پشتیبانگیری و بازیابی در مواقع خرابی استفاده شود.
انواع مختلفی از SQL replication وجود دارد که هر کدام کاربردها و مزایای خاص خود را دارند:
Replication (Single-Master Replication)
- در این نوع replication، یک پایگاه داده به عنوان منبع اصلی داده (استاد) عمل میکند و تغییرات در این پایگاه داده به سایر پایگاههای داده (تکرارگرها) منتقل میشود.
(Replication (Multi-Master Replication
- در این مدل، چندین پایگاه داده به طور همزمان به عنوان استاد عمل میکنند و میتوانند تغییرات را به یکدیگر منتقل کنند. این نوع replication برای توزیع دادهها در چندین مکان و افزایش دسترسی بسیار مفید است.
(Replication (Synchronous Replication
- در این روش، تغییرات به صورت همزمان در هر دو پایگاه داده اصلی و تکرارگر ثبت میشوند. این به معنای آن است که تغییرات باید در هر دو پایگاه داده ثبت شود قبل از اینکه تراکنش کامل شود. این روش تضمین میکند که دادهها در هر دو پایگاه داده همواره یکسان هستند، ولی ممکن است باعث کاهش عملکرد شود.
Replication (Asynchronous Replication)
- در این روش، تغییرات ابتدا در پایگاه داده اصلی ثبت میشوند و سپس در زمان مناسب به پایگاه داده تکرارگر منتقل میشوند. این روش میتواند باعث افزایش عملکرد شود، ولی ممکن است در برخی موارد منجر به ناهماهنگی دادهها شود.
Replication (Log-Based Replication)
- در این روش، تغییرات از طریق لاگهای تراکنش (transaction logs) پایگاه داده اصلی به پایگاه داده تکرارگر منتقل میشوند. این روش برای بهبود عملکرد و کاهش بار روی پایگاه داده اصلی مفید است.
مزایای SQL Replication
- **افزایش دسترسی:** با داشتن نسخههای متعدد از دادهها، احتمال دسترسی به دادهها حتی در صورت خرابی یک سرور افزایش مییابد.
- **بهبود عملکرد:** بار کاری روی سرورهای پایگاه داده میتواند توزیع شود و از یک سرور به چندین سرور منتقل شود.
- **پشتیبانگیری و بازیابی:** امکان بازیابی سریعتر دادهها در صورت بروز مشکل.
- **موقعیتیابی دادهها:** دادهها میتوانند در نزدیکی کاربران نهایی قرار گیرند تا زمان تاخیر دسترسی به دادهها کاهش یابد.
چالشها و معایب
- **پیچیدگی مدیریتی:** پیادهسازی و مدیریت replication میتواند پیچیده باشد.
- **هماهنگی دادهها:** تضمین هماهنگی دادهها در صورت استفاده از روشهای غیرهمزمان.
- **بار اضافی:** ممکن است بار اضافی روی شبکه و سرورها ایجاد شود.
به طور کلی، انتخاب روش مناسب replication بستگی به نیازهای خاص سیستم، عملکرد مورد انتظار، و سطح دسترسی و پایداری مورد نیاز دارد.
مراحل اجرای replication :
1. Setup Docker Compose
version: "3"
services:
mysql-master:
image: mysql:latest
container_name: mysql-master
command: --server-id=1 --log-bin=mysql-bin --binlog-format=row
environment:
MYSQL_ROOT_PASSWORD: your_super_secure_root_password
MYSQL_DATABASE: mydatabase # Feel free to change this database name
MYSQL_USER: replication_user # This user will handle replication
MYSQL_PASSWORD: your_super_secure_replication_password
ports:
- "3306:3306"
mysql-slave:
image: mysql:latest
container_name: mysql-slave
depends_on:
- mysql-master
command: --server-id=2 --log-bin=mysql-bin --binlog-format=row
environment:
MYSQL_ROOT_PASSWORD: your_super_secure_root_password # Same password for both
MYSQL_DATABASE: mydatabase
MYSQL_USER: replication_user
MYSQL_PASSWORD: your_super_secure_replication_password
ports:
- "3307:3306"
docker-compose up -d
docker exec -it mysql-master bash
mysql -uroot -p
ALTER USER 'replication_user'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'replication_password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
4. Configure the Replica Server
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='replication_user',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='mysql-bin.xxxxxx',
MASTER_LOG_POS=xxxx;
START SLAVE;
show slave status \G;
بعد از زدن این دستور باید Seconds_Behind_Master: برابر 0 باشد، این بین معنی است که replication بین master , slave بطور کامل برقرار است