در این آموزش قصد راه اندازی همتاسازی (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 خطایی نخواهد داد، اما همتاسازی کار نخواهد کرد.