mysql互爲主從配置(雙主模型)

一、A、B雙主模型的實現條件:

1. 開啓二進制日誌

2. 開啓中繼日誌

3. 解決自動增長列的問題

如果A服務器上自動增長的列編號有一個35,此時還沒有同步到B服務器上,在B服務器上插入一條數據,編號也是35。當同步A的35到B服務器上來的話,必然產生數據丟失。

解決辦法:

讓在A上插入的行的自動增長都爲奇數,讓B服務器上的自動增長都爲偶數。這樣就解決了自動增長的問題。


假設A是一臺生產環境中的數據庫,現在想添加B服務器,實現雙主模型。

二、步驟:

1. 在A、B服務器上創建具有複製權限的帳號

2. 在A、B服務器上修改配置文件(開啓二進制日誌、中繼日誌等)

3. 將A服務器上存在的數據文件導入到B服務器中

注意:導入數據的時候,先關閉B服務器的二進制日誌。

4. 讓B先成爲slave,再讓A成爲slave

5. 測試


三、開始配置

1. 創建授權用戶

mysql> grant replication slave on *.* to 'slave'@'192.168.2.96' identified by '12345';
Query OK, 0 rows affected (0.00 sec)
#A服務器
mysql> grant replication slave on *.* to 'slave'@'192.168.2.93' identified by '12345';
Query OK, 0 rows affected (0.00 sec)
#B服務器


2. 編輯配置文件

[root@oracle ~]# vim /etc/my.cnf
log-bin=mysql-bin                 #開啓二進制日誌
server-id=1
relay-log=mysql-relay-bin         #開啓中繼日誌
log_slave_updates = on            #從服務器將時間記錄到二進制日誌中
auto_increment_increment=2        #自動增長的步長
auto_increment_offset=1           #自動增長的起始數值
#A服務器的配置
[root@node2 ~]# vim /etc/my.cnf
server-id=2
#log-bin=mysql-bin
#log_slave_updates = on
auto_increment_increment=2
auto_increment_offset=2
#B服務器的配置,先關閉二進制日誌

重啓服務

[root@oracle ~]# service mysqld restart
Shutting down MySQL..                                      [  OK  ]
Starting MySQL.                                            [  OK  ]

創建測試用的表

mysql> select * from info;
+-----+-------+-----+
| sid | name  | age |
+-----+-------+-----+
|   1 | zhang |  23 |
|   2 | li    |  12 |
|   3 | cheng |  34 |
|   4 | wang  |  22 |
|   5 | chen  |  44 |
+-----+-------+-----+
5 rows in set (0.00 sec)
#在A服務器上創建測試用的表


3. 將表導入到B服務器上

[root@oracle ~]# mysqldump --databases data --lock-all-tables --master-data=2 > /root/dump.sql
[root@oracle ~]# scp /root/dump.sql [email protected]:/root/
#A服務器上dump+拷貝
[root@node2 ~]# mysql < dump.sql     #B服務器上執行


4. 讓B服務器先成爲slave

mysql> change master to master_host='192.168.2.93',master_user='slave',master_password='12345',master_port=3306,MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=1068;
#MASTER_LOG_FILE和MASTER_LOG_POS在dump.sql中有記錄
[root@node2 ~]# vim /etc/my.cnf
#將剛剛註釋掉的參數生效
log-bin=mysql-bin
log_slave_updates = on
[root@node2 ~]# service mysqld restart
Shutting down MySQL..                                      [確定]
Starting MySQL.                                            [確定]

  再讓A服務器成爲slave

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
#在B上查看二進制日誌信息
mysql> change master to master_host='192.168.2.96',master_user='slave',master_password='12345',master_port=3306,MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=120;
mysql> start slave;

查看A、B服務器的狀態:

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.96
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 120
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
#A服務器上的狀態
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.93
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000008
          Read_Master_Log_Pos: 120
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000008
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
#在B服務器上查看狀態

5. 測試:

mysql> insert into info(name,age) values('sun',25),('ding',29);
#在A服務器上插入2行數據
mysql> select * from info;
+-----+-------+-----+
| sid | name  | age |
+-----+-------+-----+
|   1 | zhang |  23 |
|   2 | li    |  12 |
|   3 | cheng |  34 |
|   4 | wang  |  22 |
|   5 | chen  |  44 |
|   7 | sun   |  25 |
|   9 | ding  |  29 |
+-----+-------+-----+
7 rows in set (0.00 sec)
#在B服務器上查看的結果


mysql> insert into info(name,age) values('BB',33),('BC',21);
#在B服務器上插入2行數據
mysql> select * from info;
+-----+-------+-----+
| sid | name  | age |
+-----+-------+-----+
|   1 | zhang |  23 |
|   2 | li    |  12 |
|   3 | cheng |  34 |
|   4 | wang  |  22 |
|   5 | chen  |  44 |
|   7 | sun   |  25 |
|   9 | ding  |  29 |
|  10 | BB    |  33 |
|  12 | BC    |  21 |
+-----+-------+-----+
9 rows in set (0.00 sec)
#在A服務器上查看

這樣雙主模型就已經實現了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章