سیستم عاملفناوریمدیریت سرورمقالات وب
نصب MariaDB Master-Slave Replication در سنت او اس 7

همانطور که می دانید ماریا دی بی(MariaDB) جایگزینی برای پایگاه داده مای اس کیو ال(MySql) به شمار می رود. ماریا دی بی یک Sql server سریع، مقیاس پذیر و قابل اعتماد است که پیشرفت ها و بهینه سازی های زیادی در آن ایجاد شده است. MariaDB replication، روشی برای ذخیره سازی کپی های متعدد از یک داده بر روی بسیاری از سیستم هاست و داده ها نیز به صورت خودکار از پایگاه داده (مستر) به پایگاه داده دیگری (Slave) کپی می شوند. اگر یک سرور از کار بیفتد، مشتریان می توانند هنوز هم دسترسی خوبی به داده های خود داشته باشند. اینکار معمولا از طریق پایگاه داده Slave انجام می شود. در این مقاله قصد داریم نصب MariaDB Master-Slave replication را در سنت او اس 7 با هم مرور کنیم. این روش بر روی تمامی توزیع های لینوکس همچون RHEL، سنت او اس، اوبونتو و openSUSE قابل اجراست. تنها چیزی که شما نیاز دارید این است که بدانید چگونه ماریا دی بی را در توزیع مورد نظر نصب کنید.
سناریو:
ما در این مقاله از دو سیستم به منظور انجام این آموزش استفاده خواهیم کرد. اما شما می توانید از هر نوع توزیع لینوکسی که دوست داشتید برای نصب ماریا دی بی استفاده کنید. تنها نصب ماریادی بی برای توزیع لینوکس های دیگر متفاوت خواهد بود. خوب سیستمی که برای این آموزش مورد استفاده قرار گرفته است مشخصات زیر را دارد:
- MariaDB Master : سنت او اس 7، 64 بیت، مینیمال سرور(Minimal Server)
- آی پی آدرس سرور مستر: 168.1.150/24
- MariaDB Slave: سنت او اس 7، 64 بیتی، Minimal Server
- آی پی ادرس سرور Slave:168.1.151/24
نصب ماریادی بی بر روی سرور مستر و Slave :
برای نصب ماریا دی بی می توانید دستورات زیر را اجرا کنید:
yum install mariadb-server mariadb
حالا سرویس ماریا دی بی را اجرا کنید و به آن اجازه دهید در هر ریبوت به صورت خودکار شروع به کار کند. برای انجام اینکار از دستورات زیر کمک بگیرید:
systemctl start mariadb
systemctl enable mariadb
تنظیم پسورد روت ماریا دی بی بر روی سرور مستر و Slave:
به طور پیش فرض پسورد روت برای MriaDB /MySQL خالی است. بنابراین برای اینکه از دسترسی سایر افراد به آن جلوگیری کنید بهتر است پسوردی را انتخاب نمایید. برای اینکه بتوانید پسورد روت را برای MYSQL نصب کنید دستور زیر را اجرا نمایید:
mysql_secure_installation
خروجی نمونه:
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we’ll need the current
password for the root user. If you’ve just installed MariaDB, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on…
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y ## Enter Y and press Enter
New password: ## Enter new password
Re-enter new password: ## Enter password again
Password updated successfully!
Reloading privilege tables..
… Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y ## Enter Y and press Enter
… Success!
Normally, root should only be allowed to connect from ‘localhost’. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y ## Enter Y and press Enter
… Success!
By default, MariaDB comes with a database named ‘test’ that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y ## Enter Y and press Enter
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y ## Enter Y and press Enter
… Success!
Cleaning up…
All done! If you’ve completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
بعد از اینکه ماریادی بی را بر روی هر دو سرور نصب کردید، باید replication را نیز نصب کنیم. اول از هر کاری، سرور مستر را پیکربندی خواهیم کرد.
پیکربندی MariaDB Master:
اولین و مهم ترین مرحله این است که به پورت پیش فرض MYSQL (3306) اجازه فعالیت بدهیم. از آنجایی که ما از توزیع سنت او اس 7 استتفاده می کنیم؛ می توانیم دستورات زیر را اجرا کنیم:
firewall-cmd –permanent –add-port=3306/tcp
برای reload کردن قوانین فایروایل از دستور زیر استفاده کنید:
firewall-cmd –reload
حالا باید فایل /etc/my.cnf را ویرایش کنید:
vi /etc/my.cnf
و سپس خطوط زیر را در قسمت پایین [mysqld] اضافه نمایید:
[mysqld]
server_id=1
log-basename=master
log-bin
binlog-format=row
binlog-do-db=unixmen
[…]
در این مثال، unixmen نام پایگاه داده ای است که باید به سیستم Slave ، Replicate شود. بعد از اینکه خطوط بالا را اضافه کردید، سرویس ماریادی بی را رستارت کنید. برای اینکار می توانید از دستور زیر استفاده کنید:
systemctl restart mariadb
حالا به عنوان کاربر روت در ماریا دی بی لاگین شوید:
mysql -u root -p
یک نام کاربری و پسورد برای Slave ایجاد کنید. به عنوان مثال ما از SK به عنوان نام کاربری و centos به عنوان پسورد استفاده کردیم:
MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO ‘sk’@’%’ IDENTIFIED BY ‘centos’;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SHOW MASTER STATUS;
+——————–+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————–+———-+————–+——————+
| mariadb-bin.000001 | 460 | unixmen | |
+——————–+———-+————–+——————+
1 row in set (0.00 sec)
MariaDB [(none)]> exit
Bye
فقط توجه داشته باشید که باید فایل (mariadb-bin.000001) و شماره 460 را یادداشت کنید زیرا در مراحل بعدی به آنها نیاز خواهید داشت.
این مقاله را نیز بخوانید: چگونه مخزن را در سیستم عامل CentOS فعال یا غیر فعال کنیم؟
حالا از پایگاه داده سرور مستر بک آپ بگیرید و آن را به Slave منتقل کنید:
شما می توانید از دستورات زیر برای کپی گرفتن از تمامی داده های موجود در پایگاه داده مستر استفاده کنید و آن را ذخیره نمایید. این پایگاه داده در مراحل بعدی به Slave منتقل خواهد شد:
mysqldump –all-databases –user=root –password –master-data > masterdatabase.sql
این دستور، فایلی به نام masterdatabase.sql را در دایرکتوری فعلی ایجاد خواهد کرد. بسته به اندازه پایگاه داده، مدت زمان انجام این فرآیند متغیر خواهد بود.
دوباره با کاربر روت وارد MYSQL شوید:
mysql -u root -p
و جدول ها را Unlock نمایید:
MariaDB [(none)]> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> quit
Bye
فایل masterdatabase.sql را در سرور Slave کپی کنید. در این مثال، من قصد دارم این فایل را در فولدری به نام /home در سرور Slave کپی کنم. به همین خاطر از دستور زیر استفاده می کنم:
scp masterdatabase.sql root@192.168.1.151:/home
به خاطر داشته باشید که 192.168.1.151 آی پی آدرس سرور Slave من است.
پیکربندی MariaDB Slave:
خوب پیکربندی های مرتبط با سرور مستر را انجام دادیم. حالا باید سرور Slave را نیز پیکربندی کنیم. بسته MYSQL را بر روی سرور Slave نصب کنید. همچنین فراموش نکنید که پورت 3306 را از طریق فایروال یا روتر خود فعال کنید.
سپس فایل /etc/my.cnf را ویرایش کنید:
vi /etc/my.cnf
حالا خطوط زیر را به بخش پایینی [mysqld] اضافه کنید:
[mysqld]
server-id = 2
replicate-do-db=unixmen
[…]
در این مثال، Unixmen نام پایگاه داده سرور مستر است. به خاطر داشته باشید که باید برای سرور مستر و Slave از server-id متفاوتی استفاده کنید. حالا فایل را ذخیره کنید و از آن خارج شوید.
با استفاده از دستور زیر پایگاه داده مستر را ایمپورت کنید:
mysql -u root -p < /home/masterdatabase.sql
همانطور که می دانید، ما در حال حاضر فایل masterdatabase.sql را از سرور مستر به دایرکتوری /home/ در سرور Slave کپی کرده ایم. برای اینکه تغییرات ایجاد شده را مشاهده کنید، سرویس ماریادی بی را رستارت کنید:
systemctl restart mariadb
حالا با استفاده از دستور زیر، به عنوان کاربر روت وارد MariaDB خود شوید:
mysql -u root -p
در این مرحله باید به سرور Slave بگوییم که کجا باید به دنبال فایل Log که بر روی سرور مستر ایجاد کرده ایم بگردد. فقط مطمئن شوید که آی پی ادری مستر، نام کاربری و پسورد را بر اساس اطلاعات خود تغییر داده اید:
MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=’192.168.1.150′, MASTER_USER=’sk’, MASTER_PASSWORD=’centos’, MASTER_LOG_FILE=’mariadb-bin.000001′, MASTER_LOG_POS=460;
Query OK, 0 rows affected (0.03 sec)
MariaDB [(none)]> SLAVE START;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.150
Master_User: sk
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mariadb-bin.000001
Read_Master_Log_Pos: 460
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 531
Relay_Master_Log_File: mariadb-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: unixmen
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: 460
Relay_Log_Space: 827
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:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
بررسی و تست MariaDB Replication:
قسمت مستر:
حالا به MariaDB master server بروید و با استفاده از دستور زیر وارد MYSql prompt شوید:
mysql -u root -p
سپس یک پایگاه داده با نام Unixmen ایجاد کنید و جدول و ورودی هایی را به آن اضافه نمایید. به این موضوع توجه داشته باشید که نام پایگاه داده جدید باید منطبق با نام موجود در فایل my.cnf سرور مستر و Slave باشد.
MariaDB [(none)]> create database unixmen;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use unixmen;
Database changed
MariaDB [unixmen]> create table sample (c int);
Query OK, 0 rows affected (0.01 sec)
MariaDB [unixmen]> insert into sample (c) values (1);
Query OK, 1 row affected (0.01 sec)
MariaDB [unixmen]> select * from sample;
+——+
| c |
+——+
| 1 |
+——+
1 row in set (0.00 sec)
MariaDB [unixmen]>
قسمت Slave:
حالا به سرور Slave بروید و مطمئن شوید که ورودی های ایجاد شده در بالا در پایگاه داده این سرور نیز Replicate شده باشد.
به عنوان کاربر روت وارد MariaDB prompt شوید:
mysql -u root -p
سپس دستورات زیر را اجرا کنید تا مطمئن شوید ورودی ها به درستی Replicate شده اند:
MariaDB [(none)]> use unixmen;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [unixmen]> select * from sample;
+——+
| c |
+——+
| 1 |
+——+
1 row in set (0.00 sec)
MariaDB [unixmen]>
حالا جدول هایی که در سرور مستر ایجاد شده بود به طور خودکار در سرور Slave تکرار(Replicate ) شده است.