结合Git实现Mysql差异备份,可用于生产环境
埋头苦干多年一直没写过文章,今天突发狂想,为LNMP阵营贡献一些力量。就从平时工作过程中的心得和一些技巧分享出来。今天就猿们最熟悉的Mysql开始宅鸟的开篇博客文章。欢迎猿们拍砖、转载。
注意:宅鸟的测试环境和生产环境为ubuntu
Mysql是程序猿和运维猿最关心的开发利器之一,今天就来谈谈Mysql的日常备份之宅鸟见.
常见的Mysql备份方法很多在此不在赘述。直上干货!
本shell脚本运行需要安装
git
ssh
要求读者对mysql,git,ssh,shell有一定了解
本脚本功能:把远程mysqlserver通过脚本配置的白名单和黑名单把指定数据库sql文件利用git版本控制备份到localserver指定目录下,
通过版本控制git查看数据库表数据的变化
预先配置好从localserver->mysqlserver的免密码登录(配置过程)
localserver(192.168.1.110)
db_backup_local.sh
#!/bin/bash
#created by lihuibin
#date 2013-8-30
#desc backup mysqlsql file from mysqlserver to localserver
tar_path="/root/mysql_backup"
ssh root@192.168.1.120 /root/shell/db_backup.sh
[ -d $tar_path ] && cd $tar_path; git pull || git clone root@192.168.1.20:/root/shell/mysql_backup.git
mysqlserver(192.168.1.120)
假设mysqlserver服务器上有testdb1,testdb2,exdb1,exdb2四个数据库
脚本位置:/root/shell/db_backup.sh
#!/bin/bash
#created by lihuibin
#date 2013-8-30
#desc exec mysqldump mysqlsql file from mysqlserver to git
time=`date '+%F %R'`
mysql_user="backup_user"
mysql_password="backup_passwd"
mysql_host="127.0.0.1"
mysql_port="3306"
tar_path=/root/shell/mysql_backup
backup_db_arr=("testdb1" "testdb2") #需要备份的数据库列表
#backup_db_arr=()
exclude_db_arr=("exdb1" "exdb2") #排除备份的数据库列表 当backup_db_arr为空的时候,exclude_db_arr生效,不为空时仅backup_db_arr有效
[ -d $tar_path ]
is_first_backup=$?
in_array() {
local hay needle=$1
shift
for hay; do
[[ $hay == $needle ]] && return 0
done
return 1
}
backup_length=${#backup_db_arr[@]}
#echo $backup_length
exclude_length=${#exclude_db_arr[@]}
#echo $exclude_length;
#in_array "dopool_blog" ${backup_db_arr[@]} && echo hit || echo miss
for dbname in `mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "show databases" |sed '1,2d'`
do
if [ $backup_length -gt 0 ]; then
in_array $dbname ${backup_db_arr[@]} || continue
elif [ $backup_length -eq 0 -a $exclude_length -gt 0 ]; then
in_array $dbname ${exclude_db_arr[@]} && continue
fi
for tablename in `mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "show tables from $dbname" |sed '1d'`
do
mkdir -p $tar_path/$dbname/
/usr/bin/mysqldump --lock-tables=TRUE --extended-insert=FALSE --complete-insert=TRUE -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname $tablename > $tar_path/$dbname/$tablename.sql
done
done
init_git(){
tar_path=`dirname $1`
dir_name=`basename $1`
cd $1
git init
git add .
git commit -a -m "init $time"
cd $tar_path
git clone --bare $dir_name/
rm -rf $dir_name
git clone $dir_name.git
}
[ $is_first_backup -eq 1 ] && init_git $tar_path || {
cd $tar_path;
git add .;
git commit -a -m " back up $time";
git push;
}
脚本执行后,就可以结合git的tig、diff命令查看每次备份的中数据库表中版本变化
干活吐槽结束 有不足之处,欢迎拍砖!!!
结合Git实现Mysql差异备份,可用于生产环境的更多相关文章
- MySQL 系列(四)主从复制、备份恢复方案生产环境实战
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- mysql_secure_installation 安全安装(用于生产环境设置)
编译安装完mysql5.6,如果用于生产环境,最好执行mysql_secure_installation来做一些常规化安全设置. 需要提前将~mysql/bin加入环境变量 /apps/mysql// ...
- 基于redis的分布式锁(不适合用于生产环境)
基于redis的分布式锁 1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分 ...
- Linux MySQL差异备份技巧
MSSQL差异备份使用技巧 15 Apr 2013 所谓的差异备份,就是只备份最近一次备份之后到此次备份之前所增加的那一部分数据.打个比方我第N次备份后数据库存放的内容是ABCD,然后我第N+1次 备 ...
- MySQL 系列(四) 主从复制、读写分离、模拟宕机、备份恢复方案生产环境实战
本章内容: 主从复制 简介原理 备份主库及恢复从库,配置从库生效 读写分离 如果主宕机了,怎么办? 双主的情况 MySQL 备份及恢复方案 备份单个及多个数据库 mysqldump 的常用参数 如何增 ...
- 8 个用于生产环境的 SQL 查询优化调整
在没有数据仓库或单独的分析数据库的组织中,报告的唯一来源和最新的数据可能是在现场生产数据库中. 在查询生产数据库时,优化是关键.一个低效的查询可能会对生产数据库产生大量的资源消耗,如果查询有错误会引发 ...
- Ocelot中文文档-Raft(实验功能不能用于生产环境)
Ocelot最近整合了Rafty,这是我在去年一直研究的Raft的一个实现. 这个项目实验性非常强,所以在我认为它没问题之前,请不要在生产环境中使用Ocelot的这个功能. Raft是一种分布式一致性 ...
- mysql定时备份任务
简介 在生产环境上,为了避免数据的丢失,通常情况下都会定时的对数据库进行备份.而Linux的crontab指令则可以帮助我们实现对数据库定时进行备份.首先我们来简单了解crontab指令,如果你会了请 ...
- MySQL的备份和恢复-mysqldump
MySQL的备份和恢复-mysqldump 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么需要备份 1>.做灾难恢复 天有不测风云嘛,如果你的服务器被黑客攻击了(比 ...
随机推荐
- 服务器网页GZIP压缩怎么配置
服务器网页GZIP压缩怎么配置 服务器网页GZIP压缩怎么配置,GZIP压缩对网页压缩来说最好不过了,下面是IIS下Gzip配置详细操作步骤: 简单来说,IIS6集成了Gzip,只不过 ...
- MYSQL C API : mysql_init()
MYSQL * mysql_init(MYSQL *mysql); // 初始化一个MYSQL 连接的实例对象 void mysql_close(MYSQL *sock); // 释放一个MYSQL ...
- springmvc数据处理模型
1.ModelAndView 实现: @RequestMapping("/testModelAndView") public ModelAndView testModelAndVi ...
- JAVA中日期处理
一.日期和long类型数据的相互转换 public class Hello { public static void main(String[] args) throws Exception { // ...
- 关于如何查看mysql版本及其端口号
关于如何查看MySQL版本: 方法一: 进入mysql cmd, status; 1 status; 将显示当前mysql的version的各种信息. 方法二: 还是在mysql的cmd下,输入: s ...
- Android——主流分辨率
VGA:480*640 QVGA:240*320 HVGA:320*480 WVGA:480*800 FWVGA:480*854 IntelHaxm.exe 模拟器加速器
- HDFS副本机制&负载均衡&机架感知&访问方式&健壮性&删除恢复机制&HDFS缺点
副本机制 1.副本摆放策略 第一副本:放置在上传文件的DataNode上:如果是集群外提交,则随机挑选一台磁盘不太慢.CPU不太忙的节点上:第二副本:放置在于第一个副本不同的机架的节点上:第三副本:与 ...
- JavaScript对象的创建之工厂方法
通过工厂的方式来创建Person对象,在createPerson中创建一个对象,然后为这个对象设置相应的属性和方法,之后返回这个对象. function createPerson(name, age) ...
- 1307: City Tour
1307: City Tour Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description Alic ...
- C# ToolStripProgressBar
ToolStripProgressBar 将所有 ToolStrip控件的移动和渲染功能和其典型的进程跟踪功能结合在一起.ToolStripProgressBar通常放在StatusStrip中,偶尔 ...