下載網站:www.SyncNavigator.CN
客服QQ1793040
----------------------------------------------------------
關於HKROnline SyncNavigator 注冊機價格的問題
HKROnline SyncNavigator 8.4.1 非破解版 注冊機 授權激活教程
最近一直在研究數據庫同步的問題,在網上查了很多資料,也請教了很多人,找到了一種通過快照復制的方法。研究了一番后發現之前就是用的這個方法,效果不是很好,果斷放棄。經過了一番尋覓和他人指點,最后從一位熱心網友那里得知一款很好用的軟件—— SyncNavigator。
好東西就要拿出來跟大家分享,所以今天向大家介紹一下這款軟件,及其一些使用方法。下面先看看它有什么強大的功能吧!
SyncNavigator的基本功能:
自動同步數據/定時同步數據
無論是實時同步/24小時不間斷同步,還是根據計划任務(每小時/每日/每周/等)定時自動同步都能完全勝任。
完整支持 Microsoft SQL Server
完整支持 Microsoft SQL Server 2000 2005 2008 數據庫類型。並能在不同數據庫版本之間相互同步數據。
支持 MySQL 4.1 以上版本
支持 MySQL 4.1 5.0 5.1 5.4 5.5。並能在不同數據庫版本之間相互同步數據。
無人值守和故障自動恢復
當數據庫故障或網絡故障以后,無需人工干預(或操作)自動恢復同步並確保數據完全准確,可靠。
同構數據庫同步/異構數據庫同步
SQL Server to SQL Server, MySQL to MySQL, SQL Server to MySQL 等都能輕松實現。
斷點續傳和增量同步
當同步完成(或中斷)后,再次同步時能繼續上一次的位置增量同步,避免每次都需要從頭開始的問題。
binlog是MySQL以二進制形式打印的日志,它默認不加密、不壓縮。每個正常的binlog文件頭部有4個字節的標記,值為0xfe 0x62 0x69 0x6e(magic數字標記是binlog文件)。從第4個字節之后是一個一個的event,log_event是binlog里的單位,即正常情況下binlog按照逐log_event的形式增長。除去頭部的標記,binlog就是一個log_event的序列。每個log_event都獨立單元,沒有互相引用的關系,它也有自己的二進制頭部,主要是記錄了時間戳、類型標記等描述信息。
Binlog模式分三種Row、Statement、Mixed
Row模式存儲的是數據修改后的結果,binlog中可以不記錄執行的sql語句的上下文相關的信息,僅僅只需要記錄那一條記錄被修改了,修改成什么樣了。對於update mytable set col1=’abc’ where col2=’c’在row模式下可能產生大量的數據,因為語句雖然是一條,但實際影響的數據記錄卻可能很多。而對於alter table、drop table、create table等信息在Row模式下則不會產生大量的log條目,因為它還是記錄的語句,而不是單行數據的變化情況。
Statemnet模式每一條會修改數據的sql都會記錄到 master的binlog中。slave在復制的時候sql進程會解析成和原來master端執行過的相同的sql來再次執行。由於他是記錄的執行語句,所以,為了讓這些語句在slave端也能正確執行,那么他還必須記錄每條語句在執行的時候的一些相關信息,也就是上下文信息,以保證所有語句在slave端杯執行的時候能夠得到和在master端執行時候相同的結果。
Mixed模式則是前兩種的混合,MySQL會根據執行的每一條具體的sql語句來區分對待記錄的日志形式,也就是在Statement和Row之間選擇一種。選擇性的使用面向行數據變化的Row方式記錄,主要是面對一些未決語句(nondeterministic),考慮到安全問題,避免主從庫之間數據出現不一致,比如語句面向多行插入,其中又有auto-increment的字段,數據庫存儲引擎不同,可能帶來插入順序
mysql主從同步延遲原理
要了解MySQL數據庫主從同步延遲原理,我們先從MySQL的數據庫主從復制原理說起:
MySQL的主從復制都是單線程的操作,主庫對所有DDL和DML產生的日志寫進binlog,由於binlog是順序寫,所以效率很高。Slave的IO Thread線程從主庫中binlog中讀取取日志。Slave的SQLThread線程將主庫的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是隨即的,不是順序的,成本高很多。由於SQL Thread也是單線程的,如果slave上的其他查詢產生lock爭用,又或者一個DML語句(大事務、大查詢)執行了幾分鍾,那么所有之后的DML會等待這個DML執行完才會繼續執行,這就導致了延時。
主從同步延遲的引發原因
1、Master負載
2、Slave負載
3、網絡延遲
4、機器配置(cpu、內存、硬盤)
總之,當主庫的並發較高時,產生的DML數量超過slave的SQL Thread所能處理的速度,或者當slave中有大型query語句產生了鎖等待那么延時就產生了。
同步延遲的解決方案
- 最簡單的減少slave同步延時,盡量讓主庫的DDL快速執行。還有就是主庫是寫,對數據安全性較高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設置,而slave則不需要這么高的數據安全,完全可以講sync_binlog設置為0或者關閉binlog,innodb_flushlog也可以設置為0來提高sql的執行效率,從庫關閉binlog記錄。另外就是使用比主庫更好的硬件設備作為slave。
- 在業務架構上將不同的業務分布到不同的物理數據庫上,同一個業務分庫架構,在業務層與數據庫之間增加分布式緩存以便減少主庫的壓力。
- 在mysql 5.7版本后開始支持多線程並行復制技術enhanced multi-threaded slave(簡稱MTS)。
MySQL並行同步機制
並行同步在MySQL5.6就開始支持,只不過在5.6時是基於schema的,也就是基於庫的,相比於5.7的機制要遜色的多。MySQL 5.7才可稱為真正的並行復制,這其中最為主要的原因就是slave服務器的回放與主機是一致的。即master服務器上是怎么並行執行的slave上就怎樣進行並行回放。不再有庫的並行復制限制。
從MySQL官方來看,其並行復制的原本計划是支持表級的並行復制和行級的並行復制,行級的並行復制通過解析ROW格式的二進制日志的方式來完成。但是最終出現給小伙伴的確是在開發計划中稱為:MTS: Prepared transactions slave parallel applier。該並行復制的思想最早是由MariaDB的Kristain提出,並已在MariaDB 10中出現,相信很多選擇MariaDB的小伙伴最為看重的功能之一就是並行復制。
MySQL 5.7並行復制的思想簡單易懂,一言以蔽之:一個組提交的事務都是可以並行回放,因為這些事務都已進入到事務的prepare階段,則說明事務之間沒有任何沖突(否則就不可能提交)。為了兼容MySQL 5.6基於庫的並行復制,5.7引入了新的變量slave-parallel-type,其可以配置的值有:
• DATABASE:默認值,基於庫的並行復制方式
• LOGICAL_CLOCK:基於組提交的並行復制方式
MySQL在binlog中定義了兩個Logical_clock的變量:
• max_c ommitted_transaction:記錄上次組提交時的logical_clock,代表上述mysqlbinlog中的last_committed
• transaction_counter:記錄當前組提交中各事務的logcial_clock,代表上述mysqlbinlog中的sequence_number
通過工具檢查binlog文件,可以發現較之原來的二進制日志內容多了last_committed和sequence_number,last_committed表示事務提交的時候,上次事務提交的編號,如果事務具有相同的last_committed,表示這些事務都在一組內,可以進行並行的回放。例如上述last_committed為0的事務有6個,表示組提交時提交了6個事務,而這6個事務在從機是可以進行並行回放的。
提升同步的策略中,有很多實現,包括MySQL各版本的實現及MariaDB等分支的實現上,按按粒度區分的三個策略,粒度從粗到細是按庫、按表、按行,而MySQL5.7按照commit_id的策略適用范圍更廣,改進策略並發性更優。