آموزش کامل راه‌اندازی Replication در MySQL به روش Master-Slave پرینت


# 🔁 آموزش کامل راه‌اندازی Replication در MySQL به روش Master-Slave

یکی از امکانات قدرتمند MySQL، **Replication** است؛ فرآیندی که به کمک آن می‌توان داده‌ها را از یک سرور اصلی (Master) به یک یا چند سرور تابع (Slave) همگام‌سازی کرد.

این قابلیت برای:

* توزیع بار خواندن (read)
* پشتیبان‌گیری بدون توقف سرور اصلی
* افزایش دسترس‌پذیری

بسیار کاربردی است.

---

## 🧱 پیش‌نیازها

* دو سرور لینوکس: یکی برای Master و دیگری برای Slave
* نصب MySQL یا MariaDB روی هر دو
* تنظیم hostname و IP استاتیک برای هر دو سیستم
* تنظیم فایروال برای اجازه دسترسی پورت 3306 (پیش‌فرض MySQL)

---

## 🛠️ مراحل راه‌اندازی Master-Slave Replication

---

### ✅ ۱. تنظیمات سرور Master

#### 🔹 فایل کانفیگ MySQL را ویرایش کنید:

```bash
sudo nano /etc/mysql/my.cnf
```

یا در برخی سیستم‌ها:

```bash
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
```

🔽 پارامترهای زیر را اضافه یا فعال کنید:

```ini
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = mydb # فقط این دیتابیس را replicate کند
```

> ⚠️ توجه: مسیر `log_bin` باید موجود و قابل نوشتن باشد.

---

#### 🔹 راه‌اندازی مجدد MySQL:

```bash
sudo systemctl restart mysql
```

---

#### 🔹 ایجاد کاربر replication:

```sql
CREATE USER 'replicator'@'%' IDENTIFIED BY 'repl_pass';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
```

---

#### 🔹 قفل نوشتن برای گرفتن snapshot:

```sql
FLUSH TABLES WITH READ LOCK;
```

در همین حالت، در ترمینال دیگری این دستور را اجرا کنید:

```bash
mysqldump -u root -p --all-databases --master-data > fullbackup.sql
```

فایل را به سرور Slave منتقل کنید:

```bash
scp fullbackup.sql user@slave_ip:/tmp/
```

🔴 قفل را تا پایان بکاپ آزاد نکنید.

---

### ✅ ۲. تنظیمات سرور Slave

#### 🔹 فایل کانفیگ Slave:

```ini
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
```

سپس MySQL را ری‌استارت کنید:

```bash
sudo systemctl restart mysql
```

---

#### 🔹 وارد کردن فایل بکاپ:

```bash
mysql -u root -p < /tmp/fullbackup.sql
```

---

### ✅ ۳. اتصال Slave به Master

ابتدا IP سرور Master و موقعیت binlog را از فایل بکاپ پیدا کنید (دستور `--master-data` آن را درون فایل ثبت می‌کند):

سپس در MySQL وارد شوید و:

```sql
CHANGE MASTER TO
MASTER_HOST='IP_MASTER',
MASTER_USER='replicator',
MASTER_PASSWORD='repl_pass',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS= 154;

START SLAVE;
```

---

### ✅ ۴. بررسی وضعیت

```sql
SHOW SLAVE STATUS\G
```

مقدارهای زیر باید `Yes` باشند:

* `Slave_IO_Running: Yes`
* `Slave_SQL_Running: Yes`

---

## 🧪 تست Replication

در Master:

```sql
USE mydb;
CREATE TABLE test (id INT);
INSERT INTO test VALUES (1);
```

در Slave:

```sql
SELECT * FROM mydb.test;
```

باید داده‌ها را ببینید ✅

---

## 🛡️ نکات امنیتی و نگهداری

* دسترسی کاربر replication را محدود به IP سرور Slave کنید.
* رمز عبور کاربر replication را امن نگه دارید.
* در صورت نیاز به چند Slave، فقط کافیست از Master برای هر یک اتصال جداگانه ایجاد کنید.
* مانیتور وضعیت Slave به‌صورت دوره‌ای با ابزارهایی مثل `zabbix`, `Prometheus`, `pt-heartbeat` انجام شود.

---

## ✅ نتیجه‌گیری

راه‌اندازی Replication در MySQL یکی از روش‌های مهم افزایش تحمل خطا و مقیاس‌پذیری دیتابیس‌هاست. با استفاده از روش Master-Slave می‌توانید بار خواندن را بین چند سرور تقسیم و دسترس‌پذیری سرویس‌ها را بالا ببرید.

 


آیا این پاسخ به شما کمک کرد؟

  • 0
« برگشت