结合Git实现Mysql差异备份,可用于生产环境

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

埋头苦干多年一直没写过文章,今天突发狂想,为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



1
2
3
4
5
6
7
#!/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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/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命令查看每次备份的中数据库表中版本变化

干活吐槽结束 有不足之处,欢迎拍砖!!!


本文转自birdinroom 51CTO博客,原文链接:http://blog.51cto.com/birdinroom/1341884,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
关系型数据库 MySQL 数据库
rds备份与恢复
rds备份与恢复
57 3
|
3月前
|
关系型数据库 MySQL 数据库
Python tk dos命令备份mysql数据库
Python tk dos命令备份mysql数据库
25 0
|
3月前
|
存储 关系型数据库 MySQL
mysql数据库如何做到定期备份
mysql数据库如何做到定期备份
293 2
|
2月前
|
SQL 关系型数据库 MySQL
mysql怎么备份
mysql怎么备份
197 7
|
3月前
|
存储 关系型数据库 MySQL
利用Xtrabackup进行mysql增量备份和全量备份
利用Xtrabackup进行mysql增量备份和全量备份
198 0
|
2天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
10 0
|
17天前
|
SQL 存储 关系型数据库
mysql数据库备份与恢复
mysql数据库备份与恢复
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下定时备份mysql数据库
Linux环境下定时备份mysql数据库
|
2月前
|
存储 关系型数据库 MySQL
mysql怎么备份
mysql怎么备份
22 7
|
2月前
|
监控 容灾 安全
规划阿里云RDS跨区迁移并构建容灾与备份策略
规划阿里云RDS(Relational Database Service)跨区迁移并构建容灾与备份策略
114 2