راه اندازی MySQL Replication در Centos, RHEL, Fedora

در این آموزش قصد راه اندازی همتاسازی (replication) را بین دو سیستم mysql را داریم.

به بیان ساده، همتاسازی عبارت است از تکرار محتوا و فعالیت های یک پایگاه داده در سیستم های دیگر. این قابلیت در سیستم های grid و همچنین سیستم های با قابلیت HA کاربرد دارد.

ابتدا معماری شبکه که قصد راه اندازی این سرویس را داریم را باید مشخص کنیم. ما در اینجا دو سیستم که سیستم عامل centos نسخه 6 بر روی آنها نصب شده است استفاده میکنیم. این سیستم ها میتواند به صورت مجازی نیز نصب شده باشد. تنظیمات سیستم ها به صورتزیر میباشد

سیستم اصلی(master):

ip: 192.168.100.1

سیستم جایگزین(Slave):

ip: 192.168.100.2

  • مرحله اول: تنظیم سیستم اصلی

در این مرحله سرویس mysql را نصب کرده و قابلیت همتاسازی را در آن فعال میکنیم.

نصب سرویس mysql بر روی سیستم اصلی

نصب سرویس mysql به سادگی میتواند توسط دستور YUM انجام شود.

# yum install mysql-server mysql

تنظیمات MySQL در سیستم اصلی

فایل my.cfg را با یک ویرایشگر باز کنید:

# nano /etc/my.cnf

خطوط زیر را در زیر قسمت [mysqld] اضافه کنید (نام پایگاه داده مورد نظر خود را به جای database قرار دهید):

server-id = 1
binlog-do-db=database
log-bin = mysql-bin

سرویس mysql را ریستارت کنید

# /etc/init.d/mysqld restart

برای اینکه دو پایگاه در شروع یکی باشند، از پایگاه داده اصای خود یک دامپ تهیه کنید:

ابتدا به پایگاه داده خود وارد شوید:

# mysql -u root -p
mysqldump -u root -p --all-databases --master-data > /root/dbdump.db

این فایل را با حافظه فلش یا با دستور زیر به سیستم مقصد منتقل کنید:

scp /root/dbdump.db sanay_specu@192.168.100.2:/root/

به سرویس mysql خود وارد شده و تنظیمات زیر را انجام دهید:

فعال سازی قابلیت همتاسازی برای کاربر سیستم ثانیه(این کاربر، یک کاربر تنها مختص mysql بوده و نمیتواند با آن بر روی سیستم کار کرد)

مقدار slavepass را با نام کاربری مورد نظر جایگزین کنید.

مقدار slave_user را با نام کاربری مورد نظر جایگزین کنید.
مقدار 192.168.100.2 را با IP سیستم ثانویه جایگزین کنید.

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'192.168.100.2' IDENTIFIED BY 'slavepass';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

 

خروجی این مرحله به صورت زیر خواهد بود:

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      320 |              |                  | 
+------------------+----------+--------------+------------------+

در این قسمت باید مقدار مشخصه File و Position را یادداشت کنیم(این مقادیر در سیستم ثانویه استفاده خواهد شد).

دستور زیر را در انتها وارد کنید و از سرویس mysql خارج شوید:

UNLOCK TABLES;
  • تنظیمات MySQL در سیستم ثانویه

فایل my.cfg را باز کنید:

# nano /etc/my.cnf

پایگاه داده ای را که در سیستم اصلی دامپ گرفته بودید را در سیستم ثانیه وارد کنید:

# mysql -u root -p < /root/dbdump.db

خط زیر را در زیر قسمت [mysqld] اضافه کنید

server-id=2

سرویس mysql را ریستارت کنید:

# /etc/init.d/mysqld restart

در نسخه های بعد از 5 سرویس mysql، تنظیمات فایل my.cfg برای تنظیمات همتاسازی در نظر گرفته نمیشود و باید با دستور GHANGE MASTER TO این عمل انجام شود.

در سرویس mysql وارد شوید و دستورات زیر را وارد کنید:

مقادیر مشخص شده را با مقادیری که در سیستم اصلی یادداشت کرده بودید جایگزین کنید:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='192.168.100.1', 
	MASTER_USER='slave_user', 
	MASTER_PASSWORD='slavepass', 
	MASTER_LOG_FILE='mysql-bin.000004', 
	MASTER_LOG_POS=320;

همتاسازی را فعال کنید:

START SLAVE;
  • تست کارکرد

دستور زیر را در mysql وارد کنید:

SHOW SLAVE STATUS\G;

خروجی باید مشابه زیر باشد:

*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 192.168.100.1
                Master_User: slave_user
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000003
        Read_Master_Log_Pos: 320
             Relay_Log_File: mysqld-relay-bin.000003
              Relay_Log_Pos: 235
      Relay_Master_Log_File: mysql-bin.000003
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: 
        Replicate_Ignore_DB: 
         Replicate_Do_Table: 
     Replicate_Ignore_Table: 
    Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
                 Last_Errno: 0
                 Last_Error: 
               Skip_Counter: 0
        Exec_Master_Log_Pos: 314
            Relay_Log_Space: 235
            Until_Condition: None
             Until_Log_File: 
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File: 
         Master_SSL_CA_Path: 
            Master_SSL_Cert: 
          Master_SSL_Cipher: 
             Master_SSL_Key: 
      Seconds_Behind_Master: 0

برای تست کارکرد، یک مقدار جدید به یکی از جداول پایگاه داده خود در سیستم اصلی  اضافه کنید و در سیستم ثانویه میتوانید مقدار اضافه شده را مشاهده کنید.


  • توجه

پورت 3306 را در هر دو سیستم باید باز کنید(دستورات زیر را وارد کنید):

iptables -I INPUT -p udp -m state --state NEW --dport 3306 -j ACCEPT 
iptables -I INPUT -p tcp -m state --state NEW --dport 3306 -j ACCEPT 

در هنگام تغییر فایل کانفیگ my.cfg به محل قرار دادن کدهای جدید دقت کنید. معمولا قسمت اول شامل تگ [mysqld] است. اگر در محل نامناسب قرار گیرد، سرویس mysql خطایی نخواهد داد، اما همتاسازی کار نخواهد کرد.

برگرفته شده از luxos.blog.ir

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *