log*_*han 3 mysql mysql-management
我将我的应用程序部署在两个不同的区域,例如US-WEST和EU,两个应用程序都有自己的DB.现在我想把欧盟地区数据库移到US-WEST.
这将导致主键冲突,因为db都具有相同的主要自动增量id的表,任何人都可以给我建议来解决这个问题.
场景:来自DB1的用户表(例如来自US-WEST)具有以下条目
ID Name
1 Rob
2 San
3 Tulip
Run Code Online (Sandbox Code Playgroud)
来自DB2的用户表(例如来自EU)具有以下条目
ID Name
1 John
2 Michael
3 Natasha
Run Code Online (Sandbox Code Playgroud)
对于两个原始数据库中的每一个(说db0
和db1
):
备份数据库.
锁定数据库仅供此脚本使用.
对于数据库中没有定义外键的所有表,ON UPDATE CASCADE
使用此选项更改所有这些外键约束.
对于每个具有auto_increment
(或简单整数)主键的表,运行此(级联更新将完成其余的):
.
UPDATE TableX
SET Pk = 2 * Pk - 0 --- for db0
ORDER BY Pk DESC
UPDATE TableX
SET Pk = 2 * Pk - 1 --- for db1
ORDER BY Pk DESC
Run Code Online (Sandbox Code Playgroud)
从每个数据库导出表.
现在通过简单地合并相应的表来合并两个数据库.来自的所有数据db0
都将具有偶数ID,并且所有数据都db1
将具有奇数ID.没有碰撞.
对于没有自动递增主键的表或可能具有公共行的表,合并应该是不同的,当然.
开锁.
您可以阅读有关auto_increment_increment
您可以更改的相关系统变量,因此从这一点开始,这两个数据库会生成不同的自动递增ID(一个奇数ID,另一个奇数).
归档时间: |
|
查看次数: |
3462 次 |
最近记录: |