در مدیریت دیتابیس ها مبحثی وجود دارد به نام رپلیکیشن که به دو صورت زیر پیاده سازی می شود.
- Master – Slave
- 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 دست نوشته های یک تازه کار.