استفاده از GTID، به خصوص در محیط‌هایی که نیاز به اطمینان بالا، مدیریت پیشرفته و کاهش خطا دارند، یک انتخاب بسیار مؤثر است. با این حال، برای بهره‌برداری بهتر از GTID، باید سیستم را به درستی پیکربندی کرده و با محدودیت‌ها و نیازهای خاص محیط خود هماهنگ کرد.

از جمله مزایای استفاده از GTID موارد زیر می باشند:

  • ردیابی منحصر به فرد تراکنش ها
  • مدیریت آسان failover
  • ساده سازی راه اندازی رپلیکیشن
  • بازیابی خودکار
  • حذف خطای انسانی
  • پشتیبانی از تغییرات پویا در توپولوژی رپلیکیشن
  • امکان مقیاس پذیریبیشتر
  • سازگار با ابزارهای پیشرفته
  • بهبود کارایی در سناریوهای failback
  • کاهش پیچیدگی ریکاوری داده ها

در این نوشته ما ۳ سرور داریم که یک مستر و ۲ اسلیو گرفته شده از آن را بدون gtid داریم و نیاز است تا بر روی آنها gtid فعال شود.

در گام اول، لازم است تا متغییر gtid_domain_id به ازاء هر کدام از سرورها مقدار دهی شود.

SET GLOBAL gtid_domain_id = 1;

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

STOP SLAVE;
SHOW SLAVE STATUS \G

*************************** 1. row ***************************
Slave_IO_State: NULL
Master_Host: 192.168.56.101
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mariadb-bin.000001
Read_Master_Log_Pos: 510
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 642
Relay_Master_Log_File: mariadb-bin.000001
Slave_IO_Running: No
Slave_SQL_Running: No
...
Exec_Master_Log_Pos: 510
...
1 row in set (0.00 sec)

در خروجی حاصل، مقدار ۲ متغییر برای به دست آوردن gtid از روی سرور مستر بسیار مورد نیاز می باشد. Relay_master_log_file و Exec_Master_Log_Pos. روی سرور مستر، مقادیر این دو متغییر برای دستور BINLOG_GTID_POS لازم هستند.

SELECT BINLOG_GTID_POS('mariadb-bin.000001', 510);
+--------------------------------------------+
| BINLOG_GTID_POS('mariadb-bin.000001', 510) |
+--------------------------------------------+
| 1-101-1                                    |
+--------------------------------------------+
1 row in set (0.00 sec)

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

SET GLOBAL gtid_slave_pos = '1-101-1';
CHANGE MASTER TO master_use_gtid=slave_pos;
START SLAVE;

در پایان، برای چک وضعیت به صورت زیر عمل می شود:

MariaDB [mysql]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.56.101
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mariadb-bin.000001
Read_Master_Log_Pos: 510
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 642
Relay_Master_Log_File: mariadb-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Exec_Master_Log_Pos: 510
...
Using_Gtid: Slave_Pos
Gtid_IO_Pos: 1-101-1
1 row in set (0.00 sec)

مشخصا، gtid فعال شده است. این پروسه را روی تمامی سرورهای اسلیو دیگر باید اجرا شود.

منابع

برچسب ها: database mariadb learn replication