数据库结构版本控制

数据库结构版本控制

http://netkiller.github.io/journal/mysql.struct.html

Mr. Neo Chen (陈景峰), netkiller, BG7NYT

中国广东省深圳市龙华新区民治街道溪山美地
518131
+86 13113668890
+86 755 29812080
<netkiller@msn.com>

版权 2014 http://netkiller.github.io

版权声明

转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。

文档出处:
http://netkiller.github.io
http://netkiller.sourceforge.net

 

2014-12-17

摘要

我的系列文档

Netkiller Architect 手札 Netkiller Developer 手札 Netkiller PHP 手札 Netkiller Python 手札 Netkiller Testing 手札
Netkiller Cryptography 手札 Netkiller Linux 手札 Netkiller Debian 手札 Netkiller CentOS 手札 Netkiller FreeBSD 手札
Netkiller Shell 手札 Netkiller Security 手札 Netkiller Web 手札 Netkiller Monitoring 手札 Netkiller Storage 手札
Netkiller Mail 手札 Netkiller Docbook 手札 Netkiller Version 手札 Netkiller Database 手札 Netkiller PostgreSQL 手札
Netkiller MySQL 手札 Netkiller NoSQL 手札 Netkiller LDAP 手札 Netkiller Network 手札 Netkiller Cisco IOS 手札
Netkiller H3C 手札 Netkiller Multimedia 手札 Netkiller Perl 手札 Netkiller Amateur Radio 手札 Netkiller DevOps 手札

目录

1. 什么是数据库结构版本控制

首先说说什么是数据库结构,什么事版本控制

数据库结构是指数据库表结构,数据库定义语言导出的DDL语句。主要由CREATE TABLE, DROP TABLE等等构成。

再来说说什么事版本控制,如果你从事开发工作应该会很容易理解,版本控制就是记录每一次变化,可以随时查看历史记录,并可回撤到指定版本。

2. 为什么要做数据库结构本版控制

软件开发过程中需要常常对数据库结构作调整,这是无法避免的,甚至很多想起启动后,需求还不明确,开发人员只能按照所理解需求创建表。需求往往会发生变化,一旦变化,代码需要修改,表结构也避免不了。 我们常常刚改好数据库结构,需求部门有发来通知,不用修改了,维持原有设计。甚至是过了几周再次回撤。

所以我们要将数据库结构的变化进行版本控制,通常的做法是DBA人工管理,但我觉完全可以自动化的工作,没有必要浪费人力资源,且自动化不会犯错更稳定,仅仅需要人工定期查看工作状态即可。

3. 何时做数据库结构本版控制

任何时候都可以部署下面的脚本,对现有系统无任何影响。

4. 在哪里做数据库结构本版控制

可以在版本控制服务器上,建议Git仓库push到远程。

5. 谁来负责数据库结构本版控制

DBA与配置管理员都可以做,通常DBA不接触版本库这块,建议创建一个backup用户给配置管理员。

6. 怎样做数据库结构本版控制

6.1. 安装脚本

首先下载脚本 https://github.com/oscm/devops/blob/master/shell/backup.MySQL.struct.sh

wget https://raw.githubusercontent.com/oscm/devops/master/shell/backup.mysql.struct.sh
mv backup.mysql.struct.sh /usr/local/bin
chmod +x /usr/local/bin/backup.mysql.struct
			

创建备份用户

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'SaJePoM6BAPOmOFOd7Xo3e1A52vEPE';
GRANT SELECT, LOCK TABLES  ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'backup'@'localhost';
			

配置脚本

BACKUP_HOST="localhost"			数据库主机
BACKUP_USER="backup"			备份用户
BACKUP_PASS="chen"				备份密码
BACKUP_DBNAME="test aabbcc"		版本控制那些数据库,多个数据库使用空格分隔
BACKUP_DIR=~/backup				数据库结构放在那里
			

初始化仓库

# /usr/local/bin/backup.mysql.struct init
Initialized empty Git repository in /www/database/struct/.git/
			

6.2. 启动脚本,停止脚本

# /usr/local/bin/backup.mysql.struct
Usage: /usr/local/bin/backup.mysql.struct {init|start|stop|status|restart}
			

开始脚本

# /usr/local/bin/backup.mysql.struct start
			

查看状态

# /usr/local/bin/backup.mysql.struct status
 9644 pts/1    S      0:00 /bin/bash /usr/local/bin/backup.mysql.struct start
			

停止脚本

# /usr/local/bin/backup.mysql.struct status
			

6.3. 查看历史版本

通过 git log 命令查看历史版本

# cd /www/database/struct/

# git status
# On branch master
nothing to commit (working directory clean)

# git log
commit d38fc624c21cad0e2f55f0228bff0c1be981827c
Author: root <root@slave.example.com>
Date:   Wed Dec 17 12:33:55 2014 +0800

    2014-12-17.04:33:55			
时间: 2024-07-29 01:22:25

数据库结构版本控制的相关文章

调整SQLServer2000运行中数据库结构

server|sqlserver|数据|数据库|数据库结构  开发过程中的数据库结构结构,不可避免的会需要反复的修改.最麻烦的情况莫过于开发者数据库结构已经修改,而实际应用中数据库又有大量数据,如何在不影响数据库中数据情况下,更新数据结构呢?当然,我们可以手工对应用数据库表结构各个添加.更正.删除的字段一一调整,这对一两个字段来说,是比较简单的,如果改动比较大的时候,这个过程将是非常繁琐的.本文意在介绍使用SQLServer2000 T-SQL语句进行数据库结构调整,希望能够给各位带来些方便.下

[ER/Studio]进行不同版本数据库结构的合并

数据|数据库|数据库结构 难度系数:0本文目的:介绍ER/Studio数据库建模软件,感觉比Rose及Visio数据库建模好用没有ERWin的乱码问题,PowerDesigner一直无缘用到,呵呵,听说过没见过 :) 公司开发的一个系统,因为是提供给客户代码的,所以客户进行了二次开发.同时为了产品的扩展性,我们公司本身也对其进行了进一步的开发.后来根据需要,客户要求我们在他们已有程序的基础上结合我们现在的程序对其系统进行升级. 两边的代码修改幅度都不是很大,使用VSS可以进行比较确认差异.但是客

Access及SQL Server操作数据库结构的常用SQL语句

access|server|sql|数据|数据库|数据库结构|语句 下面是Sql Server 和 Access 操作数据库结构的常用Sql,希望对你有所帮助.内容由海娃整理,不正确与不完整之处还请提出,谢谢. 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default '默认值' null ,[字段2] ntext null ,[字段3] datetime,[字段4] mon

ASP常用的操作数据库结构的SQL语句

sql|数据|数据库|数据库结构|语句 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default '默认值' null ,[字段2] ntext null ,[字段3] datetime,[字段4] money null ,[字段5] int default 0,[字段6] Decimal (12,4) default 0,[字段7] image null ,) 删除表:Dr

如何复制数据库结构

数据|数据库|数据库结构 --用脚本就可以了         sql200企业管理器         --右键要复制的数据库         --所有任务         --生成SQL脚本         --<常规>里选择"生成全部对象脚本"","在脚本文件中包含说明性标题"选上         --<设置格式>里,将"包含扩展属性",选上         --<选项>中,将"表脚本选项

MySQL数据库结构和数据的导出和导入

mysql|数据|数据库|数据库结构 作者:任我行导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] database [tables] 如果你不给定任何表,整个数据库将被导出. 通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表. 注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是

Oracle数据库结构之物理存储结构

oracle|数据|数据库|数据库结构 1.物理存储结构1.1数据文件数据文件用于存放所有的数据库数据.将数据放在多个数据文件中,再将数据文件分放在不同的硬盘中,可以提高存取速度.1.2记录文件记录文件也称为重做日志(事务)文件.重做日志在日志文件中以循环的方式工作.有归档日志模式和非归档日志模式.1.3参数文件每一个Oracle数据库和实例都有它自己唯一的init.ora文件.Init.ora文件中的值决定着数据库和实例的特性.1.4控制文件每个数据库中至少要有一个控制文件,但是建议用户使用两

Sql Server 和 Access 操作数据库结构Sql语句

access|server|数据|数据库|数据库结构|语句 下面是Sql Server 和 Access 操作数据库结构的常用Sql,希望对你有所帮助.内容由海娃整理,不正确与不完整之处还请提出,谢谢. 新建表:create table [表名](  [自动编号字段] int IDENTITY (1,1)  PRIMARY KEY ,  [字段1] nVarChar(50) default '默认值' null ,  [字段2] ntext null ,  [字段3] datetime,  [字

无限级目录数据库结构与方法一例

数据|数据库|数据库结构 Folder 表:Folderid:目录ID,自动编号FolderParentID:上级目录ID,IntFolderName:目录名称,VarcharFolderDescription:目录说明,Varchar File 表:FileID:文档ID,自动编号FileFolderID:所属目录ID,IntFileName:文档名称,VarcharFileDescription:文档内容,Varchar或备注(ntext) function GetAllChildID(id