Percona Toolkitç³»åä¹åä¸ï¼pt-table-sync
- pt-table-sync åæ¥ MySQL 表æ°æ®
åºæ¬ä½¿ç¨è¯æ³ä¸ºï¼pt-table-sync [OPTIONS] DSN [DSN]
ä¸é¢å表ååºé¨åoptionsï¼æ´å 详ç»ç请使ç¨pt-table-sync --helpè¿è¡æ¥ç
OPTIONSï¼
OPTIONS | çæä½ç¬¦ | ç±»å | é»è®¤å¼ | ç®è¦è¯´æ |
--ask-pass | è¿æ¥ MySQL æ¶æ示è¾å ¥å¯ç ã | |||
--bidirectional | å¨ç¬¬ä¸å°ä¸»æºååç»ä¸»æºä¹é´å¯ç¨åååæ¥ | |||
--[no]bin-log | è®°å½å°äºè¿å¶æ¥å¿ | |||
--buffer-in-mysql | æ示 MySQL å¨å ¶å åä¸ç¼å²æ¥è¯¢ | |||
--[no]buffer-to-client | æ¯è¾æ¶ä» MySQL ä¸ä¸ä¸è·åè¡ | |||
--[no]check-child-tables | æ£æ¥æ¯å¦ä¼å¯¹å表产çä¸å©å½±åã | |||
--[no]check-master | å°è¯éªè¯æ£æµå°ç master æ¯çæ£ç master | |||
--[no]check-slave | æ£æ¥ç®æ æå¡å¨æ¯å¦ä¸ºä»æå¡å¨ | |||
--[no]check-triggers | æ£æ¥ç®æ 表ä¸æ¯å¦æªå®ä¹è§¦åå¨ | |||
--database | -D | s | è¿æ¥å°è¿ä¸ªæ°æ®åºã | |
--execute | æ§è¡æ¥è¯¢ | |||
--host | -h | s | è¿æ¥å°ä¸»æºã | |
--ignore-databases | H | 忽ç¥è¿ä¸ªä»¥éå·åéçæ°æ®åºå表 | ||
--ignore-engines | H | 忽ç¥è¿ä¸ªéå·åéçåå¨å¼æå表 | ||
--ignore-tables | H | 忽ç¥è¿ä¸ªä»¥éå·åéçè¡¨æ ¼å表 | ||
--lock | i | éå®è¡¨ï¼0=æ ï¼1=æ¯ä¸ªåæ¥å¨æï¼2=æ¯ä¸ªè¡¨ï¼æ 3=å ¨å± | ||
--lock-and-rename | éå®æºè¡¨åç®æ 表ï¼åæ¥ï¼ç¶å交æ¢å称 | |||
--password | -p | è¿æ¥æ¶ä½¿ç¨çå¯ç ãå¦æå¯ç å å«éå·ï¼å®ä»¬å¿ é¡»ç¨åææ è½¬ä¹ | ||
--port | -P | i | ç¨äºè¿æ¥ç端å£å·ã | |
--socket | -S | ç¨äºè¿æ¥çå¥æ¥åæ件ã | ||
--sync-to-master | å° DSN è§ä¸ºä»å¹¶å°å ¶åæ¥å°ä¸»ã | |||
--tables | -t | h | ä» åæ¥æ¤éå·åéç表å表ã | |
--user | -u | å¦æä¸æ¯å½åç¨æ·ï¼åç¨äºç»å½çç¨æ·ã | ||
--where | s | WHERE åå¥éå¶åæ¥å°è¡¨çä¸é¨å |
ç±»åå¤æ³¨ï¼s=string, i=integer, f=float, h/H/a/A=comma-separated list, d=DSN, z=size, m=time
DSN为è¦æä½çæ°æ®åºå表ã
DSNï¼
DSN | ç®è¦è¯´æ |
A | é»è®¤å符éã |
D | æ°æ®åºã |
F | ä» ä»ç»å®æ件ä¸è¯»åé»è®¤é项 |
h | è¿æ¥å°ä¸»æºã |
p | è¿æ¥æ¶ä½¿ç¨çå¯ç ãå¦æå¯ç å å«éå·ï¼å®ä»¬å¿ é¡»ç¨åææ è½¬ä¹ |
P | ç¨äºè¿æ¥ç端å£å·ã |
S | ç¨äºè¿æ¥çå¥æ¥åæ件ã |
u | å¦æä¸æ¯å½åç¨æ·ï¼åç¨äºç»å½çç¨æ·ã |
- åºæ¬ä½¿ç¨æ ·ä¾
- åæå¡å¨å¤ä¸ªæ°æ®åºå表ä¸å¤ä»½è¡¨çåæ¥ï¼åæ¥æå®è¡¨
ç®åï¼ææ°æ®åºtestï¼åå¨å¦ä¸è¡¨t_goodsï¼
CREATE TABLE `t_goods` (
`goodid` int NOT NULL,
`goodname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
PRIMARY KEY (`goodid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
ææ°æ®åºtest_bakï¼åå¨å¤ä»½è¡¨t_goods_bakï¼
CREATE TABLE `t_goods_bak` (
`goodid` int NOT NULL,
`goodname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
PRIMARY KEY (`goodid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
å表ï¼test.t_goods | å¤ä»½è¡¨ï¼test_bak.t_goods_bak | ||
goodid | goodname | goodid | goodname |
1 | çµè§ | 1 | çµè§ |
2 | å°ç®± | 2 | å°ç®± |
3 | ç¤ç®± | 3 | ç¤ç®± |
4 | çµè | 4 | çµè |
5 | ææº | 5 | ææº |
6 | èªè¡è½¦ | 6 | æ©æ车 |
å¯ä»¥çå°å表åå¤ä»½è¡¨æå·®å¼ï¼éè¦ä»¥å表è¿è¡åæ¥
pt-table-sync h=192.168.246.135,u=root,p=Ygzlpaul*2022,D=test,t=t_goods h=192.168.246.135,u=root,p=Ygzlpaul*2022,D=test_bak,t=t_goods_bak --execute
æ§è¡åï¼æ£æ¥è¡¨æ°æ®ï¼åç°å·²ç»ä¸è´ï¼é½æ¯ï¼6 èªè¡è½¦
é£ä¹è¿ä¸ªåæ¥æ°æ®ï¼æ¯ç©¶ç«åäºä»ä¹æä½å¢ï¼
æ们æ¥çæ¥å¿ï¼åç°å¦ä¸ä¿¡æ¯ï¼
BEGIN
/*!*/;
# at 6936
#221120 16:53:26 server id 111 end_log_pos 7005 CRC32 0xdfbfa009 Table_map: `test_bak`.`t_goods_bak` mapped to number 100
# at 7005
#221120 16:53:26 server id 111 end_log_pos 7071 CRC32 0x07dc3de9 Update_rows: table id 100 flags: STMT_END_F
### UPDATE `test_bak`.`t_goods_bak`
### WHERE
### @1=6
### @2='æ©æ车'
### SET
### @1=6
### @2='èªè¡è½¦'
# at 7071
#221120 16:53:26 server id 111 end_log_pos 7102 CRC32 0x8abb3f76 Xid = 907
COMMIT/*!*/;
让æ们å°å表åå¤ä»½è¡¨çæ°æ®åå«æ¹å¨å¦ä¸ï¼
å表ï¼test.t_goods | å¤ä»½è¡¨ï¼test_bak.t_goods_bak | ||
goodid | goodname | goodid | goodname |
1 | å°ç®± | 1 | çµè§ |
2 | çµè§ | 2 | å°ç®± |
3 | ç¤ç®± | ||
4 | çµè | 4 | çµè |
5 | ææº | 5 | ææº |
6 | èªè¡è½¦ | ||
7 | èªè¡è½¦ |
å次åæ¥ï¼
pt-table-sync h=192.168.246.135,u=root,p=Ygzlpaul*2022,D=test,t=t_goods h=192.168.246.135,u=root,p=Ygzlpaul*2022,D=test_bak,t=t_goods_bak --execute
æ们æ¥çæ¥å¿ï¼åç°å¦ä¸ä¿¡æ¯ï¼
BEGIN
/*!*/;
# at 8526
#221120 17:06:30 server id 111 end_log_pos 8595 CRC32 0x821534a9 Table_map: `test_bak`.`t_goods_bak` mapped to number 100
# at 8595
#221120 17:06:30 server id 111 end_log_pos 8645 CRC32 0xb68b586e Delete_rows: table id 100 flags: STMT_END_F
### DELETE FROM `test_bak`.`t_goods_bak`
### WHERE
### @1=7
### @2='èªè¡è½¦'
# at 8645
#221120 17:06:30 server id 111 end_log_pos 8714 CRC32 0x34b313c6 Table_map: `test_bak`.`t_goods_bak` mapped to number 100
# at 8714
#221120 17:06:30 server id 111 end_log_pos 8764 CRC32 0xec353b66 Write_rows: table id 100 flags: STMT_END_F
### INSERT INTO `test_bak`.`t_goods_bak`
### SET
### @1=6
### @2='èªè¡è½¦'
# at 8764
#221120 17:06:30 server id 111 end_log_pos 8833 CRC32 0xfec401d2 Table_map: `test_bak`.`t_goods_bak` mapped to number 100
# at 8833
#221120 17:06:30 server id 111 end_log_pos 8893 CRC32 0x9f48a3e2 Update_rows: table id 100 flags: STMT_END_F
### UPDATE `test_bak`.`t_goods_bak`
### WHERE
### @1=1
### @2='çµè§'
### SET
### @1=1
### @2='å°ç®±'
# at 8893
#221120 17:06:30 server id 111 end_log_pos 8962 CRC32 0x06080cbf Table_map: `test_bak`.`t_goods_bak` mapped to number 100
# at 8962
#221120 17:06:30 server id 111 end_log_pos 9022 CRC32 0x76ff056f Update_rows: table id 100 flags: STMT_END_F
### UPDATE `test_bak`.`t_goods_bak`
### WHERE
### @1=2
### @2='å°ç®±'
### SET
### @1=2
### @2='çµè§'
# at 9022
#221120 17:06:30 server id 111 end_log_pos 9053 CRC32 0x2e673e08 Xid = 1084
COMMIT/*!*/;
2.2 主ä»å¤å¶è¡¨åæ¥ï¼åæ¥æå®è¡¨
ææ¶åï¼æ们ä¼å¨Slaveä¸åä¸äºæä½ï¼å¯¼è´ä¸äºæ°æ®æå¤çåçï¼èå¼èµ·æ°æ®çä¸ä¸è´æ§ã
ä¾å¦å½å¯¹Slaveç表åäºä¸äºä¿®æ¹åï¼æ°æ®å¦ä¸ï¼
192.168.246.135 Masteråºï¼test.t_goods | 192.168.246.136 Slaveåºï¼test.t_goods | ||
goodid | goodname | goodid | goodname |
1 | å°ç®± | 1 | çµè§ |
2 | çµè§ | 2 | å°ç®± |
3 | ç¤ç®± | ||
4 | çµè | 4 | çµè |
5 | ææº | 5 | ææº |
6 | èªè¡è½¦ | ||
7 | èªè¡è½¦ |
pt-table-sync h=192.168.246.136,u=root,p=Ygzlpaul*2022,D=test,t=t_goods --sync-to-master --execute
注æï¼è¿éHostæ¯Slave
æ§è¡åï¼æ£æ¥è¡¨æ°æ®ï¼åç°å·²ç»ä¸è´ã
æ们æ¥çMasterçæ¥å¿ï¼åç°å¦ä¸ä¿¡æ¯ï¼
BEGIN
/*!*/;
# at 358
#221121 11:42:08 server id 111 end_log_pos 782 CRC32 0x241f0623 Query thread_id=12 exec_time=0 error_code=0
use `test`/*!*/;
SET TIMESTAMP=1669002128/*!*/;
DELETE FROM `test`.`t_goods` WHERE `goodid`='7' LIMIT 1 /*percona-toolkit src_db:test src_tbl:t_goods src_dsn:D=test,P=3306,h=192.168.246.135,p=...,t=t_goods,u=root dst_db:test dst_tbl:t_goods dst_dsn:D=test,h=192.168.246.136,p=...,t=t_goods,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:1268 user:root host:m_master*/
/*!*/;
# at 782
#221121 11:42:08 server id 111 end_log_pos 1225 CRC32 0xa00919e8 Query thread_id=12 exec_time=0 error_code=0
SET TIMESTAMP=1669002128/*!*/;
REPLACE INTO `test`.`t_goods`(`goodid`, `goodname`) VALUES ('1', 'å°ç®±') /*percona-toolkit src_db:test src_tbl:t_goods src_dsn:D=test,P=3306,h=192.168.246.135,p=...,t=t_goods,u=root dst_db:test dst_tbl:t_goods dst_dsn:D=test,h=192.168.246.136,p=...,t=t_goods,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:1268 user:root host:m_master*/
/*!*/;
# at 1225
#221121 11:42:08 server id 111 end_log_pos 1668 CRC32 0x4d0c2205 Query thread_id=12 exec_time=0 error_code=0
SET TIMESTAMP=1669002128/*!*/;
REPLACE INTO `test`.`t_goods`(`goodid`, `goodname`) VALUES ('2', 'çµè§') /*percona-toolkit src_db:test src_tbl:t_goods src_dsn:D=test,P=3306,h=192.168.246.135,p=...,t=t_goods,u=root dst_db:test dst_tbl:t_goods dst_dsn:D=test,h=192.168.246.136,p=...,t=t_goods,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:1268 user:root host:m_master*/
/*!*/;
# at 1668
#221121 11:42:08 server id 111 end_log_pos 2111 CRC32 0x4da887bb Query thread_id=12 exec_time=0 error_code=0
SET TIMESTAMP=1669002128/*!*/;
REPLACE INTO `test`.`t_goods`(`goodid`, `goodname`) VALUES ('3', 'ç¤ç®±') /*percona-toolkit src_db:test src_tbl:t_goods src_dsn:D=test,P=3306,h=192.168.246.135,p=...,t=t_goods,u=root dst_db:test dst_tbl:t_goods dst_dsn:D=test,h=192.168.246.136,p=...,t=t_goods,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:1268 user:root host:m_master*/
/*!*/;
# at 2111
#221121 11:42:08 server id 111 end_log_pos 2557 CRC32 0x9ed96fbf Query thread_id=12 exec_time=0 error_code=0
SET TIMESTAMP=1669002128/*!*/;
REPLACE INTO `test`.`t_goods`(`goodid`, `goodname`) VALUES ('6', 'èªè¡è½¦') /*percona-toolkit src_db:test src_tbl:t_goods src_dsn:D=test,P=3306,h=192.168.246.135,p=...,t=t_goods,u=root dst_db:test dst_tbl:t_goods dst_dsn:D=test,h=192.168.246.136,p=...,t=t_goods,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:1268 user:root host:m_master*/
/*!*/;
# at 2557
#221121 11:42:08 server id 111 end_log_pos 2588 CRC32 0xbb552163 Xid = 76
COMMIT/*!*/;
åå¦æ们æ§è¡å¦ä¸ï¼
pt-table-sync h=192.168.246.135,u=root,p=Ygzlpaul*2022,D=test,t=t_goods --sync-to-master --execute
192.168.246.135 æ¯Masterï¼æ§è¡ä¼æ¥åå¦ä¸é误信æ¯ï¼
Can't determine master of D=test,h=192.168.246.135,p=...,t=t_goods,u=root at /usr/bin/pt-table-sync line 10053.