實戰環境介紹:
伺服器名 |
IP |
系統 |
MySQL |
odd.example.com |
192.168.1.116 |
rhel-5.8 |
5.5.16 |
even.example.com |
192.168.1.115 |
rhel-5.8 |
5.5.16 |
假設要同步的庫是 db_rocky
㈠ 建立同步處理的使用者
在 ODD上
mysql> grant replication slave on *.* to 'water'@'192.168.1.115' 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.116' 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]binlog-do-db=db_rocky #需要記錄進位日誌的資料庫.如果有多個資料庫可用逗號分隔,或者使用多個binlog-do-db選項binlog-ignore-db=mysql #不需要記錄進位日誌的資料庫.如果有多個資料庫可用逗號分隔,或者使用多個binlog-do-db選項replicate-do-db=db_rocky #需要進行同步的資料庫.如果有多個資料庫可用逗號分隔,或者使用多個replicate-do-db選項replicate-ignore-db=mysql,information_schema #不需要同步的資料庫.如果有多個資料庫可用逗號分隔,或者使用多個replicate-ignore-db選項#同步參數:#保證slave掛在任何一台master上都會接收到另一個master的寫入資訊log-slave-updatessync_binlog=1auto_increment_offset=1auto_increment_increment=2slave-skip-errors=all #過濾掉一些沒啥大問題的錯誤
在 EVEN 上
[mysqld]server-id=2 #設定一個不同的id、注意這裡在my.cnf裡面有個預設值是 1 、把預設值改掉、而不能新增一個server-idbinlog-do-db=db_rocky #需要記錄二進位日誌的資料庫.如果有多個資料庫可用逗號分隔,或者使用多個binlog-do-db選項binlog-ignore-db=mysql #不需要記錄進位日誌的資料庫.如果有多個資料庫可用逗號分隔,或者使用多個binlog-ignore-db選項#需要同步的資料庫replicate-do-db=db_rocky #需要進行同步的資料庫.如果有多個資料庫可用逗號分隔,或者使用多個binlog-do-db選項replicate-ignore-db=mysql,information_schema #不需要同步的資料庫.如果有多個資料庫可用逗號分隔,或者使用多個binlog-do-db選項#同步參數:#保證slave掛在任何一台master上都會接收到另一個master的寫入資訊log-slave-updatessync_binlog=1auto_increment_offset=2auto_increment_increment=2slave-skip-errors=all #過濾掉一些沒啥大問題的錯誤
㈢ 分別重啟伺服器ODD EVEN 上的mysql服務
㈣ 分別在伺服器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_rockyBinlog_Ignore_DB: mysql1 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_rockyBinlog_Ignore_DB: mysql1 row in set (0.01 sec)
㈤ 分別在伺服器ODD、EVEN上用change master語句指定同步位置 :
在ODD
mysql> change master to master_host='192.168.1.115',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.116',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 changedmysql> 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)