mysql 主從 同步原理及配置

  1、在mssql 裏頭實現同步鏡像,只能主庫用而鏡像庫不能同時用,而mysql 主從同步能夠實現 數據庫的讀寫分離,主庫負責 update insert delete ,從庫負責select 這樣一來具備相應的優勢:
         (1)    數據分佈 (Data distribution )
         (2)    負載平衡(load balancing)
         (3)    備份(Backups) 
         (4)    高可用性和容錯行 High availability and failoverpython

2、mysql 數據庫同步的實現原理:

  (1)    master將改變記錄到二進制日誌(binary log)中(這些記錄叫作二進制日誌事件,binary log events);
       (2)    slave將master的binary log events拷貝到它的中繼日誌(relay log);
        (3)    slave重作中繼日誌中的事件,將改變反映它本身的數據。
mysql

  

3、mysql主從同步複製的實現配置過程

一、 條件

         兩臺服務器分別爲web

         A:192.168.1.230 【master】sql

         B: 192.168.1.122 【slave】數據庫

二、步驟

         1)、 在masert 裏 mysql數據庫創建wei slave用來取數據庫的帳號密碼服務器

                   帳號爲: netide

                   密碼爲: 123456fetch

                   權限: 賦予須要同步的數據相應權限spa

        

         2)、 把須要同步的數據庫 從 主庫拷貝到 從服務器裏頭創建(意思就是保證同步的數據庫一致)日誌

 

         3)、主庫上面作以下操做(window 打開 my.ini 文件 liunx 系統 my.conf 數據庫配置文件)

 

                   A. 在mysqld 下添加如下代碼

 

                   [mysqld]

                            port=3306

                            server-id=1       # master端ID號

                            log-bin=log          #日誌路徑及文件名

                            binlog-do-db=test         #須要同步的數據庫

                            binlog-ignore-db=mysql              #不須要同步的數據庫

                   B. 在master上位slave添加一個同步帳號

                            grant replication slave on *.* to 'net'@'192.168.1.122' identified by '123456';

                  

                   C. 重啓mysql服務

                      運行 show master status

 

                      File  Position(同步位置)  Binlog_Do_DB(同步庫)  Binlog_Ignore_DB(不須要同步的庫)

                      log.000001  424   test          mysql

         4)、從服務器上 作以下操做 slave

                     拷貝以下代碼到 my.ini 文件 mysqld 下面

 

                   server-id=2

                   master-host=192.168.1.230

                   master-user= net

                   master-password= 123456

                   master-port= 3306

                   master-connect-retry=60

                   replicate-do-db=test     #同步的數據庫

                   replicate-ignore-db=mysql  #被忽略的數據庫

 

                   B.在mysql裏頭執行

                    stop slave

                    change master to

                    master_log_file='log.000001',

                    master_log_pos=424

                    改變和添加相應的配置項 注意這個地方就是主庫的文件 和 位置    

                   c. start slave; 開啓同步 讓從庫去主庫裏頭去數據

                   D. show slave status 查看同步配置項目狀態

 

         到此大功告成,能夠修改或者插入 主庫test裏頭的數據從庫就會有相關的實時變化

4、附加 python代碼簡單實現讀寫庫分離

import MySqldb

#讀取數據庫
def selectDb(sqlStr):
        conn=MySQLdb.connect(host='192.168.1.122',user='root',passwd='',port=3306)
        conn.select_db("test")
        cur=conn.cursor()
        cur.execute(sqlStr)
        conn.commit()
        return cur

#執行 插入 修改 更新操做
def executeDb(sqlStr):
    conn=MySQLdb.connect(host='192.168.1.230',user='root',passwd='',port=3306)
    conn.select_db("test")
    cur=conn.cursor()
    cur.execute(sqlStr)
    conn.commit()
    cur.close()


cur = selectDb("select * from user")

executeDb("insert into user(name,content) values('user','內容') ")

for r in cur.fetchall():
    print r[1]
相關文章
相關標籤/搜索