本文目錄一覽:
- 1、基於 MySQL Binlog 的 Elasticsearch 數據同步實踐
- 2、MySQL的備份與還原,非常規備份,全量備份,增量備份
- 3、如何對MySQL數據庫中的數據進行實時同步
- 4、mysql如何實現兩個數據庫數據結構實時同步?
- 5、如何同步兩個mysql數據庫中所有的表
- 6、如何全量同步mysql數據
基於 MySQL Binlog 的 Elasticsearch 數據同步實踐
一、背景
隨着馬蜂窩的逐漸發展,我們的業務數據越來越多,單純使用 MySQL 已經不能滿足我們的數據查詢需求,例如對於商品、訂單等數據的多維度檢索。
使用 Elasticsearch 存儲業務數據可以很好的解決我們業務中的搜索需求。而數據進行異構存儲後,隨之而來的就是數據同步的問題。
二、現有方法及問題
對於數據同步,我們目前的解決方案是建立數據中間表。把需要檢索的業務數據,統一放到一張MySQL 表中,這張中間表對應了業務需要的 Elasticsearch 索引,每一列對應索引中的一個Mapping 字段。通過腳本以 Crontab 的方式,讀取 MySQL 中間表中 UTime 大於上一次讀取時間的所有數據,即該段時間內的增量,寫入Elasticsearch。
所以,一旦業務邏輯中有相應字段的數據變更,需要同時顧及 MySQL 中間表的變更;如果需要 Elasticsearch 中的數據即時性較高,還需要同時寫入 Elasticsearch。
隨着業務數據越來越多,MySQL 中間表的數據量越來越大。當需要在 Elasticsearch 的索引中新增 Mapping 字段時,相應的 MySQL 中間表也需要新增列,在數據量龐大的表中,擴展列的耗時是難以忍受的。
而且 Elasticsearch 索引中的 Mapping 字段隨着業務發展增多,需要由業務方增加相應的寫入 MySQL 中間表方法,這也帶來一部分開發成本。
三、方案設計
1. 整體思路
現有的一些開源數據同步工具,如阿里的 DataX 等,主要是基於查詢來獲取數據源,這會存在如何確定增量(比如使用utime字段解決等)和輪詢頻率的問題,而我們一些業務場景對於數據同步的實時性要求比較高。為了解決上述問題,我們提出了一種基於 MySQL Binlog 來進行 MySQL 數據同步到 Elasticsearch 的思路。Binlog 是 MySQL 通過 Replication 協議用來做主從數據同步的數據,所以它有我們需要寫入 Elasticsearch 的數據,並符合對數據同步時效性的要求。
使用 Binlog 數據同步 Elasticsearch,業務方就可以專註於業務邏輯對 MySQL 的操作,不用再關心數據向 Elasticsearch 同步的問題,減少了不必要的同步代碼,避免了擴展中間表列的長耗時問題。
經過調研後,我們採用開源項目 go-mysql-elasticsearch 實現數據同步,並針對馬蜂窩技術棧和實際的業務環境進行了一些定製化開發。
2. 數據同步正確性保證
公司的所有表的 Binlog 數據屬於機密數據,不能直接獲取,為了滿足各業務線的使用需求,採用接入 Kafka 的形式提供給使用方,並且需要使用方申請相應的 Binlog 數據使用權限。獲取使用權限後,使用方以 Consumer Group 的形式讀取。
這種方式保證了 Binglog 數據的安全性,但是對保證數據同步的正確性帶來了挑戰。因此我們設計了一些機制,來保證數據源的獲取有序、完整。
1). 順序性
通過 Kafka 獲取 Binlog 數據,首先需要保證獲取數據的順序性。嚴格說,Kafka 是無法保證全局消息有序的,只能局部有序,所以無法保證所有 Binlog 數據都可以有序到達 Consumer。
但是每個 Partition 上的數據是有序的。為了可以按順序拿到每一行 MySQL 記錄的 Binglog,我們把每條 Binlog 按照其 Primary Key,Hash 到各個 Partition 上,保證同一條 MySQL 記錄的所有 Binlog 數據都發送到同一個 Partition。
如果是多 Consumer 的情況,一個 Partition 只會分配給一個 Consumer,同樣可以保證 Partition 內的數據可以有序的 Update 到 Elasticsearch 中。
2). 完整性
考慮到同步程序可能面臨各種正常或異常的退出,以及 Consumer 數量變化時的 Rebalance,我們需要保證在任何情況下不能丟失 Binlog 數據。
利用 Kafka 的 Offset 機制,在確認一條 Message 數據成功寫入 Elasticsearch 後,才 Commit 該條 Message 的 Offset,這樣就保證了數據的完整性。而對於數據同步的使用場景,在保證了數據順序性和完整性的情況下,重複消費是不會有影響的。
四、技術實現
1. 功能模塊
配置解析模塊
負責解析配置文件(toml 或 json 格式),或在配置中心(Skipper)配置的 json 字符串。包括 Kafka 集群配置、Elasticsearch 地址配置、日誌記錄方式配置、MySQL 庫表及字段與 Elasticsearch 的 Index 和 Mapping 對應關係配置等。
規則模塊
規則模塊決定了一條 Binlog 數據應該寫入到哪個 Elasticsearch 索引、文檔_id 對應的 MySQL 字段、Binlog 中的各個 MySQL 字段與索引 Mapping 的對應關係和寫入類型等。
在本地化過程中,根據我們的業務場景,增加了對 MySQL 表各字段的 where 條件判斷,來過濾掉不需要的 Binlog 數據。
Kafka 相關模塊
該模塊負責連接 Kafka 集群,獲取 Binlog 數據。
Binlog 數據解析模塊
原項目中的 Binlog 數據解析針對的是原始的 Binlog 數據,包含了解析 Replication 協議的實現。在我們的使用場景中,Binlog 數據已經是由 canal 解析成的 json 字符串,所以對該模塊的功能進行了簡化。
binlog json字符串示例
上面是一個簡化的 binlog json 字符串,通過該條 binlog 的 database 和 table 可以命中一條配置規則,根據該配置規則,把 Data 中的 key-value 構造成一個與對應 Elasticsearch 索引相匹配的 key-value map,同時包括一些數據類型的轉換:
Elasticsearch相關模塊
Binlog 數據解析模塊生成的 key-value map,由該模塊拼裝成請求_bulk 接口的 update payload,寫入 Elasticsearch。考慮到 MySQL 頻繁更新時對 Elasticsearch 的寫入壓力,key-value map 會暫存到一個 slice 中,每 200ms 或 slice 長度達到一定長度時(可以通過配置調整),才會調用 Elasticsearch 的_bulk 接口,寫入數據。
2. 定製化開發
1). 適應業務需求
upsert
業務中使用的索引數據可能是來自多個不同的表,同一個文檔的數據來自不同表的時候,先到的數據是一條 index,後到的數據是一條 update,在我們無法控制先後順序時,需要實現 upsert 功能。在_bulk 參數中加入
Filter
實際業務場景中,可能業務需要的數據只是某張表中的部分數據,比如用 type 字段標識該條數據來源,只需要把 type=1或2的數據同步到 Elasticsearch 中。我們擴展了規則配置,可以支持對 Binlog 指定字段的過濾需求,類似:
2)快速增量
數據同步一般分為全量和增量。接入一個業務時,首先需要把業務現有的 歷史 MySQL 數據導入到 Elasticsearch 中,這部分為全量同步。在全量同步過程中以及後續增加的數據為增量數據。
在全量數據同步完成後,如果從最舊開始消費 Kafka,隊列數據量很大的情況下,需要很長時間增量數據才能追上當前進度。為了更快的拿到所需的增量 Binlog,在 Consumer Group 消費 Kafka 之前,先獲取各個 Topic 的 Partition 在指定時間的 offset 值,並 commit 這些 offset,這樣在 Consumer Group 連接 Kafka 集群時,會從剛才提交的 offset 開始消費,可以立即拿到所需的增量 Binlog。
3). 微服務和配置中心
項目使用馬蜂窩微服務部署,為新接入業務提供了快速上線支持,並且在業務 Binlog 數據突增時可以方便快速的擴容 Consumer。
馬蜂窩配置中心支持了各個接入業務的配置管理,相比於開源項目中的 toml 格式配置文件,使用配置中心可以更方便的管理不同業務不同環境的配置。
五、日誌與監控
從上圖中可以看出,訂單各個表的數據同步延時平均在 1s 左右。把延時數據接入 ElastAlert,在延時數據過多時發送報警通知。
另一個監控指標是心跳檢測,單獨建立一張獨立於業務的表,crontab 腳本每分鐘修改一次該表,同時檢查上一次修改是否同步到了指定的索引,如果沒有,則發送報警通知。該心跳檢測,監控了整個流程上的 Kafka、微服務和 ES,任何一個會導致數據不同步的環節出問題,都會第一個接到通知。
六、結語
目前接入的最重要業務方是電商的訂單索引,數據同步延時穩定在 1s 左右。這次的開源項目本地化實踐,希望能為一些有 Elasticsearch 數據同步需求的業務場景提供幫助。
MySQL的備份與還原,非常規備份,全量備份,增量備份
1:官方百萬級別的測試數據庫:
官方測試數據庫github網址:
下載到目錄,解壓即可,運行命令:
2:自己創建簡單測試數據庫:
快速隨機生成測試語言的網站:
選擇sql和想生成的字段,點擊生成Generate!生成即可。
在MySQL輸入生成的語句即可。
3:測試備份還原時用到的命令
刪庫跑路測試(先備份好)
還原後查詢庫的表數據是否完整。
採用複製整個數據存放目錄
1:查看數據庫數據存放位置
有兩種方法:
1):在數據庫中用命令 show variables like ‘datadir’; 查看
2):在配置文件中查看,配置了 datadir 目錄的可查看。沒有配置的默認為 /var/lib/mysql/ 位置
Linux中查看配置文件
2:複製目錄或者目錄下某個數據庫名
3:還原時直接複製文件夾到數據庫目錄即可
mysqldump又可叫做全量備份。
參數 –databases 同 -B ,單獨一個庫,也可省略。
1、備份命令mysqldump格式
格式:mysqldump -h主機名 -P端口 -u用戶名 -p密碼 database 數據庫名 文件名.sql
備份testDatabase數據庫
2、備份MySQL數據庫為帶刪除表的格式
備份MySQL數據庫為帶刪除表的格式,能夠讓該備份覆蓋已有數據庫而不需要手動刪除原有數據庫。
3、直接將MySQL數據庫壓縮備份
備份並壓縮
4、備份MySQL數據庫某個(些)表
備份testDatabase中的myTable表,不需要用參數 –databases 或者 -B
5、同時備份多個MySQL數據庫
同時備份testDatabase和 employees兩個庫
6、備份服務器上所有數據庫
參數 –all-databases 同 -A
7、還原MySQL數據庫的命令
1) 不指定數據名還原,默認生成原數據庫名稱,還原所有數據庫。
2) 指定數據名還原,還原指定單個數據庫,需在數據庫種預先創建一個testDatabase名稱。
3) 還原壓縮的MySQL數據庫
4) 進入數據庫用source導入
增量備份是針對於數據庫的bin-log日誌進行備份的,增量備份是在全量的基礎上進行操作的。增量備份主要是靠mysql記錄的bin-log日誌。
1:查看是否開啟bin-log日誌
進入mysql輸入命令可查看。
顯示如下為開啟狀態,日誌文件在/var/lib/mysql/以binlog.00001的格式保存。
如未開啟,需要在配置文件種配置
2:查看目前使用的bin-log日誌文件
進入mysql查看命令。
顯示如下,目前使用的是binlog.000022文件,所有操作都記錄在此文件。
查看當前testDatabase的表myTable數據如下,
3:刷新日誌,使用新的日誌文件(備份)
在命令端執行命令
日誌文件從 binlog.000022 變為 binlog.000023
這時相當與已經備份成功,備份文件即為上次的binlog.000022日誌文件。
4:刪除數量,從日誌還原數據
1) 刪除ABC行
查詢以及沒有ABC行列。
2) 恢複數據ABC行
退出mysql,在命令端用mysqlbinlog命令恢復到binlog.000022日誌狀態。
進入數據庫再次查看數據,ABC已經恢復。
增量備份完成。
如何對MySQL數據庫中的數據進行實時同步
實現兩個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庫里馬上也能
看到相應的變更。兩台服務器的同步操作可以說是瞬間完成的。
mysql如何實現兩個數據庫數據結構實時同步?
實現兩個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庫里馬上也能
看到相應的變更。兩台服務器的同步操作可以說是瞬間完成的。
如何同步兩個mysql數據庫中所有的表
用數據庫快照就能實現啊.
Oracle快照原理及實現總結
Oracle數據庫的快照是一個表,它包含有對一個本地或遠程數據庫上一個或多個表或視圖的查詢的結果。對於中大型數據庫,業務數據庫里所有的數據同步到另外一個處理服務器上最佳的選擇還是使用SnapShot方式,即快照的方式。
由於工作需要,今天需要將業務數據庫里所有的數據同步到另外一個處理服務器上。在做方案的時候,想了很多方法,當然最快的辦法還是使用物理熱備的方式。
但是我個人認為如果對於中大型數據庫(我們的數據庫有300G左右)最佳的選擇還是使用SnapShot方式,即快照的方式。
Oracle數據庫的快照是一個表,它包含有對一個本地或遠程數據庫上一個或多個表或視圖的查詢的結果。也就是說快照根本的原理就是將本地或遠程數據庫上的一個查詢結果保存在一個表中。
以下是我建立的Snapshot,目的是從業務數據庫上將數據Copy到處理數據庫上,是不同的兩個服務器之間對數據copy。
第一步:在處理服務器上的Oracle終端,建立database link,業務數據庫服務器SID為TEST
create database link TEST_DBLINK.US.ORACLE.COM
connect to AMICOS identified by AMICOS
using ‘test’;
第二步:在業務數據庫上對應的表建立快照日誌
Create snapshot log on A_Table;
第三步:建立Snapshot 快照名稱為:Test_SnapShot
Create snapshot Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/24
as select * from A_Table@TEST_DBLINK
說明:REFRESH是刷新方法
刷新方式有:COMPLETE和FAST兩種,而START WITH是說明開始執行的時間。
Next是下次執行的時間
而AS以後是構成快照的查詢方法。
相關的方法:
更改快照
ALTER SNAPSHOT Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/2;
手動刷新快照 在命令界面執行:
EXEC DBMS_SNAPSHOT.REFRESH(‘Test_SnapShot ‘,’C’);
第一個參數是要刷新的快照名
第二個參數是刷新的方式,F—-FAST, C—COMPLETE
查看快照最後刷新的日期
SELECT NAME,LAST_REFRESH
FROM ALL_SNAPSHOT_REFRESH_TIMES;
最後非常的方案:
1:為需要做Snapshot的表建立Snapshot日誌
create snapshot log on t1 with rowid; 這裡使用ROWID建立日記的參數
2:採用Fast的方式建立快照,使用rowid做為參考參數
create snapshot fb_test_b refresh fast with rowid start with sysdate next sysdate+1/1440 as select * from fb_test_b@my_dblink;
最好能按照rowid來建立快照。要不然就必須要為表建立Primary Key。
如何全量同步mysql數據
增量同步和全量同步是數據庫同步的兩種方式。全量同步是一次性同步全部數據,增量同步則只同步兩個數據庫不同的部分。
原創文章,作者:PNSZ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135627.html