MySQL replication، یک فرایند کپی کردن داده‌ها از یک سرور پایگاه‌داده master به یک یا چند سرور slave می‌باشد.

MySQL، از چندین توپولوژی همسان‌‌سازی (replication) پشتیبانی می‌کند و توپولوژی Master/Slave یکی از محبوب‌ترین توپولوژی ها است که در آن یک سرور پایگاه‌داده به‌عنوان master و یک یا چند سرور دیگر به عنوان salve (یا فرمانپذیر) عمل می‌کنند.

 

به‌طور پیش‌فرض، همسان‌‌سازی بصورت غیرهمزمان است؛ بدین معنی که master رویدادهایی را مبنی بر تغییر پایگاه‌داده به فایل گزارش باینری خود ارسال می‌کند و slaveها زمانی که آماده هستند، آن رویدادها را درخواست می‌نمایند.

 

این مطلب نیز ممکن است برای شما مفید باشد: بررسی پایگاه داده MySQL و MariaDB و اندازه جدول در لینوکس

 

در این راهنما، ما به شما نحوه تنظیم MariaDB Master/Slave replication را با یک سرور master و یک سرور slave در Debian 10  نشان خواهیم داد. MariaDB، اجرای پیش فرض MySQL در Debian است. همین مراحل برای Oracle MySQL نیز قابل اعمال است.

این نوع توپولوژی همسان‌‌سازی، مناسب‌ترین توپولوژی برای پشتیبان‌گیری از پایگاه‌داده‌ها است.

در این آموزش، فرض بر این است که شما دو سرور Debian 10 در حال اجرا دارید؛ بطوریکه آن‌ها با یکدیگر از طریق یک شبکه خصوصی ارتباط برقرار می‌کنند. اگر سرور میزبان شما از آدرس های IP خصوصی پشتیبانی نمی‌کند، می‌توانید از آدرس‌های IP عمومی استفاده کرده و فایروال خود را پیکربندی نمایید؛ به‌گونه‌ای که عبور ترافیک را تنها از منابع قابل اعتماد و برروی پورت 3306 اجازه دهد.

سرورهای مورد استفاده در این مثال دارای آدرس های IP زیر هستند:

Master IP: 10.10.8.12
Slave IP:  10.10.8.164

 

نصب MariaDB

مخزن‌های پیش فرض Debian 10 شامل نسخه 10.3 MariaDB است. بهتر است برای جلوگیری از بروز مشکلات احتمالی، همان نسخه MariaDB را روی هر دو سرور نصب نمایید.

MariaDB را با اجرای دستورات زیر بر روی سرور master و slave نصب کنید:

$ sudo apt-get update
$ sudo apt-get install mariadb-server

 

پیکربندی سرور master

اولین قدم، راه‌اندازی سرور master است. در اینجا، تغییرات زیر را انجام خواهیم داد:

  • تنظیم سرور MariaDB برای شنود برروی IP خصوصی
  • تنظیم شناسه سرور بصورت منحصر به فرد
  • فعال‌سازی گزارش دودویی (binary logs - binlog)

فایل پیکربندی MariaDB را باز کرده و خطوط زیر را از حالت کامنت بیرون آورید و یا در صورت عدم وجود، آن‌ها را وارد نمایید:

$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
              master:/etc/mysql/mariadb.conf.d/50-server.cnf

bind-address           = 10.10.8.12
server-id              = 1
log_bin                = /var/log/mysql/mysql-bin.log

سپس فایل را ذخیره کرده و سرویس MySQL را مجدداً راه‌اندازی نمایید تا تغییرات اعمال شود:

$ sudo systemctl restart mariadb

قدم بعدی، ایجاد یک کاربر جدید replication است. به‌عنوان کاربر root به سرور MariaDB وارد شوید:

$ sudo mysql

برای ایجاد یک کاربر با نام replica و اعطای امتیاز REPLICATION SLAVE به کاربر، کوئری‌های SQL زیر را اجرا کنید:

mysql> CREATE USER 'replica'@'10.10.8.164' IDENTIFIED BY 'replica_password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replica'@'10.10.8.164';

 

دقت کنید که حتما IP را با آدرس IP مربوط slave خود تغییر دهید. شما می‌توانید این کاربر را با هر نامی که بخواهید نامگذاری نمایید.

پس از آن، دستور زیر را اجرا کنید تا نام فایل و مکان آن را بصورت باینری چاپ نماید.

mysql> SHOW MASTER STATUS\G
Output:
*************************** 1. row ***************************
            File: mysql-bin.000001
        Position: 328
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.001 sec)

به نام فایل یعنی ‘mysql-bin.000001’ و موقعیت آن یعنی ‘328’ توجه کنید. این مقادیر، هنگام پیکربندی سرور slave نیاز هستند و احتمالاً در سرور شما متفاوت خواهد بود.

 

پیکربندی سرور Slave

در این مرحله، باید همان تغییراتی که برروی سرور master اعمال کردیم، برروی سرور slave نیز اعمال نماییم:

  • تنظیم سرور MariaDB، برای شنود برروی IP خصوصی
  • تنظیم شناسه سرور بصورت منحصر به فرد
  • فعال‌سازی گزارش دودویی (binary logs - binlog)

فایل پیکربندی MariaDB را باز کرده و خطوط زیر را ویرایش نمایید:

$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
          slave:/etc/mysql/mariadb.conf.d/50-server.cnf

bind-address           = 10.10.8.164
server-id              = 2
log_bin                = /var/log/mysql/mysql-bin.log

سرویس MariaDB را مجدداً راه‌اندازی کنید:

$ sudo systemctl restart mariadb

مرحله بعدی تنظیم پارامترهایی است که سرور slave برای اتصال به سرور master از آن استفاده خواهد کرد. وارد پوسته MariaDB شوید:

$ sudo mysql

تردهای (threads) سرور slave را به صورت زیر متوقف نمایید:

mysql> STOP SLAVE;

برای پیکربندی Master/Slave replication، کوئری زیر را اجرا کنید:

mysql> CHANGE MASTER TO
mysql> MASTER_HOST='10.10.8.12',
mysql> MASTER_USER='replica',
mysql> MASTER_PASSWORD='replica_password',
mysql> MASTER_LOG_FILE='mysql-bin.000001',
mysql> MASTER_LOG_POS=328;

اطمینان حاصل کنید که از آدرس IP، نام کاربری و رمز عبور صحیحی استفاده می‌کنید. نام و موقعیت فایل گزارش باید برابر با مقادیری باشد که از سرور master به دست آورده‌اید.

پس از آن، تردهای slave را راه‌اندازی نمایید.

mysql> START SLAVE;

 

تست پیکربندی

برای اطمینان از اینکه همه چیز به درستی راه‌اندازی می‌شود، یک پایگاه‌داده جدید در سرور master ایجاد کنید:

$ sudo mysql
mysql> CREATE DATABASE replicatest;

وارد پوسته MySQL مربوط به سرور slave شوید:

$ sudo mysql

دستور زیر را برای نمایش لیست تمام پایگاه‌داده‌ها اجرا نمایید:

mysql> SHOW DATABASES;

در اینجا، متوجه خواهید شد که پایگاه‌داده‌ای که در سرور master ایجاد کرده‌اید بر روی slave همسان‌‌سازی شده است:

Output:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| replicatest        |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

 

 

منبع:

linuxize