数据库设计
前期数据库设计直接关系到合服的工作量。目标是尽量减少重复。以下设计能够方便合服:
- 每个表设置一个bigint类型的uid 作为主键自增,与任何游戏数据无关,自增数字估计一个值比如说500000
- 当1无法满足游戏中的需求时,uid的设计包括区服id,比如说 ((1<<56) | (rand64bits() >>>8)) 1表示区服,rand64bits表示随机一个64位整数
- 尽量减少关键数据冗余,比如说角色名字
小结
第1.2点避免了,不同服中各个表的主键重复,避免了修改uid,修改uid工作量比较大,因为涉及到各个表之间uid的引用,第3点由于相同名字需要避免,所以也避免了更多的操作
数据导出导入
mysqldump
几个关键选项
--verbose 显示导出的详细信息,可以查看导出过程有没有问题
--default-character-set=charset_name 设置编码,一般为utf8
--complete-insert 插入语句中包括的列名字,这个是因为服务器在更新过程中会有sql语句更新,导致各个服务器的表结构不一致
仅仅导出数据,添加--no-create-info选项
mysqldump -hhost -uusername -ppasswd -Pport database --no-create-info --verbose --default-character-set=utf8 --complete-insert
>output
仅仅导出表结构,使用--no-data
mysqldump -hhost -uusername -ppasswd -Pport database --no-data >output
mysql
mysql -uusename -ppasswd -hhost -Pport database --default-character-set=utf8 <input
操作
- 检查每个数据库表是否一致,做到表个数名字相同,个表的字段相同就够了
- 备份数据,这个太重要了,不说了
- 检查相应的重复数据,查看之
- 更新重复数据
- 重复2,确保没有数据是重复的,如果有重复视情况选择重新开始,或者操作3
- 导出数据
- 导入数据
操作的要点就是小心谨慎,避免出现不确定的操作,也可以用一个脚本来实现所有的操作,但是为了避免一些意外确定每步的结果