實現兩個Mysql數據庫之間同步的方案syncnavigator


實現兩個Mysql數據庫之間同步的方案

MySQL 為了實現replication 必須打開bin-log 項,也是打開二進制的MySQL 日志記錄選項。MySQL 的bin log 二進制日志,可以記錄所有影響到數據庫表中存儲記錄內容的sql 操作,如insert / update / delete 操作,而不記錄select 這樣的操作。因此,我們可以通過二進制日志把某一時間段內丟失的數據可以恢復到數據庫中(如果二進制日志中記錄的日志項,包涵數據庫表中所有數據,那么, 就可以恢復本地數據庫的全部數據了)。 而這個二進制日志,如果用作遠程數據庫恢復,那就是replication 了。這就是使用replication 而不用sync 的原因。這也是為什么要設置bin-log = 這個選項的原因。

 

    在同步過程中,最重要的同步參照物,就是同步使用那一個二進制日志文件,從那一條記錄開始同步。下面就介紹下怎樣實現兩個Mysql數據庫之間的主從同步。

一、    概述

  MySQL從3.23.15版本以后提供數據庫復制(replication)功能,利用該功能可以實現兩個數據庫同步、主從模式、互相備份模式的功能。本文檔主要闡述了如何在linux系統中利用mysql的replication進行雙機熱備的配置。

二、    環境

操作系統:Linux 2.6.23.1-42.fc8 # SMP(不安裝XEN)

Mysql版本:5.0.45-4.fc8

設備環境:PC(或者虛擬機)兩台

三、    配置

數據庫同步復制功能的設置都在MySQL的配置文件中體現,MySQL的配置文件(一般是my.cnf):在本環境下為/etc/my.cnf。

3.1 設置環境:

 IP的設置:

A主機 IP:10.10.0.119

       Mask:255.255.0.0

B主機 IP:10.10.8.112

       Mask:255.255.0.0

在IP設置完成以后,需要確定兩主機的防火牆確實已經關閉。可以使用命令service iptables status查看防火牆狀態。如果防火牆狀態為仍在運行。使用service iptables stop來停用防火牆。如果想啟動關閉防火牆,可以使用setup命令來禁用或定制。

最終以兩台主機可以相互ping通為佳。

3.2 配置A主(master) B從(slave)模式

3.2.1 配置A 為master

    1、增加一個用戶同步使用的帳號:

   GRANT FILE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’;

GRANTREPLICATION SLAVE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’;

賦予10.10.8.112也就是Slave機器有File權限,只賦予Slave機器有File權限還不行,還要給它REPLICATION SLAVE的權限才可以。

2、增加一個數據庫作為同步數據庫:

create databbse test;

3、創建一個表結構:

       create table mytest (username varchar(20),password varchar(20));

4、修改配置文件:

             修改A的/etc/my.cnf文件,在my.cnf配置項中加入下面配置:

server-id = 1      #Server標識

log-bin

binlog-do-db=test  #指定需要日志的數據庫

             

5、重起數據庫服務:

 service mysqld restart

 查看server-id:

 show variable like ‘server_id’;

實例:

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

1 row in set (0.00 sec)

 

6、用show master status/G命令看日志情況。

      正常為:

mysql> show master status/G

*************************** 1. row ***************************

File: mysqld-bin.000002

positiion: 198

Binlog_Do_DB: test,test

Binlog_Ignore_DB:

1 row in set (0.08 sec)

3.2.2 配置B 為slave

1、增加一個數據庫作為同步數據庫:

create databbse test;

2、創建一個表結構:

create table mytest (username varchar(20),password varchar(20));

3、修改配置文件:

             修改B的/etc/my.cnf文件,在my.cnf配置項中加入下面配置:

server-id=2

master-host=10.10. 0.119

master-user=backup    #同步用戶帳號

master-password=1234

master-port=3306

master-connect-retry=60 #預設重試間隔60秒

replicate-do-db=test    #告訴slave只做backup數據庫的更新

             

5、重起數據庫服務:

 service mysqld restart

 查看server-id:

 show variables like ‘server_id’;

實例:

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 2     |

+---------------+-------+

1 row in set (0.00 sec)

 

6、用show slave status/G命令看日志情況。

      正常為:

mysql> show slave status/G

*************************** 1. row ***************************

             Slave_IO_State: Waiting for master to send event

                Master_Host: 10.10.0.119

                Master_User: backup

                Master_Port: 3306

              Connect_Retry: 60

            Master_Log_File: mysqld-bin.000001

        Read_Master_Log_Pos: 98

             Relay_Log_File: mysqld-relay-bin.000003

              Relay_Log_Pos: 236

      Relay_Master_Log_File: mysqld-bin.000001

           Slave_IO_Running: Yes

          Slave_SQL_Running: Yes

            Replicate_Do_DB: test,test

        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: 98

            Relay_Log_Space: 236

            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

1 row in set (0.01 sec)

 

3.2.3 驗證配置

分別使用insert, delete , update在A主機進行增刪改查數據庫;查看B主機的數據庫是否與A主機一致;若一致,則配置成功。

3.3雙機互備模式

如果在A主機加入slave設置,在B主機加入master設置,則可以做B->A的同步。

1、在A主機的配置文件中 mysqld配置項加入以下設置:

master-host=10.10.8.112

master-user=backup

master-password=1234

replicate-do-db=test

master-connect-retry=10

 

2、在B的配置文件中 mysqld配置項加入以下設置:

log-bin

binlog-do-db=test

  注意:當有錯誤產生時,*.err日志文件同步的線程退出,當糾正錯誤后,要讓同步機制進行工作,運行slave start。

 

重起A、B機器,則可以實現雙向的熱備份。

       總之,成功完成以上配置后,在主服務器A的test庫里添加數據或刪除數據,在從服務器B的test庫里馬上也能看到相應的變更。兩台服務器的同步操作可以說是瞬間完成的。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com