通過歸檔日志定期增量同步數據實驗:
一、再次實驗從歸檔持續同步的方式:
1.修改主庫,開啟歸檔,將日志歸檔到從庫:
archive_mode = on
archive_command = 'ssh 192.168.5.133 test ! -f /home/kingbase/test_fy/archive/%f && scp %p 192.168.5.133:/home/kingbase/test_fy/archive/%f'
wal_keep_segments = 1024
max_wal_senders = 8
2.備庫需要從主庫拉取全量備份:
pg_basebackup -D ./data -R -h 192.168.5.132 -p 54328 -U SYSTEM -w
3.備庫recovery.conf文件:
restore_command = 'cp /home/kingbase/test_fy/archive/%f %p'
standby_mode = on
這種方法是同步的,當備庫需要的日志沒有時,會一直提示:
LOG: restored log file "00000001000000000000004E" from archive
cp: cannot stat `/home/kingbase/test_fy/archive/00000001000000000000004F': No such file or directory
cp: cannot stat `/home/kingbase/test_fy/archive/00000001000000000000004F': No such file or directory
cp: cannot stat `/home/kingbase/test_fy/archive/00000001000000000000004F': No such file or directory
cp: cannot stat `/home/kingbase/test_fy/archive/00000001000000000000004F': No such file or directory
二、在一的基礎上,定期拷貝wal文件
1.關閉歸檔,並重啟數據庫:
2.產生新的數據,並拷貝到從庫歸檔路徑:
scp /home/kingbase/test_fy/data/sys_xlog/* 192.168.5.133:/home/kingbase/test_fy/archive/
3.從庫數據庫會從歸檔目錄中獲取到增量的日志並回放
cp: cannot stat `/home/kingbase/test_fy/archive/000000010000000000000050': No such file or directory
cp: cannot stat `/home/kingbase/test_fy/archive/000000010000000000000050': No such file or directory
cp: cannot stat `/home/kingbase/test_fy/archive/000000010000000000000050': No such file or directory
cp: cannot stat `/home/kingbase/test_fy/archive/000000010000000000000050': No such file or directory
cp: cannot stat `/home/kingbase/test_fy/archive/000000010000000000000050': No such file or directory
LOG: restored log file "000000010000000000000050" from archive
LOG: restored log file "000000010000000000000051" from archive
LOG: restored log file "000000010000000000000052" from archive
三、結論:
通過日志文件拷貝的方式,可以實現增量數據的交換和同步
備注:
1)wal日志拷貝可以從主庫歸檔目錄中獲取。
2)拷貝完成的wal日志,可以從歸檔中刪除。例如,寫一個腳本,同步前一天的數據,並刪除。
3)備庫始終是只讀的。