環境要求:mysql
Windows 操做系統sql
須要Mysql 3.23.15之後的版本。數據庫
假設數據庫A爲主機,數據庫B爲從機(A向B提供同步服務,即B中的數據來自A)windows
A機器:IP=10.10.151.166安全
B機器:IP=10.10.151.156服務器
下面看單向同步的配置步驟:異步
1 在機器A中創建一個新的數據庫,sql語句:網站
2 打開A機器的mysql安裝目錄下的my.ini文件,在文件最後添加:spa
3 在機器B中創建一個和機器A結構相同的數據庫,sql語句:操作系統
注:機器A和B的數據庫結構必須一致,不然沒法構成同步
4 打開B機器的mysql安裝目錄下的my.ini文件,在文件最後添加:
#這句是爲讓從服務器有足夠的權限從主服務器是哪一個接收二進制日誌文件
6 重啓機器A和B的mysql數據庫,
7 在機器A中test數據庫中的backup_table表中插入一些數據,查看機器B中test數據庫中的backup_table表應該同步實現了數據的改動。
下面是雙向的數據同步配置步驟:
1仍是上面使用的機器A和機器B,這是B是主機,A是從機,保持上面的配置不要改在機器A 的mysql安裝目錄下的my.ini文件最後添加:
master-host=10.10.151.156 #主機B的地址
master-user=ym #主機B提供給A的用戶,該用戶中須要包括數據庫test的權限
master-password=ym #訪問密碼
master-port=3306 #端口,主機的MYSQL端口
master-connect-retry=60 #重試間隔60秒當主從服務器鏈接意外斷開時數據庫每隔60秒進行一個從新鏈接
replicate-do-db=test #同步的數據庫
在機器B的mysql安裝目錄下的my.ini文件最後添加
log-bin=c:\mysqlback #啓動同步事件的日誌記錄文件
binlog-do-db=test #提供數據同步服務的數據庫
2 機器B的mysql控制檯輸入:
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO ym@10.10.151.166 IDENTIFIED BY 'ym' ; 3 重啓機器A和機器B的mysql數據庫 在機器B中test數據庫中的backup_table表中插入一些數據,查看機器A中test數據庫中的backup_table表應該同步實現了數據的改動。但不會致使循環 注:實現mysql數據庫的數據同步,須將倆臺windows操做系統的windows防火牆關閉 Mysql 數據同步的原理: Mysql的數據同步,在Mysql官方網站文檔上,叫replication字面意思是重做,這個很準確的代表了Mysql數據庫操做的實質,是重做一樣的操做,以保持主數 據庫服務器沒事master與從屬數據庫服務器slave之間的數據保持一致。 從MySQL3.23.15之後,Mysql支持單向的異步複製。也就是說,1臺Mysql服務器充當Master(主庫),1臺或多臺Mysql服務器 充當Slaves(從庫),數據從 Master向Slaves進行異步複製。注意,這種複製是異步的,有別於Mysql的同步複製實現(這種實現稱作Mysql集羣,Mysql Cluster)。 當主庫有更新的時候,主庫會把更新操做的SQL寫入二進制日誌(Bin log它記錄了全部更新了數據或者已經潛在更新了數據的全部語句),並維護一個二進制日誌 文件的索引,以便於日誌文件輪迴(Rotate)。在從庫啓動異步複製的時候,從庫會開啓兩個I/O線程,其中一個線程鏈接主庫,要求主庫把二進制日誌的 變化部 分傳給從庫,並把傳回的日誌寫入本地磁盤。另外一個線程則負責讀取本地寫入的二進制日誌,並在本地執行,以反映出這種變化保證主從數據庫之間的數據同步。 較老的版本在複製的時候只啓用一個I/O線程,實現這兩部分的功能。這種方法是利用了Mysql數據庫主(master)和從(slave)異步複製功 能,來實現數據庫 之間的同步。 Windows系統中,Mysql安裝目錄下my.ini文件中: log-bin=c:\mysqlback; 這一句表示數據庫的二進制日誌文件都存放在C盤根目錄下,而且以mysqlback爲文件名,以.000001這樣的序號爲爲文件的擴展名,每個 binlog文件默認是 1GB,超過了會自動換到以.000002爲文件擴展名的的文件,索引文件mysqlback.index文件記錄了全部mysqlback的文件名。當 然也能夠刪除這些二進制日誌 文件: 使用下面的兩個命令 PURGE {MASTER | BINARY} LOGS TO 'log_name' //log_name不會被清除,刪除這個序號以//前的 PURGE {MASTER | BINARY} LOGS BEFORE 'date' //date不會被清除,刪除這個日期之前的 刪除以前全部的二進制日誌文件,並從新生成新的二進制日誌文件後綴從.000001開始。 可是,當若是有一個正在運行的從屬服務器,該服務器當前正在讀取正在試圖刪除的日誌文件時則該刪除語句不會起做用,而是會失敗,並伴隨一個錯誤。不過, 若是從屬服務器是中止的,而且碰巧清理了其想要讀取的日誌文件,則從屬服務器啓動後便不能複製。當從屬服務器正在複製時,刪除語句能夠安全運行,不須要 中止它們。 在完成了主服務器A的my.ini文件的配置以後,重啓主服務器A,從如今起對主服務器A數據庫的增長、刪除和修改操做都會記錄在二進制日誌文件中(查詢 操做不 作記錄)。但也能夠指定從服務器從哪裏開始和主服務器進行同步,在從服務器上執行下面sql操做: 首先輸入命令:slave stop; 而後輸入:Mysql > change master to —>master_host=’master_host_name’,#主機IP地址 —>master_user=’replication_user_name’, —>master_password=’replication_password’, —>master_log_file=’recorded_log_file_name’, —>master_log_pos=’recorded_log_position’; 最後輸入命令:slave start; 這裏,把上面的recorded_log_file_name改成想從哪一個二進制日誌文件開始同步的文件名,而recorded_log_position改成從該文件的第幾條記錄開始同 步。 先輸入slave stop;指令,再輸入上述指令,最後輸入slave start;指令 當數據同步產生錯誤時,會在mysql安裝目錄下生成*.err日誌文件,同時同步線程會退出。 purge binary logs to ‘mysql-bin.000003′; PURGE {MASTER | BINARY} LOGS TO 'log_name' PURGE {MASTER | BINARY} LOGS BEFORE 'date' 用於刪除列於在指定的日誌或日期以前的日誌索引中的全部二進制日誌。這些日誌也會從記錄在日誌索引文件中的清單中被刪除,這樣被給定的日誌成爲第一個。 例如: PURGE MASTER LOGS TO 'mysql-bin.010'; PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00'; 清除3天前的 binlog PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY); BEFORE變量的date自變量能夠爲'YYYY-MM-DD hh:mm:ss'格式。MASTER和BINARY是同義詞。