منبع اصلی نوشتار زیر در این لینک قرار دارد

ایجاد Slave replication در Mysql

در مدیریت دیتابیس ها مبحثی وجود دارد به نام رپلیکیشن که به دو صورت زیر پیاده سازی می شود.

  1. Master – Slave
  2. Master -Master

که هرکدام ویژگی‌های خاص خود را دارند. در این نوشته قصد راه اندازی ساده و سریع رپیکیش اسلیو در MySql را روی سیستم عامل لینوکس داریم.

برای انجام این کار ابتدا باید یک سری تنظیمات را در دیتابیسی که قصد دارید به عنوان دیتابیس اصلی در نظر بگیرید انجام دهید. این تنظیمات در فایل MySql در مسیر زیر اعمال می شوند:

/etc/mysql/my.cnf

موارد زیر را تنظیم می کنیم:

[mysqld]

binlog_format     = ROW
log_bin           = binlog #The slave is going to copy all of the changes that are registered in the log.
expire_logs_days  = 10
server_id         = 1 #number must be unique and cannot match any other server-id in your replication group
log_slave_updates = 1
binlog_do_db      = databasename #You can include more than one database by repeating this line for all of the databases.

بعد از انجام تنظیمات فوق سرویس MySql باید یکبار ریست شود:

sudo service mysql restart

سپس باید کاربر جدیدی برای برقراری ارتباط بین سرور مستر و اسلیو ایجاد کنیم:

mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'wesnyphone';
FLUSH PRIVILEGES;

حال باید از کل اطلاعات و ساختار دیتابیس مورد نظر یک پشتیبان کامل جهت انتقال به سرور اسلیو گرفته شود.

mysqldump -u root -p --skip-lock-tables --single-transaction --flush-logs --master-data=2 databasename > databasename.sql

در دستور فوق سویچ های به کار رفته به منظور زیر است:

  • skip-lock-tables : به منظور جلوگیری از قفل شدن جداول می باشد. زمانی که با mysqldump شروع به پشتیبان گیری می کنید، به طور پیش فرض جداول را قفل می کند. حال اگر جداول، حاوی اطلاعات مهم و دیتابیس در حال استفاده باشد در لحظه اگر درخواست های متفاوتی به آن برسد، آن درخواست ها را به خاطر قفل بودن رد می کند. پس از این سویچ استفاده می کنیم تا جداول در آن زمان قفل نشوند و در روند اجرای برنامه خللی وارد نشود.
  • flush-logs : این سویچ باعث می شود تا MySql قبل از شروع پشتیبان گیری تمامی لاگ فایل های دیتابیس خالی و ثبت شوند
  • master-data : این سویچ برای تولید فایل پشتیبان برای راه اندازی رپلیکیشن اسلیو کاربرد دارد. اگر مقدار ۲ را برای این سویچ تنظیم کنید، دستورات مورد نیاز برای تنظیم در سرور اسلیو که CHANGE MASTER TO هستند را به صورت دستورات SQL در فایل پشتیبان نهایی قرار می دهد.

با این دستور شما از کل دیتابیس بودن قفل کردن جداول آن و همراه با ثبت مقادری مورد نیاز جهت تنظیم روی سرور اسلیو برای برقراری ارتباط با سرور مستر پشتیبان گیری کرده و اکنون باید فایل پشتیبان را به سرور مورد نظر اسلیو منتقل کنید.

پس از انتقال فایل پشتیبان دیتابیس به سرور مورد نظر برای اسلیو، باید در آن سرور نیز تنظیماتی را اعمال کرد:

[mysqld]

server-id               = 2
relay-log               = /var/log/mysql/mysql-relay-bin.log
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = databasename
log-slaves-updates      =1 #is necessary for the writes to propagate from the slave to the other galera nodes
expire_logs_days  = 10

بعد از انجام تنظیمات فوق سرویس MySql باید یکبار ریست شود:

sudo service mysql restart

سپس دیتابیسی با نام دیتابیس پشتیبان گرفته شده ایجاد کنید:

mysqladmin -u root -p createdb databasename
mysql -u root -p databasename < databasename.sql

اکنون که کل اطلاعات در دیتابی وارد شد باید تنظیمات مربطو به برقرار ارتباط با سرور انجام شود برای این منظور به اطلاعات زیر نیاز است:

  • MASTER_HOST: آدرس IP سرور مستر.
  • MASTER_USER: نام کاربری ای که روی سرور مستر برای برقراری ارتباط اسلیو ایجاد شده بود.
  • MASTER_PASSWORD: کلمه عبوری که برای کاربر فوق تنظیم شده است.
  • MASTER_LOG_FILE: نام فایل لاگی که قرار است اطلاعات رپلیکیشن را از آن دریافت کند
  • MASTER_LOG_POS: موقعیت مکانی ای که سرور اسلیو باید ادامه داده های دیتابیس را از آنجا پی گرفته و روی خود منتقل کند.

دو مورد آخر در فایل پشتیبان براساس سویچ master-data استفاده شده در فرمان mysqldump قرار دارند که به ترتیب زیر قابل دسترسی می باشند:

head databsename.sql -n80 | grep "MASTER_LOG_POS"

تمامی موارد فوق به صورت زیر در دیتابیس اعمال شده و سپس اسلیو راه اندزای شده و وضعیت ارتباطی آن را بررسی می کنیم:

CHANGE MASTER TO MASTER_HOST='192.168.1.13',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mariadb-bin.000316', MASTER_LOG_POS=  52810097;

START SLAVE;

SHOW SLAVE STATUSG

موارد مهم در وضعیت رپلیکیشن با مقادیر زیر می باشد. هر مقداری به غیر از زیر باشد مشکلی وجود دارد:

Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 0
Last_Error: Err: 0
Seconds_Behind_Master: 0

امیدوارم که این نوشته مفید بوده باشد. منتظر نظرات شما هستم.

The post ایجاد Slave replication در Mysql appeared first on دست نوشته های یک تازه کار.



برچسب ها : , , ,