数据库结构版本控制

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

Help

./backup.mysql.struct.sh
Usage: ./backup.mysql.struct.sh {init|start|stop|status|restart}

Create backup user for your database.

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

Database connect infomation

BACKUP_HOST="localhost"
BACKUP_USER="netkiller"
BACKUP_PASS="chen"
BACKUP_DBNAME="test aabbcc"
BACKUP_DIR=~/backup

Initialize the working directory

$ ./backup.mysql.struct.sh init
Initialized empty Git repository in /home/neo/backup/.git/

Start

$ ./backup.mysql.struct.sh start

Stop

$ ./backup.mysql.struct.sh stop

Status

$ ./backup.mysql.struct.sh status
19837 pts/0    S      0:00 /bin/bash ./backup.mysql.struct.sh start

Diff

$ cd ~/backup
$ git diff HEAD^ test.sql
diff --git a/localhost/test.sql b/localhost/test.sql
index a749b5a..402d6d1 100644
--- a/localhost/test.sql
+++ b/localhost/test.sql
@@ -53,6 +53,7 @@ DROP TABLE IF EXISTS `test`;
 /*!40101 SET character_set_client = utf8 */;
 CREATE TABLE `test` (
   `id` int(11) DEFAULT NULL,
+  `key` char(50) DEFAULT NULL,
   `val` char(10) DEFAULT NULL
 ) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1;
 /*!40101 SET character_set_client = @saved_cs_client */;

 

#!/bin/bash
###################################
# $Id$
# Author: netkiller@msn.com
# Home: http://netkiller.github.com
###################################
# SELECT `user`, `host`, `password` FROM `mysql`.`user`;
# 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
####################################
NAME =backup.mysql.struct
BASEDIR = '/www'
PROG = $BASEDIR/bin/ $(basename  $0 )
LOGFILE =/var/tmp/ $NAME.log
PIDFILE =/var/tmp/ $NAME.pid
MYSQLDUMP = "/usr/bin/mysqldump"
MYSQLDUMP_OPTS = "-h $BACKUP_HOST -u$BACKUP_USER -p$BACKUP_PASS --skip-comments -d"
####################################
umask 0077
##############################################
#rotate=60
LOOP =30
##############################################
function backup (){
test ! -d  "$BACKUP_DIR"  &&  echo  "Error: $BACKUP_DIR isn't a directory."  &&  exit 0
cd  $BACKUP_DIR
for dbname in  $BACKUP_DBNAME
do
test ! -d  "$BACKUP_DIR/$BACKUP_HOST"  && mkdir -p  "$BACKUP_DIR/$BACKUP_HOST"
$MYSQLDUMP  $MYSQLDUMP_OPTS  $dbname >  $BACKUP_DIR/ $BACKUP_HOST/ $dbname.sql
done
TIMEPOINT = $(date -u +%Y-%m-%d.%H:%M:%S )
git add .
git commit --quiet -m  "$TIMEPOINT" > /dev/null
}
function start (){
if  [ -f  "$PIDFILE"  ] ;  then
echo  $PIDFILE
exit 2
fi
test ! -w  $BACKUP_DIR  &&  echo  "Error: $BACKUP_DIR is un-writeable."  &&  exit 0
 
for  ((  ;  ;  ))
do
backup
sleep  $LOOP
done  &
echo  $! >  $PIDFILE
}
function stop (){
    [ -f  $PIDFILE  ]  &&  kill  `cat  $PIDFILE `  && rm -rf  $PIDFILE
}
function init (){
 
if  [ ! -d  $BACKUP_DIR  ] ;  then
mkdir -p  "$BACKUP_DIR"
cd  $BACKUP_DIR
git init
     fi
backup
}
case  "$1" in
  start )
   start
;;
  stop )
   stop
;;
  status )
   ps ax  | grep  $(basename  $0 )  | grep -v grep  | grep -v status
;;
  restart )
   stop
start
;;
init )
init
;;
* )
echo  $"Usage: $0 {init|start|stop|status|restart}"
exit 127
esac
 
exit  $?
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8月前
|
数据库
Google Earth Engine(GEE)——全球树木异体测量和树冠结构(Tallo)数据库
Google Earth Engine(GEE)——全球树木异体测量和树冠结构(Tallo)数据库
87 1
|
3月前
|
安全 数据库 数据安全/隐私保护
数据库 变更和版本控制管理工具 --Bytebase 安装部署
数据库 变更和版本控制管理工具 --Bytebase 安装部署
131 0
|
8月前
|
数据库
生成数据库结构文档
生成数据库结构文档
|
8月前
|
关系型数据库 Go 数据库
【Go语言专栏】Go语言中的数据库迁移与版本控制
【4月更文挑战第30天】本文介绍了Go语言中的数据库迁移和版本控制。针对数据库迁移,文章提到了使用Flyway和Liquibase两个工具。通过示例展示了如何在Go中集成这两个工具进行数据库结构的修改,以适应业务变化。而对于版本控制,文章以Git为例,说明了如何利用Git进行源代码和配置文件的管理,确保代码一致性与可追溯性。
261 0
|
5月前
|
数据库 Java 数据库连接
玩转Play Framework的秘密武器:Ebean ORM带你解锁高效数据库操作新姿势,让你的代码从此飞起来!
【8月更文挑战第31天】Play Framework 以其简洁的 API 和高效开发体验著称,Ebean ORM 则是其推荐的对象关系映射(ORM)工具之一。Ebean 可将 Java 对象轻松映射到数据库表,简化数据库交互。本文将指导你在 Play Framework 中使用 Ebean ORM 进行数据库操作,涵盖项目创建、依赖引入、数据库配置、模型定义及 CRUD 操作,并通过示例代码展示实现过程。通过这些步骤,你将学会如何利用 Ebean 的丰富功能,如事务管理、查询构建等,提升 Web 应用的数据库交互能力。
84 0
|
5月前
|
存储 测试技术 数据库
Entity Framework Core Migrations 超厉害!轻松实现数据库版本控制,让你的开发更顺畅!
【8月更文挑战第31天】数据库的演变是软件开发中不可或缺的部分。随着应用发展,数据库需不断调整以适应新功能。Entity Framework Core Migrations 作为数据库的守护者,提供强大的版本控制手段,确保不同环境下的数据库一致性。通过创建和管理迁移脚本,开发者可以有序地管理数据库变更,避免混乱和数据丢失。安装并配置好 EF Core 后,可以通过命令行工具轻松创建、应用及回滚迁移,如 `dotnet ef migrations add InitialMigration` 和 `dotnet ef database update`。
70 0
|
6月前
|
Oracle 关系型数据库 数据库连接
|
7月前
|
存储 关系型数据库 MySQL
|
7月前
|
SQL 运维 数据管理
数据管理DMS产品使用合集之如何修改在结构设计中的基准数据库
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
144 4
|
7月前
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
145 7