1. 程式人生 > 資料庫 >pt-table-sync解決MySQL資料不一致

pt-table-sync解決MySQL資料不一致

pt-table-sync是解決主從資料不一致的絕佳工具,也可也用於兩個不是主從資料庫之間資料同步,不能同步ddl,只能同步資料,以下為常用例子:

其中h=192.168.56.101為源端,h=192.168.56.102為目標端:

1.sync兩個獨立資料庫,無主從複製關係,同步資料庫中所有的表,並排除特定資料庫:

pt-table-sync --charset=utf8 --ignore-databases=,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=,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=,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

  1. 同步指定庫或者指定表

只對指定的庫進行資料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