mysql數據同步-基於二進制日誌文件和position複製點的方式

mysql的binlog日誌有三種格式,分別爲statement,mixed,以及row。mysql

1.Statement每一條會修改數據的sql都會記錄在binlog中sql

優缺點1)不用記錄每一行的變化,日誌量小(執行update table set column=xx,只需記錄一條sql便可);數據庫

              2)有些sql語句可能會跟數據庫環境有關,好比登陸用戶等等數據,致使複製的時候數據出問題。服務器

2.Row:不記錄sql語句上下文相關信息,僅保存哪條記錄被修改(默認的數據複製方式,經過show variables like 'binlog_format'命令查看)session

優缺點:1)binlog日誌會記錄每一行數據修改的細節,不會使用和當前數據庫環境相關的數據;架構

              2)日誌量較大(如執行update table set column=xx,會記錄和表數據數量同樣的日誌記錄ide

3.Mixedlevel: 是以上兩種level的混合使用性能

mysql數據複製架構測試

1、主從架構(Master-Slave)編碼

優缺點:

1)一臺master對應多臺slave,數據修改可在master操做,數據查詢分別在2臺slave中操做,主要用於讀操做大於寫操做的請狀況,可提升數據庫的查詢性能;

2)若是slave比較多,會嚴重增長master數據庫的壓力,由於一臺slave連上master時,會開啓3個線程(Connection Thread 鏈接master的線程,IO Thread slave接受master二進制數據的線程, SQL Thread slave處理日誌重放的線程);

3)可能會形成單點故障,由於master只有一臺,若是master宕機以後,須要從新指定master;

4)slave庫的數據會出現延時(延時時間爲slave端運行show slave status時,Seconds_Behind_Master選項的值)。

實現步驟:(默認都是新裝的機器,數據庫中都沒有數據)

一、安裝3臺mysql服務器,一臺master,二臺slave,master的端口是3307,二臺slave的端口分別是330八、3309;

二、安裝成功以後,修改master配置my.ini文件(假設master的服務名爲mysqlmaster),個人配置以下:

[mysqld]

 innodb_buffer_pool_size = 128M

#啓用二進制日誌

 log_bin=mysql-bin  

 innodb_flush_log_at_trx_commit=1

 #事物一提交,就必須同步二進制日誌,這樣會下降性能,可是數據比較重要

 sync_binlog=1 

 #服務器ID不能重複

 server_id=10

 #須要作主從備份的數據庫名字

 #binlog-do-db=test_custer

 #只保留7天的二進制日誌,以防磁盤被日誌佔滿

 expire-logs-days=7

#mysql的安裝目錄

 basedir=D:\mysqlcuster\mysqlmaster

#mysql數據存放目錄

 datadir=D:\mysqlcuster\mysqlmaster\data

 port=3307

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

#服務端的編碼方式

character-set-server=utf8

[client]

port=3307

default-character-set=utf8

三、使用net start mysqlmaster啓動master服務器,啓動成功以後,登陸mysql,命令爲mysql -uroot -p -P3307;

四、在master中建立用於複製的帳號,帳號名、密碼、ip可修改:grant replication slave on *.* to repl_user@127.0.0.1 identified by 'repl_password';

五、修改slave的my.ini文件配置,以其中一臺slave爲例,配置以下:

[mysqld]

 innodb_buffer_pool_size = 128M

 #須要作複製的數據庫名

 #replicate-do-db=test_custer

#服務器id

 server_id=2

 #自動跳過的表,session表不必作複製

 #replicate-ignore-table=dzx2.pre_common_session 

 #自動跳過的錯誤代碼,以防複製出錯被中斷

 #slave-skip-errors=1032,1062,126,1114,1146,1048,1396 

 #避免從庫意外崩潰,致使數據重複複製

 sync_master_info=1

 basedir=D:\mysqlcuster\mysqlslave

 datadir=D:\mysqlcuster\mysqlslave\data

 port=3308

 #設置從節點只讀,防止從節點寫入數據,致使主從數據庫數據不一致

 read_only=1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

#服務端的編碼方式

character-set-server=utf8

[client]

port=3308

default-character-set=utf8

六、使用net start mysqlsalve啓動salve服務器,啓動成功以後,登陸mysql,命令爲mysql -uroot -p -P3308和mysql -uroot -p -P3309

七、在master端輸入show master status,獲得查詢結果file和position;

八、在slave設置master的信息

change master to master_host='master的ip',

master_user='master建立的複製帳號',

master_password='master建立的複製帳號用戶名',

master_port=master的數據庫端口,

master_log_file='master運行show master status的結果中的file字段值',

master_log_pos=master運行show master status的結果中的position字段值';

九、在slave端運行start slave,以後再運行show slave status\G;若是查詢結果中的Slave_IO_Running、Slave_SQL_Running的值都爲yes,表示環境設置成功,如圖所示

十、測試。在master中建立test_custer數據庫和test表,查看slave數據庫也會存在test_custer數據庫和test表。


2、主主架構(Master-Master)

master-master模式和master-slave模式差很少,須要在2臺master中打開二進制文件,只是master-master模式中,存在2臺主機,2臺主機都可執行讀寫操做,這種模式有個缺點就是怎麼保證數據完整性,由於2臺主機都可執行寫操做,可能會存在一部分數據存放在master1,另外一部分數據存放在master2中,若是master1宕機了,整個數據庫環境的數據也就不完整了。


3、主從從架構(Master-Slave-Slave)

優勢:1)減輕master的複製壓力;

          2)master宕機後,slave可充當master角色,可避免單點故障

步驟:(master-slave-slave2,即slave充當slave2實例的master角色)

1)修改master配置文件my.ini,同上;

2)修改slave、slave2配置文件,同上。不過須要在slave服務器配置文件中新加2項配置

 #二進制日誌文件

log_bin=myslave-bin

#從服務器從主服務器接收到的更新記入到slave的二進制日誌

log_slave_updates=1

3)分別啓動master、slave、slave2服務器

4)登陸master服務器,輸入show master status;命令,查看file和position字段的值

5)登陸slave服務器,指定master服務器

6)在slave服務器中輸入start slave;命令,以後再運行show slave status\G;若是查詢結果中的Slave_IO_Running、Slave_SQL_Running的值都爲yes,表示環境設置成功,如圖所示

7)在slave服務器中運行show master status,查看file和position字段的值

8)啓動slave2服務器,設置slave2服務器對應的主服務器的信息

9)在slave2服務器中輸入start slave;命令,以後再運行show slave status\G;若是查詢結果中的Slave_IO_Running、Slave_SQL_Running的值都爲yes,表示環境設置成功,如圖所示

10)測試。在master上的test表中添加數據,若是master、slave、slave2服務器均有新插入的數據,表示成功

11)中止master服務器,而後在slave服務器中添加數據,若是slave2服務器的數據庫中有新添加的數據,表示slave2的主服務器就是slave服務器

相關文章
相關標籤/搜索