数据库结构版本控制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 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  $?
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
6月前
|
SQL 缓存 分布式数据库
【赵渝强老师】达梦数据库的线程结构
达梦数据库采用单进程、多线程结构,利用对称服务器架构实现高效资源利用与可扩展性。其核心线程类型包括监听线程(管理客户端连接)、I/O线程(处理数据页读写)、工作线程(执行数据操作)、调度线程(定时任务管理)和日志刷新线程(确保REDO日志刷盘)。通过合理分工与同步机制,达梦数据库实现了高性能与稳定性。视频讲解进一步详细介绍了各线程的功能与协作方式。
156 1
【赵渝强老师】达梦数据库的线程结构
|
6月前
|
存储 SQL NoSQL
【赵渝强老师】达梦数据库的逻辑存储结构
本文介绍了达梦数据库的存储结构,包括逻辑和物理存储两部分。逻辑存储结构由数据库(Database)、表空间(Tablespaces)、段(Segments)、簇(Cluster)和页(Page)组成。数据库是最大逻辑单元,包含所有表、索引等;表空间由数据文件组成,用于存储对象;段由簇构成,簇包含连续的数据页;页是最小存储单元。文中还提供了查询表空间、段和页大小的SQL语句,并附有视频讲解和示意图。
249 7
|
7月前
|
数据管理 关系型数据库 MySQL
数据管理服务DMS支持MySQL数据库的无锁结构变更
本文介绍了使用Sysbench准备2000万数据并进行全表字段更新的操作。通过DMS的无锁变更功能,可在不锁定表的情况下完成结构修改,避免了传统方法中可能产生的锁等待问题。具体步骤包括:准备数据、提交审批、执行变更及检查表结构,确保变更过程高效且不影响业务运行。
369 2
|
6月前
|
SQL 存储 缓存
【赵渝强老师】达梦数据库的内存结构
本文介绍了达梦数据库管理系统的内存结构,包括内存池、缓冲区、排序区和哈希区。内存池分为共享内存池和运行时内存池,能够提高内存申请与释放效率,并便于监控内存使用情况。缓冲区涵盖数据缓冲区、日志缓冲区、字典缓冲区和SQL缓冲区,用于优化数据读写和查询性能。排序区和哈希区分别提供排序和哈希连接所需的内存空间,通过合理配置参数可提升系统效率。文内附有具体配置示例及视频讲解,帮助用户深入理解达梦数据库的内存管理机制。
163 0
|
6月前
|
存储 SQL 安全
【赵渝强老师】达梦数据库的物理存储结构
本文介绍了达梦数据库的存储结构及各类物理文件的作用。达梦数据库通过逻辑和物理存储结构管理数据,包含配置文件(如dm.ini、sqllog.ini)、控制文件(dm.ctl)、数据文件(*.dbf)、重做日志文件(*.log)、归档日志文件、备份文件(*.bak)等。配置文件用于功能设置,控制文件记录数据库初始信息,数据文件存储实际数据,重做日志用于故障恢复,归档日志增强数据安全性,备份文件保障数据完整性,跟踪与事件日志辅助问题分析。这些文件共同确保数据库高效、稳定运行。
266 0
|
数据库
生成数据库结构文档
生成数据库结构文档
|
11月前
|
安全 数据库 数据安全/隐私保护
数据库 变更和版本控制管理工具 --Bytebase 安装部署
数据库 变更和版本控制管理工具 --Bytebase 安装部署
736 0
|
存储 测试技术 数据库
Entity Framework Core Migrations 超厉害!轻松实现数据库版本控制,让你的开发更顺畅!
【8月更文挑战第31天】数据库的演变是软件开发中不可或缺的部分。随着应用发展,数据库需不断调整以适应新功能。Entity Framework Core Migrations 作为数据库的守护者,提供强大的版本控制手段,确保不同环境下的数据库一致性。通过创建和管理迁移脚本,开发者可以有序地管理数据库变更,避免混乱和数据丢失。安装并配置好 EF Core 后,可以通过命令行工具轻松创建、应用及回滚迁移,如 `dotnet ef migrations add InitialMigration` 和 `dotnet ef database update`。
224 0
|
Oracle 关系型数据库 数据库连接
|
数据库 Java 数据库连接
玩转Play Framework的秘密武器:Ebean ORM带你解锁高效数据库操作新姿势,让你的代码从此飞起来!
【8月更文挑战第31天】Play Framework 以其简洁的 API 和高效开发体验著称,Ebean ORM 则是其推荐的对象关系映射(ORM)工具之一。Ebean 可将 Java 对象轻松映射到数据库表,简化数据库交互。本文将指导你在 Play Framework 中使用 Ebean ORM 进行数据库操作,涵盖项目创建、依赖引入、数据库配置、模型定义及 CRUD 操作,并通过示例代码展示实现过程。通过这些步骤,你将学会如何利用 Ebean 的丰富功能,如事务管理、查询构建等,提升 Web 应用的数据库交互能力。
238 0