در آموزش زیر تنظیمات Master-Slave Replication در MySQL را بر روی سیستم های RHEL 6.3/6.2/6.1/6/5.8 - CentOS 6.3/6.2/6.1/6/5.8 و Fedora 17,16,15,14,13,12 آموزش خواهیم داد. البته مقاله ریپلیکیت به صورت اختصاصی برای سیستم عامل CentOS 6.3 نوشته شده است اما روی ورژن های قدیمی تر لینوکس با MySQL 5.X هم کار میکند.
MySQL Master/Slave Replication در معقوله های Data Security, Fail-over Solution, Database Backup from Slave, Analytics و غیره بسیار مفید است برای انجام پروسه Replication ما از موارد زیر استفاده میکنیم. البته در سناریو شما ممکن است متفاوت باشد :
همچنین توصیه میشود مطالعه کنید.
آموزش نصب MariaDB 10 در CentOS 7/8 - RedHat 7/8 - Debian 8/9/10 - Ubuntu 16/18/19
آموزش دستورات پایه ای و مقدماتی MySQL/MariaDB - بخش 1
آموزش mysql پیشرفته
آموزش تصویری کار با MySQL
نحوه بک آپ گیری از MySQL/MariaDB و ریستور کردن دیتابیس
نحوه پیدا کردن مسیر my.cnf - http.conf / apache2.conf - php.ini در لینوکس (Apache, PHP و MySQL)
ترفندهای مفید برای افزایش سرعت و بهینه سازی دیتابیس MySQL/MariaDB
نحوه Replication کردن MySQL (یا Master-Slave Replication)
در این سناریو ما 2 سرور داریم که یکی با ip 192.168.1.1 به عنوان Master و دیگری با ip address 192.168.1.2 به عنوان slave میباشد. ما این آموزش را در 2 بخش تنظیم کردیم تا درک آن برای شما آسانتر باشد. در بخش اول server master را کانفیگ خواهیم کرد و در بخش دوم به server slave خواهیم پرداخت.
بخش اول
تنظیمات سرور Master با Ip 192.168.1.1 به منظور Replication :
در این بخش نصب mysql و تنظیمات replication را خواهیم داشت.
نصب MySQL روی سرور Master :
در ابتدا کار خود را با نصب mysql با استفاده از دستور yum آغاز خواهیم کرد. اگر سیستم عامل شما از قبل روی آن mysql روی آن نصب بود این مرحله را نادیده بگیرید :
تنظیم یک mysql در سرور master :
فایل my.cnf را با استفاده از ادیتور vi/vim باز کنید :
خطوط زیر را تحت بخش [mysqld] اضافه کنید و فراموش نکنید که linux-zone را با نام دیتابیس خودتان که میخواهید روی slave (اسلیو) replicate شود جابه جا کنید :
سپس سرویس mysql را restart کنید :
با یوزر root به mysql خود login کنید و یوزر slave را ایجاد نموده و پرمیژن های مورد نظر برای replication را به آن اختصاص دهید. در دستور زیر slave_user و your_password را با user و password خود جابه جا کنید :
لطفا فایل (mysql-bin.000003) و position number (شماره موقعیت) (11128001) را یادداشت کنید چون بعدا روی سرور slave به این اعداد نیاز خواهیم داشت. سپس جهت خروجی گرفتن تمام دیتابیس و اطلاعات دیتابیس master با استفاده از دستور mysqldump اقدام به READ LOCK در دیتابیس ها میکنیم :
به محض اینکه تمامی دیتابیس ها backup گرفته شدند دوباره با یوزر root به mysql کانکت میشویم و تیبل ها را unlock میکنیم :
با استفاده از دستور SCP فایل dump دیتابیس را روی سرور slave آپلود میکنیم :
اکنون ما تنظیمات سمت سرور master را با موفقیت انجام دادیم کار را با بخش 2 ادامه میدهیم.
بخش دوم
تنظیمات سرور slave با ip 192.168.1.2 به منظور replication :
در این بخش همچنین به نصب mysql و تنظیمات replication خواهیم پرداخت.
نصب mysql روی سرور slave :
اگر روی سرورتان mysql نصب نبود با استفاده از دستور yum آن را نصب کنید :
تنظیم mysql در سرور slave :
فایل my.cnf را با ادیتور vi/vim باز کنید :
خطوط زیر را در تحت بخش [mysqld] اضافه کنید و فراموش نکنید که ip address سرور master را با ip address خودتان جابه جا نموده همچنین نام linux-zone را با نام دیتابیس مربوطه که میخواهید با master (مستر) replicate شود جایگزین کنید :
اکنون dump file (فایل بک اپ) که در مراحل قبل export کردیم را در این مرحله inport میکنیم و سپس سرویس mysql را restart میکنیم :
با یوزر root به mysql وارد میشویم و slave را stop میکنیم سپس به slave میگوییم که کجا به دنبال logfile سرور master بگردد که ما آن را روی سرور master با کامند SHOW MASTER STATUS یادداشت کردیم :
شما باید ip 192.168.1.1 را به ip سرور master تغییر دهید همچنین user و password را نیز متعاقبا عوض نمایید :
بررسی mysql replication روی سرور های master و slave :
بسیار مهم است که مطمین شویم که آیا replication به درستی کار میکند یا خیر؟ روی سرور master تیبلی ایجاد کنید و یکسری متغییر در ان وارد نمایید.
در سمت سرور master :
در سمت سرور slave :
برای بررسی سرور slave دستور مشابه را اجرا میکنیم که باید مقدارهای یکسانی را نیز در اینجا برگرداند :
اگر مقدار ها به درستی نمایش داده شد در حقیقت و نهایتا شما MySQL Replication را به درستی انجام داده اید همانطور که دیدید طی مراحلی آسان و کم این پروسه صورت گرفت. شما میتوانید اطلاعات بیشتر را در MySQL Replication Guide پیدا کنید.
موفق باشید
محمد هابیلی
MySQL Master/Slave Replication در معقوله های Data Security, Fail-over Solution, Database Backup from Slave, Analytics و غیره بسیار مفید است برای انجام پروسه Replication ما از موارد زیر استفاده میکنیم. البته در سناریو شما ممکن است متفاوت باشد :
- Working Linux OS like CentOS 6.3, RedHat 6.3 or Fedora 17
- Master and Slave are CentOS 6.3 Linux Servers
- Master IP Address is: 192.168.1.1
- Slave IP Address is: 192.168.1.2
- Master and Slave are on the same LAN network
- Master and Slave has MySQL version installed
- Master allow remote MySQL connections on port 3306
همچنین توصیه میشود مطالعه کنید.
آموزش نصب MariaDB 10 در CentOS 7/8 - RedHat 7/8 - Debian 8/9/10 - Ubuntu 16/18/19
آموزش دستورات پایه ای و مقدماتی MySQL/MariaDB - بخش 1
آموزش mysql پیشرفته
آموزش تصویری کار با MySQL
نحوه بک آپ گیری از MySQL/MariaDB و ریستور کردن دیتابیس
نحوه پیدا کردن مسیر my.cnf - http.conf / apache2.conf - php.ini در لینوکس (Apache, PHP و MySQL)
ترفندهای مفید برای افزایش سرعت و بهینه سازی دیتابیس MySQL/MariaDB
نحوه Replication کردن MySQL (یا Master-Slave Replication)
در این سناریو ما 2 سرور داریم که یکی با ip 192.168.1.1 به عنوان Master و دیگری با ip address 192.168.1.2 به عنوان slave میباشد. ما این آموزش را در 2 بخش تنظیم کردیم تا درک آن برای شما آسانتر باشد. در بخش اول server master را کانفیگ خواهیم کرد و در بخش دوم به server slave خواهیم پرداخت.
بخش اول
تنظیمات سرور Master با Ip 192.168.1.1 به منظور Replication :
در این بخش نصب mysql و تنظیمات replication را خواهیم داشت.
نصب MySQL روی سرور Master :
در ابتدا کار خود را با نصب mysql با استفاده از دستور yum آغاز خواهیم کرد. اگر سیستم عامل شما از قبل روی آن mysql روی آن نصب بود این مرحله را نادیده بگیرید :
کد PHP:
# yum install mysql-server mysql
تنظیم یک mysql در سرور master :
فایل my.cnf را با استفاده از ادیتور vi/vim باز کنید :
کد PHP:
# vi /etc/my.cnf
کد PHP:
server-id = 1
binlog-do-db=linux-zone
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin
کد PHP:
# /etc/init.d/mysqld restart
کد PHP:
# mysql -u root -p
کد PHP:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'your_password';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 11128001 | tecmint | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> quit;
لطفا فایل (mysql-bin.000003) و position number (شماره موقعیت) (11128001) را یادداشت کنید چون بعدا روی سرور slave به این اعداد نیاز خواهیم داشت. سپس جهت خروجی گرفتن تمام دیتابیس و اطلاعات دیتابیس master با استفاده از دستور mysqldump اقدام به READ LOCK در دیتابیس ها میکنیم :
کد PHP:
# mysqldump -u root -p --all-databases --master-data > /root/dbdump.db
کد PHP:
mysql> UNLOCK TABLES;
mysql> quit;
با استفاده از دستور SCP فایل dump دیتابیس را روی سرور slave آپلود میکنیم :
کد PHP:
scp /root/dbdump.db root@192.168.1.2:/root/
بخش دوم
تنظیمات سرور slave با ip 192.168.1.2 به منظور replication :
در این بخش همچنین به نصب mysql و تنظیمات replication خواهیم پرداخت.
نصب mysql روی سرور slave :
اگر روی سرورتان mysql نصب نبود با استفاده از دستور yum آن را نصب کنید :
کد PHP:
# yum install mysql-server mysql
تنظیم mysql در سرور slave :
فایل my.cnf را با ادیتور vi/vim باز کنید :
کد PHP:
# vi /etc/my.cnf
کد PHP:
server-id = 2
master-host=192.168.1.1
master-connect-retry=60
master-user=slave_user
master-password=yourpassword
replicate-do-db=linux-zone
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin
اکنون dump file (فایل بک اپ) که در مراحل قبل export کردیم را در این مرحله inport میکنیم و سپس سرویس mysql را restart میکنیم :
کد PHP:
# mysql -u root -p < /root/dbdump.db
# /etc/init.d/mysqld restart
کد:
file(mysql-bin.000003) and position (11128001) number
کد PHP:
# mysql -u root -p
کد PHP:
mysql> slave stop;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='slave_user', MASTER_PASSWORD='yourpassword', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=11128001;
mysql> slave start;
mysql> show slave status\G
کد PHP:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.1
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 12345100
Relay_Log_File: mysql-relay-bin.000002
Relay_Log_Pos: 11381900
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: tecmint
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: 12345100
Relay_Log_Space: 11382055
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
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
بررسی mysql replication روی سرور های master و slave :
بسیار مهم است که مطمین شویم که آیا replication به درستی کار میکند یا خیر؟ روی سرور master تیبلی ایجاد کنید و یکسری متغییر در ان وارد نمایید.
در سمت سرور master :
کد PHP:
mysql> create database tecmint;
mysql> use tecmint;
mysql> CREATE TABLE employee (c int);
mysql> INSERT INTO employee (c) VALUES (1);
mysql> SELECT * FROM employee;
کد PHP:
+------+
| c |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
در سمت سرور slave :
برای بررسی سرور slave دستور مشابه را اجرا میکنیم که باید مقدارهای یکسانی را نیز در اینجا برگرداند :
کد PHP:
mysql> use tecmint;
mysql> SELECT * FROM employee;
کد PHP:
+------+
| c |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
اگر مقدار ها به درستی نمایش داده شد در حقیقت و نهایتا شما MySQL Replication را به درستی انجام داده اید همانطور که دیدید طی مراحلی آسان و کم این پروسه صورت گرفت. شما میتوانید اطلاعات بیشتر را در MySQL Replication Guide پیدا کنید.
موفق باشید
محمد هابیلی