Əsas səhifə > MySQL administration > Basic MySQL replication setup

Basic MySQL replication setup

Bu yazıda sadə MySQL replication-nun qurulmasından danışacıq.
Sadə qurulma o deməkdir ki, 2 fresh install olunmuş MySQL server-imiz var və bunları replicate edirik. Yani hər iki MySQL-də data yoxdur.
Replication anlayışı haqqında danışmayacam. Kifayət qədər bol material var bu barədə internetdə.
Master-imiz CentOS 6.4-ə qurulu MySQL 5.5.30-dur.

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.30    |
+-----------+

Slave-imiz isə VirtualBox-da Ubuntu 12.04 üzərindəki MySQL 5.5.29-dur.

mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 5.5.29-0ubuntu0.12.04.2 |
+-------------------------+

Ümumi qayda: Slave(qul) yəni replicate olunan tərəf həmişə versiya cəhətdən daha yuxarı olmalıdır. Yəni məsələn Master(ağa) 5.5.30 Slave isə 5.1.6 ola bilməz olmamalıdır. Lakın əksi mümkündür. İndiki halda 5.5.30 ilə 5.5.29 arasında fərq olmadığı üçün bizim bu şəkildə replication qurmamız düzgündür

Başlayaq. 1-ci addım Slave üçün replication user yaradırıq və grant veririk:

create user 'ubuntu_repl'@'192.168.1.%' identified by '12345';

və connection-u test edirik:

shahriyar@ubuntu-vb:~$ mysql -u ubuntu_repl --host=192.168.1.3 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.30 MySQL Community Server (GPL) by Remi

Grant veririk:

mysql> grant replication slave,replication client on *.*
    -> to 'ubuntu_repl'@'192.168.1.%' identified by '12345';
Query OK, 0 rows affected (0.00 sec)

Grant-ı test edirik:

mysql> show grants for 'ubuntu_repl'@'192.168.1.%';
+------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for ubuntu_repl@192.168.1.%                                                                                                                   |
+------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'ubuntu_repl'@'192.168.1.%' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9' |
+------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

2-ci addım hər 2 server-də binary log-u aktiv edirik. Bu haqda bir yazım var Binary Log-un aktiv edilməsi

Qısa olaraq Master-də my.cnf faylına əlavə edirik:

log_bin=/var/lib/mysql/data/mysql-bin
expire_logs_days=14
sync_binlog=1
log_bin_index=/var/lib/mysql/data/mysql-bin
server_id=10

Slave-də isə yenə my.cnf faylına aşağıdakıları əlavə edirik:

log_bin=/var/lib/mysql/data/mysql-bin
expire_logs_days=14
sync_binlog=1
log_bin_index=/var/lib/mysql/data/mysql-bin
server_id=2
relay_log=/var/lib/mysql/data/mysql-relay-bin
log_slave_updates=1
read_only=1

Burda əsas olaraq diqqətivizi çəkmək istəyirəm 2 dəyişənə. log_slave_updates bu slave-i məcbur edir ki bütün dəyişiklikləri həm də oz binary log-unda qeyd etsin. Səbəb: ola bilsin sabah bu slave, master-in crash-inden sonra çöndərilib olsun master. və artıq bu master olmuş slave-in üzərindən də replication qura biləcəksiniz!
read_only isə hər hansı səhv yönləndirilmiş app-ə salve-də dəyişiklik etməyə icazə vermir.
Əgər siz bu şəkildə deyil də başqa şəkildə setup etmisinizsə demək ki, sizin replication sabah başınıza problem aça bilər.

Hər 2 my.cnf-i save edirik və MySQL Server-ləri restart edirik.
3-cü mərhələ:

Slave-ə Master-ı necə deyərlər izah edirik. Bəzən bu tip məlumatları my.cnf-ə yerləşdirirlər lakin qətiyyən belə bir şey etməyin! Sadəcə aşağıdakı komandaları keçirdin.

mysql> change master to master_host='192.168.1.3',
    -> master_user='ubuntu_repl',
    -> master_password='12345',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=0;
Query OK, 0 rows affected (0.01 sec)

Və slave statusa baxırıq:

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.1.3
                  Master_User: ubuntu-repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 4
               Relay_Log_File: mysql-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: No
            Slave_SQL_Running: No

İndi isə diqqətlə baxaq bildiyimiz kimi slave-də 2 process olur İO və SQL. Lakin status-un dediyinə görə nə İO nə də SQL process işləmir. (sonuncu sətrdə hamısının qarşısında NO yazılıb).

Məhz buna görə də biz Slave-i start edirik:

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

Və yenidən status-a baxırıq:

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.3
                  Master_User: ubuntu_repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 107
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

YES+YES😉

Və replication-nun işlədiyinə baxaq. Master-də database və table yaradaq və Slave-də yoxlayaq:
Master-də:

mysql> create database replication_test;
Query OK, 1 row affected (0.09 sec)

mysql> create table tested(id int);
Query OK, 0 rows affected (0.18 sec)

Slave-də:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| data               |
| mysql              |
| performance_schema |
| replication_test   |
+--------------------+
5 rows in set (0.07 sec)


mysql> show tables;
+----------------------------+
| Tables_in_replication_test |
+----------------------------+
| tested                     |
+----------------------------+
1 row in set (0.00 sec)

100% işlədi… Təbii ki, bu sadə setup-dır. Yəni 2 yeni install olunmuş data-sız MySQL-i replicate etmək qədər asan iş ola bilməz.
Böyül cədvəlləri olan MySQL replication qurmaq haqqında irəliki zamanlarda bir yazı olacaq.

Təşəkkürlər😉

  1. Hələlik heç bir şərh yoxdur
  1. No trackbacks yet.

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

%d bloqqer bunu bəyənir: