这是一个常见的用例在两个表在MySQL服务器同步数据。这篇文章描述了一个具体的案例:如何在两个不同的表之间同步数据在同一MySQL服务器。这可能是有用的,例如,如果你测试DML查询性能,不想影响生产数据。在一些实验中,表的同步,您可能需要更新测试继续致力于改善您的查询。还有其他用例时,您可能需要同步的内容在同一台服务器上的两个不同的表,和这篇文章将告诉你如何做。
表内容同步
的行业标准工具表内容同步pt-table-sync——设计不同的MySQL服务器之间同步数据,不支持批量同步两个不同的数据库在同一台服务器上。如果你试一试,你将收到一个错误信息:
|
1
2
|
美元
pt- - - - - -表- - - - - -同步
D=db1
D=db2
- - -执行
- - -没有- - - - - -检查- - - - - -奴隶
你
指定的
一个
数据库
但
不
一个
表
在
D=db1
。
是
你
尝试
来
同步
只有
表
在
的
“db1”
数据库
吗?
如果
所以
,
使用
“——db1数据库”
而不是
。
|
然而,它是可能的同步两个个体表在同一台服务器上通过提供表名作为DSN参数:
|
1
2
3
4
|
美元
pt- - - - - -表- - - - - -同步
D=db1
,
t=喷火
D=db2
,
t=喷火
- - -执行
- - -详细的
#同步D = db2, t = foo
#删除替换插入更新算法开始退出DATABASE.TABLE结束
# 0 0 5 0 GroupBy 03:24:26 03:24:26 2 db1.foo
|
你甚至可能同步同一数据库中两个表:
|
1
2
3
4
|
美元
pt- - - - - -表- - - - - -同步
D=db2
,
t=喷火
D=db2
,
t=酒吧
- - -执行
- - -详细的
#同步D = db2, t =酒吧
#删除替换插入更新算法开始退出DATABASE.TABLE结束
# 0 0 5 0 GroupBy 03:25:34 03:25:34 2 db2.foo
|
我们可以使用这个特性来执行批量同步。
首先,我们需要准备一份表我们要同步:
|
1
2
3
4
5
6
|
美元
mysql
- - -跳过- - - - - -列- - - - - -的名字
- - - - - -se
在db2中“显示表”
>
db1- - - - - -db2
.sync
美元
猫
db1- - - - - -db2
.sync
酒吧
巴兹
喷火
|
然后我们可以调用该工具如下:
|
1
2
3
4
5
6
7
8
9
10
|
美元
为
我
在
”
猫
db1- - - - - -db2
.sync
”
;
做
pt- - - - - -表- - - - - -同步
D=db1
,
t=美元
我
D=db2
,
t=美元
我
- - -执行
- - -详细的
;
完成
#同步D = db2, t =酒吧
#删除替换插入更新算法开始退出DATABASE.TABLE结束
# 0 0 0 0 GroupBy 03:31:52 db1.bar 03:31:52 0
#同步D = db2, t =巴兹
#删除替换插入更新算法开始退出DATABASE.TABLE结束
# 0 0 5 0 GroupBy 03:31:52 03:31:52 2 db1.baz
#同步D = db2, t = foo
#删除替换插入更新算法开始退出DATABASE.TABLE结束
# 0 0 0 0 GroupBy 03:31:52 db1.foo 03:31:52 0
|
如果你有多个数据库对同步,你可以同意文件名和解析在遍历表名。例如,如果您使用的模式SOURCE_DATABASE- - - - - -TARGET_DATABASE.sync您可以使用以下循环:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
22
23
|
美元
为
中环
在
”
ls
*.sync
”
>
做
星展银行=”
basename
- - - - - -年代
.sync
美元
中环
”
>
源=美元
{
星展银行
%- *}
>
目标=美元
{
星展银行
# # * -}
>
为
我
在
”
猫
美元
中环
”
>
做
pt- - - - - -表- - - - - -同步
D=美元
源
,
t=美元
我
D=美元
目标
,
t=美元
我
- - -执行
- - -详细的
>
完成
>
完成
# = cookbook_copy同步D, t =四肢
#删除替换插入更新算法开始退出DATABASE.TABLE结束
# 0 0 4 0 GroupBy 04:07:07 04:07:07 2 cookbook.limbs
# = cookbook_copy同步D, t = limbs_myisam
#删除替换插入更新算法开始退出DATABASE.TABLE结束
# 5 0 5 0 GroupBy 04:07:08 04:07:08 2 cookbook.limbs_myisam
#同步D = db2, t =酒吧
#删除替换插入更新算法开始退出DATABASE.TABLE结束
# 0 0 5 0 GroupBy 04:07:08 04:07:08 2 db1.bar
#同步D = db2, t =巴兹
#删除替换插入更新算法开始退出DATABASE.TABLE结束
# 5 0 5 0 GroupBy 04:07:08 04:07:08 2 db1.baz
#同步D = db2, t = foo
#删除替换插入更新算法开始退出DATABASE.TABLE结束
# 5 0 0 0 GroupBy 04:07:08 04:07:08 2 db1.foo
|
请注意,pt- - - - - -表- - - - - -同步同步只存在于两个数据库的表。它没有目标数据库中创建表,不存在,不删除那些不存在于源数据库。如果您的模式可能不同步,您首先需要同步。
我曾经选择- - -详细的在我所有的例子中,你可以看到该工具在做什么。如果您省略这个选项工具仍然能够同步表在同一台服务器上。
完成2021年Percona开源数据雷竞技下载官网管理软件的调查





