一、背景

在开发项目中,数据库是核心资产。除了做主备冗余增加可靠性外,定期备份数据也是必须的。

使用mysqldump备份数据具有操作简单,备份和恢复时间短的优点(mysqldump备份数据生成的是批量insert语句,恢复数据时间比navcat导出的逐条插入方式快不只一个数量级)。

总之、如果你使用的是mysql数据库,需要备份数据,使用mysqldump就没错了。

二、解决方案

开发一个备份数据库的批处理脚本,自动完成多服务器上多数据库的备份、数据压缩工作。

1、首先,准备环境

建一个backup_db文件夹:

说明:mysql.exe、mysqldump.exe从mysql数据库bin目录下拷贝。7z.exe和7z.dll从7z安装目录下拷贝(推荐使用7z,免费又好用)。

2、其次,开发脚本

编辑上面截图中的backup.bat文件。

@echo off
set curDir=%CD%

::1、初始化待备份数据库IP地址与数据库名称的对应关系
set dbIpMap="192.168.1.102,testdb1"^
 "192.168.1.102,testdb2"^
 "192.168.1.102,testdb3"

::2、创建存放数据库备份文件的临时文件夹
set folderName=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
mkdir "%curDir%\%folderName%"

::设置变量延时赋值
setlocal ENABLEDELAYEDEXPANSION

::3、循环备份数据库中的所有表结构和数据
for %%a in (%dbIpMap%) do (

    set dbPair=%%a

    ::删除引号
    set dbip=!dbPair:"=!

    @echo 正在备份数据库:!dbip!...

    for /f "delims=, tokens=1,2" %%i in ("!dbip!") do (
        set ip=%%i
        set dbName=%%j

        mysqldump -h192.168.1.102 -uroot !dbName!>"%curDir%\%folderName%\!dbName!.sql"
    )

    @echo 备份数据库完成!

    ::备份的文件可能比较大,做一下压缩
    7z a "%curDir%\%folderName%\!dbName!.zip" "%curDir%\%folderName%\!dbName!.sql"

    ::备份后删除原始文件
    del /f "%curDir%\%folderName%\!dbName!.sql"
)

编写完上面的批处理脚本后,可以把它添加到操作系统的定时任务里面,这样就每天定时备份了,不用人工干预。

三、写在后面的话

备份文件经过压缩后已经极大缩小了(文本文件的压缩比是很高的),但日积月累还是可能很占磁盘空间,特别是数据量很大的情况下。

可以再加一些脚本处理,将压缩后的文件上传到公司的配置库上,这样既解决了磁盘空间问题也解决了防数据丢失的问题。这块要看公司使用的是什么配置库, SVN/ClearCase/Git使用的命令不一样,可以翻一手册;都比较简单。

如何使用mysqldump备份数据库的更多相关文章

  1. 使用Mysqldump 备份数据库

    使用Mysqldump 备份数据库 1.备份一个数据库 mysqldump --user [user name] --password=[password] [database name] >  ...

  2. mysqldump备份数据库时出现when using LOCK TABLES

    用mysqldump备份数据库时,如果出现when using LOCK TABLES,解决办法是加上 --skip-lock-tables 例如: 用mysqldump备份数据库时出现 29: Fi ...

  3. mysqldump备份数据库

    1. 备份数据库-->sql文件 mysqldump -h192.168.1.100 -uuser -p123 --databases name > /tmp/databasedump.s ...

  4. mysqldump 备份数据库脚本

    创建备份数据库脚本mysql_backup.sh,内容如下: #!/bin/bash export PATH=/bin:/usr/bin:/usr/local/bin TODAY=`date +&qu ...

  5. PHP使用mysqldump备份数据库(以及还原)

    导出数据实例如下: <?php $mdb_host = $g_c["db"][0]["managertool"]["host"]; / ...

  6. mysqldump备份数据库时排除某些库

    说明:使用mysqldump –all-databases会导出所有库.但如果做主从,从主库dump出数据时,我们是不需要也不想要information_schema 和 mysql 库的.数据库少的 ...

  7. mysqldump 备份数据库用户所需要的权限

    mysqldump 所需要的权限说明: 1.对于table 来说mysqldump 最少要有select 权限. 2.对于view 来说mysqldump 要有show view 权限. 3.对于tr ...

  8. 用mysqldump备份数据库

    格式:/usr/local/mysql/bin/mysqldump -hip -Pport -uuser -ppasswd --set-gtid-purged=off  --database aa & ...

  9. 使用mysqldump备份数据库

    #! /bin/shday_str=`date +%j`day=`date +%Y%m%d`days_str=`echo "$day_str % 60"|bc`cd /home/d ...

随机推荐

  1. pro asp.net mvc 5笔记

    1.Ninject条件绑定方法When(predicate)WhenClassHas<T>()WhenInj ectedInto<T>()例: kernel.Bind<I ...

  2. Shiro 核心功能案例讲解 基于SpringBoot 有源码

    Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...

  3. springboot2.0(一):【重磅】Spring Boot 2.0权威发布

    就在昨天Spring Boot2.0.0.RELEASE正式发布,今天早上在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误, ...

  4. 判断json是否包含了每个键 PHP

    (1)可以用array_key_exists去判断object对象或array数组中是否含有某个键: (2)不可以用isset去判断判断object对象或array数组中是否含有某个键 $decode ...

  5. 微信小程序半周问题总结

    新产品要做一个微信小程序,不想吐槽老板没给任何准备就给出了需求和原型图,好像默认小程序闭着眼睛就可以很顺利开发好.现在半周下来(五一结束开始到今天)完成了差不多所有的界面,网络请求部分还跟服务端兄弟耗 ...

  6. 字典树trie

    字典树经常用于单词搜索,现在网络引擎中也应用了trie树: public class Trie{ private int SIZE = 26; private TrieNode root; Trie( ...

  7. Java 到底是值传递还是引用传递

    作者:Intopass链接:https://www.zhihu.com/question/31203609/answer/50992895来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  8. Django 学习笔记

    day 1 : 一.web 框架本质: 1.http 建立在tcp 之上:一次互通后断开,无状态,短链接 请求头: b'GET / HTTP/1.1 Host: 127.0.0.1:8080 Conn ...

  9. Unity引擎与C#脚本简介

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 由 QQ会员技术团队 发布在云+社区 1. Unity编辑器基础 从原理上讲,游戏开发就是将一系列变动的场景呈现在玩家面前,并根据玩家的输入 ...

  10. Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法

    Android ListView异步加载图片错位.重复.闪烁分析以及解决方案,具体问题分析以及解决方案请看下文. 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图 ...