埋头苦干多年一直没写过文章,今天突发狂想,为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差异备份,可用于生产环境的更多相关文章

  1. MySQL 系列(四)主从复制、备份恢复方案生产环境实战

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  2. mysql_secure_installation 安全安装(用于生产环境设置)

    编译安装完mysql5.6,如果用于生产环境,最好执行mysql_secure_installation来做一些常规化安全设置. 需要提前将~mysql/bin加入环境变量 /apps/mysql// ...

  3. 基于redis的分布式锁(不适合用于生产环境)

    基于redis的分布式锁 1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分 ...

  4. Linux MySQL差异备份技巧

    MSSQL差异备份使用技巧 15 Apr 2013 所谓的差异备份,就是只备份最近一次备份之后到此次备份之前所增加的那一部分数据.打个比方我第N次备份后数据库存放的内容是ABCD,然后我第N+1次 备 ...

  5. MySQL 系列(四) 主从复制、读写分离、模拟宕机、备份恢复方案生产环境实战

    本章内容: 主从复制 简介原理 备份主库及恢复从库,配置从库生效 读写分离 如果主宕机了,怎么办? 双主的情况 MySQL 备份及恢复方案 备份单个及多个数据库 mysqldump 的常用参数 如何增 ...

  6. 8 个用于生产环境的 SQL 查询优化调整

    在没有数据仓库或单独的分析数据库的组织中,报告的唯一来源和最新的数据可能是在现场生产数据库中. 在查询生产数据库时,优化是关键.一个低效的查询可能会对生产数据库产生大量的资源消耗,如果查询有错误会引发 ...

  7. Ocelot中文文档-Raft(实验功能不能用于生产环境)

    Ocelot最近整合了Rafty,这是我在去年一直研究的Raft的一个实现. 这个项目实验性非常强,所以在我认为它没问题之前,请不要在生产环境中使用Ocelot的这个功能. Raft是一种分布式一致性 ...

  8. mysql定时备份任务

    简介 在生产环境上,为了避免数据的丢失,通常情况下都会定时的对数据库进行备份.而Linux的crontab指令则可以帮助我们实现对数据库定时进行备份.首先我们来简单了解crontab指令,如果你会了请 ...

  9. MySQL的备份和恢复-mysqldump

    MySQL的备份和恢复-mysqldump 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么需要备份 1>.做灾难恢复 天有不测风云嘛,如果你的服务器被黑客攻击了(比 ...

随机推荐

  1. Linux下修改网卡的mac地址

    方法1: # ifconfig ethX down # ifconfig ethX hw ether NEW_MAC_ADDR # ifconfig ethX up 但是这样重启后就失效了,需要再敲一 ...

  2. 一步步教你如何把电脑设置U盘启动(图解教程)

    一.我们先来说说如何进入 BIOS设置程序: 在开机时按下特定的热键可以进入BIOS设置程序,不同类型的机器进入BIOS设置程序的按键不同,有的在屏幕上给出提示,有的不给出提示,几种常见的BIOS设置 ...

  3. 栅格系统不是要包裹在container里面吗

    栅格系统不是要包裹在container里面吗 为什么直接设置col-sm 在form表单中 不是应该这样么 <form> <div class="container&quo ...

  4. Maven依赖范围及依赖传递

    一: 依赖范围scope 共5种,compile (编译).test (测试).runtime (运行时).provided.system 不指定,则依赖范围默认为compile. compile:编 ...

  5. bitmap size exceeds VM budget

    bitmap size exceeds VM budget we can avoid this error by the following parts:1  its not how much ima ...

  6. 记事本源代码 python3

    已实现基本功能,显示行号功能暂时实现不了(后面学会了再加,右下角可以实现定位光标所在行.列) 可能会有些bug 1 from tkinter import * from tkinter.message ...

  7. Loadrunner 添加windows资源没反应

    使用 LoadRunner Controller 添加Windows资源系统没有反应, 解决办法 : 1.关闭Windows 防火墙 2.若使用的不是本机 1) 首先要启动所监测机器的remote r ...

  8. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  9. JavaScript 变量克隆和判断变量类型

    一.变量克隆 在js中经常会遇到将一个变量赋值给一个新的变量这种情况,这对于基本类型很容易去实现,直接通过等号赋值就可以了,对于引用类型就不能这样了.(注:像函数,正则也可以直接通过等号赋值) 这里我 ...

  10. jQuery Mask

    <script type="text/javascript" src="/assets/mask/jquery.mask.min.js"></ ...