现在完全致力于MySQL。
项目要求:将开发环境中的数据库修改同步到在线环境。
开发人员提供的解决方案是使用像Python这样的South框架来自动将开发环境的更改同步到生产环境。这对于DBA来说是无法忍受的(除非它是创建具有类似结果的数据库的语句)。数据库更改是在生产环境中实现的,必须事先进行评估。对业务的影响已减至最小,这旨在重新设计索引或使用在线修改工具等。本文暂不讨论,表同步解决方案如下。
以前的方法是使用导航工具一个一个地比较数据库,或者编写一个Mysqldump脚本仅转储表结构,然后使用diff一个一个地比较。对于少量数据库实例,这是可以接受的。简而言之,我个人认为它不符合运维自动化的概念。
最近尝试了一种新工具-Schema Sync,该工具基于Python语言并符合Apache许可证2.0版。开源协议。
说明信息:
1.该工具不会修改数据库,而是会收集不同数据库之间的差异并生成SQL脚本。
2.生成的SQL语句将自动在after,first和其他关键字后添加
3.对于重命名的表或字段,该工具生成首先被删除的SQL语句。
4.尚不支持MySQL的分区功能。
下载并安装:
安装条件:
1,Python 2.4、2.5或2.6
2,MySQL,版本5.0或更高版本
3,MySQLdb,版本1.2.1p2或更高版本
下载:SchemaSync-0.9.2
安装:
tar xvzf SchemaSync-0.9.2.tar.gz
cd SchemaSync-0.9.2
sudo python setup.py安装
如果要获取最新的开发版本,或在生产环境中不允许root登录,请参阅以下链接:http://schemasync.org/install.htm)
基本语法:
schemasync [选项]
源或目标的格式为:
mysql://用户:[受电子邮件保护]:端口/数据库
最终生成的文件的格式为:[_]。 YYYYMMDD。 (补丁|恢复)[_]。 SQL,有一个日志文件
补丁文件(应用于目标主机),还原文件(可以回滚,这种方法很棒,我个人同意,但是作为DBA,最好在操作之前对在线数据库进行备份)
特定选项可以通过\查看。 schemasync \ \-帮助
常用选项:
-output-directory = OUTPUT_DIRECTORY存储日志文件和生成的SQL文件的目录
–tag = TAG在文件上加上易于识别的注释
-r,–revision如果生成的结果文件中存在相同的名称,则将对其附加标记。
-a,–sync-auto-inc此选项应注意,他将同步自增值
-c \-sync-comments同步新添加字段的内容。 说明(测试后此选项无效)
测试:
192.168.1.172上的数据库同步库中有一个表:t1(id int null)
数据库同步库中的一个表位于192.168.1.175:t1(id int 不为null)
现在将172中的同步库同步到175:
schemasync \ -r–output-dir = \ quot;/root/sync/” mysql://根目录:[受电子邮件保护]:3306/sync mysql://根目录:[受电子邮件保护]:3307/sync
打印的消息:
[INFO 2012-07-13 18:21:49,784]为mysql创建的迁移脚本://192.168.1.175/sync
修补程序脚本:/root/sync/sync.20120713.patch.sql
还原脚本:/root/sync/sync.20120713.revert.sql
我们可以打开文件进行查看:
使用`sync`;
ALTER TABLE`t1` MODIFY COLUMN` id` int(11)NULL首先,引擎= InnoDB ROW_FORMAT =紧凑;
该文件已将id列的non-null属性设置为null。将此文件应用到175。
(PS:这是一个简单的测试。在构建环境中,您可以使用Shell循环同时同步多个库。对于DBA,最好在评估更改之前先检查SQL,评估对联机的影响,并考虑使用在线DDL和其他工具)
官方地址:http://schemasync.org/