pt-table-sync常用參考
pt-table-sync是解決主從資料不一致的絕佳工具,也可也用於兩個不是主從資料庫之間資料同步,不能同步ddl,只能同步資料,以下為常用例子:
其中h=192.168.56.101為源端,h=192.168.56.102為目標端:
1.sync兩個獨立資料庫,無主從複製關係,同步資料庫中所有的表,並排除特定資料庫:
pt-table-sync --charset=utf8 --ignore-databases=mysql,sys u=admin,p=admin,h=192.168.56.101,P=3306 dsn=u=admin,p=admin,h=192.168.56.103,P=3306 --execute --print
如果為主從可以使用--no-check-slave 忽略主從關係,建議先使用--print檢視有哪些不一致,然後使用--execute進行同步:
打印出不一致資料:
pt-table-sync --charset=utf8 --ignore-databases=mysql,sys --no-check-slave u=admin,p=admin,h=192.168.56.101,P=3306 dsn=u=admin,p=admin,h=192.168.56.102,P=3306 --print
同步資料並打印出同步語句:
pt-table-sync --charset=utf8 --ignore-databases=mysql,sys --no-check-slave u=admin,p=admin,h=192.168.56.101,P=3306 dsn=u=admin,p=admin,h=192.168.56.102,P=3306 --execute --print
- 同步指定庫或者指定表
只對指定的庫進行資料sync:
pt-table-sync --charset=utf8 --ignore-databases=mysql,sys --databases=data u=admin,p=admin,h=192.168.56.101,P=3306 dsn=u=admin,p=admin,h=192.168.56.102,P=3306 --execute --print
只對指定的表進行資料sync,多個表用逗號隔開:
pt-table-sync --charset=utf8 --ignore-databases=mysql,sys --databases=data --tables=t_shop_order,t_shop_order_detail u=admin,p=admin,h=192.168.56.101,P=3306 dsn=u=admin,p=admin,h=192.168.56.102,P=3306 --execute --print
--tables也可以使用資料庫名和表:
--tables=database_name.table_name
忽略某些庫或者忽略某些表
--ignore-databases=指定要忽略的庫
--ignore-tables=database_name.table_name 指定要忽略的表
3.如果是主從複製,可以加上--sync-to-master引數進行資料sync:
需要同步的表有主鍵或者唯一鍵,其中192.168.56.102為備庫:
pt-table-sync --sync-to-master --charset=utf8 --ignore-databases=mysql,sys u=admin,p=admin,h=192.168.56.102,P=3306 --execute --print
sync同步多個slave備庫,其中h=192.168.56.102,P=3306, h=192.168.56.103為備庫:
pt-table-sync --sync-to-master --charset=utf8 --ignore-databases=mysql,sys u=admin,p=admin,h=192.168.56.102,P=3306 , u=admin,p=admin,h=192.168.56.103,P=3306 --execute --print
4.pt-table-sync 幫助說明:
pt-table-sync --help