MySQL 5.6主主同步

luashin發表於2016-03-13

實戰環境介紹:

伺服器名 IP 系統 MySQL
odd.example.com 192.168.1.115 rhel-5.8 5.6.24
even.example.com 192.168.1.116 rhel-5.8 5.6.24


假設要同步的庫是db_rocky

㈠ 建立同步使用者

在ODD上

mysql> grant replication slave on *.* to 'water'@'192.168.1.116' identified by 'cdio2010';
Query OK, 0 rows affected (0.00 sec)


mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)


在EVEN上

mysql> grant replication slave on *.* to 'water'@'192.168.1.115' identified by 'cdio2010';
Query OK, 0 rows affected (0.11 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

㈡ 修改/etc/my.cnf配置檔案,為其新增以下內容:

在ODD上

[mysqld]
server-id=1

binlog-do-db=db_rocky                            #需要記錄進位制日誌的資料庫.
binlog-ignore-db=mysql                           #不需要記錄進位制日誌的資料庫.
replicate-do-db=db_rocky                         #需要進行同步的資料庫.
replicate-ignore-db=mysql,information_schema     #不需要同步的資料庫.
注意:如果有多個資料庫可用逗號分隔,或者使用多個binlog-do-dbbinlog-do-dbreplicate-do-db、replicate-ignore-db選項

#同步引數:
#保證slave掛在任何一臺master上都會接收到另一個master的寫入資訊

log-slave-updates
sync_binlog=1
auto_increment_increment=2

auto_increment_offset=1
slave-skip-errors=all                            #過濾掉一些沒啥大問題的錯誤


在EVEN上

[mysqld]
server-id=2                                      #設定一個不同的id號
注意:在my.cnf裡面有個預設值1,把預設值改為其它的數字,而非新增一個server-id

binlog-do-db=db_rocky                            #需要記錄二進位制日誌的資料庫.
binlog-ignore-db=mysql                           #不需要記錄進位制日誌的資料庫.
#需要同步的資料庫
replicate-do-db=db_rocky                         #需要進行同步的資料庫.
replicate-ignore-db=mysql,information_schema     #不需要同步的資料庫.
#如果有多個資料庫可用逗號分隔,或者使用多個binlog-do-dbbinlog-do-dbreplicate-do-db、replicate-ignore-db選項

#同步引數:
#保證slave掛在任何一臺master上都會接收到另一個master的寫入資訊
log-slave-updates
sync_binlog=1
auto_increment_increment=2

auto_increment_offset=2
slave-skip-errors=all                             #過濾掉一些沒啥大問題的錯誤


㈢ 分別重啟伺服器ODD、EVEN上的mysql服務
# server mysqld restart

㈣ 分別在伺服器ODD、EVEN上檢視做為主伺服器狀態

在ODD

mysql> flush tables with read lock;               #防止進入新的資料
Query OK, 0 rows affected (0.00 sec)

mysql> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin.000007
        Position: 438
    Binlog_Do_DB: db_rocky
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)

在EVEN

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

mysql> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin.000008
        Position: 107
    Binlog_Do_DB: db_rocky
Binlog_Ignore_DB: mysql
1 row in set (0.01 sec)

㈤ 分別在伺服器ODD、EVEN上用change master語句指定同步位置 : 

在ODD

mysql> change master to master_host='192.168.1.116',master_user='water',master_password='cdio2010',
    -> master_log_file='mysql-bin.000008',master_log_pos=107;
Query OK, 0 rows affected (0.05 sec)

在EVEN

mysql> change master to master_host='192.168.1.115',master_user='water',master_password='cdio2010',
    -> master_log_file='mysql-bin.000007',master_log_pos=438;
Query OK, 0 rows affected (0.15 sec)

注:master_log_file,master_log_pos由上面主伺服器查出的狀態值中確定

master_log_file對應File,master_log_pos對應Position

在ODD、EVEN上執行

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

㈥ 分別在伺服器ODD、EVEN上啟動從伺服器執行緒

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

分別在伺服器ODD、EVEN上檢視從伺服器狀態 :

ODD上

mysql> show slave status\G;
*************************** 1. row ***************************
主要關注以下 2 個引數:
...
...
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...
...


EVEN上:

mysql> show slave status\G;
*************************** 1. row ***************************
主要關注以下 2 個引數:
...
...
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...
...


㈦ 測試

EVEN上

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_rocky           |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> use db_rocky;
Database changed

mysql> show tables;
Empty set (0.00 sec)

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

mysql> insert into water values(1);
Query OK, 1 row affected (0.01 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)


在ODD上

mysql> show tables;
+--------------------+
| Tables_in_db_rocky |
+--------------------+
| t_rocky            |
| water              |
+--------------------+
2 rows in set (0.00 sec)

mysql> select * from water;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9034054/viewspace-2056402/,如需轉載,請註明出處,否則將追究法律責任。

相關文章