一、mysql提供了一个mysqldump的工具可以方便的导出导入数据库信息;

二、使用命令行shell测试执行mysqldump,理解必备的参数,查看生成的sql备份文件是否符合需求;

/usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql

注解:
1、执行 /usr/bin/mysqldump;
2、--opt是quick,add-drop-table,add-locks,extended-insert,lock-tables几个参数的合称,一般都要使用,具体意思自行搜索;
3、-u数据库用户名 -p数据库用户密码 -h数据库地址 数据库名 > 导出的文件路径;
4、`date +%F`是shell中生成当前日期,格式如2015-11-05,所以成功导出时生成的文件名为 db_2015-11-05.sql;
5、下载生成的 sql文件 ,用文本编辑器打开检查,本地导入测试数据库,看是否有问题;

三、整理编写比较灵活的shell脚本,方便重用;

#!/bin/sh

# Database info
DB_USER="batsing"
DB_PASS="batsingpw"
DB_HOST="localhost"
DB_NAME="timepusher" # Others vars
BIN_DIR="/usr/bin" #the mysql bin path
BCK_DIR="/mnt/mysqlBackup" #the backup file directory
DATE=`date +%F` # TODO
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql #还原数据库
#用mysql-front导入前一天的 *.sql 文件即可恢复数据

保存到文件或上传到 /usr/local/apache/htdocs/timepusher/sqlBak/sqlAutoBak.sh

四、测试Shell脚本

1、进入到该脚本文件目录 chmod +x sqlAutoBak.sh 添加执行权限,否则会报错  Permission denied
2、./sqlAutoBak.sh ,如果是在windows编写上传的文件可能会报错

/bin/sh^M: bad interpreter: No such file or directory

这是不同系统编码格式引起的:在 windows系统中编辑的 .sh文件可能有不可见字符,所以在 Linux系统下执行会报以上异常信息。可以在Windows上使用Notepad++转换成Unix格式(菜单中选择:编辑>档案格式转换>转换成UNIX)
3、修改后上传继续执行 ./sqlAutoBak.sh ,没有报错。再查看导出的sql文件。

五、压缩mysql的备份数据

1、查看导出来的sql文件,发现其文件大小非常大,mysqldump也提供了生成gzip压缩文件的参数设置
2、sqlAutoBak.sh修改为如下

#!/bin/sh

# Database info
DB_USER="batsing"
DB_PASS="batsingpw"
DB_HOST="localhost"
DB_NAME="timepusher" # Others vars
BIN_DIR="/usr/bin" #the mysql bin path
BCK_DIR="/mnt/mysqlBackup" #the backup file directory
DATE=`date +%F` # TODO
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
# $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME | gzip > $BCK_DIR/db_$DATE.sql.zip
# 还原数据库
# 把 *.sql.zip 使用gunzip 或 本地的解压软件 解压为 *.sql 文件
# 用mysql-front导入前一天的 *.sql 文件即可恢复数据

3、修改后上传继续执行 ./sqlAutoBak.sh ,没有报错。如果用文本编辑器查看导出的 *.sql.gz文件,应该是一堆乱码。
4、下载到本地使用解压软件打开,解压就能看到里面真正的 *.sql 文件了。

 

六、设置linux定时任务执行该脚本;

1、编辑定时任务列表

crontab -e

2、插入下面这一行,因为通常来说5点钟网站的访问量最低。

00 05 *   * * /bin/sh /usr/local/apache/htdocs/timepusher/sqlBak/sqlAutoBak.sh
#每天早上 5:00am 执行

3、查看任务是否创建成功

crontab -l

七、第二天检查自动生成的sql文件是否符合要求

如果生成的文件和解压出来查看没有问题,那么这个自动定时备份数据库的脚本就算是完成了。因为生成的文件多了会占用一定的空间,所以建议要定期(比如一个月)清理一下文件。

$、补充

1、如果该数据库的用户没有分配 锁表 的权限,则备份会报错 when using LOCK TABLES 。那是因为mysqldump命令默认在导出时是要锁定表的,所以解决方式有两个。一个是给该用户开放 锁表 的权限;另一个是在命令中加上  --skip-lock-tables 这个参数。即是:

$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME --skip-lock-tables| gzip > $BCK_DIR/db_$DATE.sql.gz

shell脚本每天自动备份mysql数据库的更多相关文章

  1. 使用shell脚本定时执行备份mysql数据库

    使用shell脚本定时执行备份mysql数据库 #!/bin/bash ############### common file ################ #本机备份文件存放目录 MYSQLBA ...

  2. shell 脚本实现定时备份mysql数据库

    首先要知道直接在脚本中输入mysql的密码是不被允许的,但是我们可以曲线救国 1. 在新建一个文件专门用来存储用户密码 如: vim ./.mysql.conf [mysqldump] user=yo ...

  3. Linux自动备份MySQL数据库脚本代码

    下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行 在脚本中可设置需要备份的数据库表清单,并且会将备份文件通过gzip压缩.需要注意的是, ...

  4. Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本

    Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/92234 ...

  5. Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本

    Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/92234 ...

  6. Linux下自动备份MySQL数据库并上传到远程FTP服务器

    Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明:  1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...

  7. 在生产环境下实现每天自动备份mysql数据库

    1.描述 我相信很多朋友在工作都都会有这种需求,老板或领导让你每天都要备份mysql数据库,你该如何实现呢,是每天到一定的时间在服务器上敲一遍mysql的备份命令,还是想写个脚本,定时定点的自动备份呢 ...

  8. 如何在生产环境下实现每天自动备份mysql数据库

    1.描述 通"shell脚本+定时任务"的方式来实现自动备份mysql数据库. 2.环境 备份路径:/data/mysqlbak/ 备份脚本:/data/mysqlbak/mysq ...

  9. Linux 每天自动备份mysql数据库的方法

    Linux 每天自动备份mysql数据库的方法 作者: 字体:[增加 减小] 类型:转载   linux下为了安全有时候需要自动备份mysql数据库,下面是具体的实现步骤.   /usr/bin为my ...

随机推荐

  1. 基本排序算法——shell排序java实现

    shell排序是对插入排序的一种改进. package basic.sort; import java.util.Arrays; import java.util.Random; public cla ...

  2. Android自定义控件(二)

    这一篇主要来讲一下自定义控件中的自定义viewgroup,我们以项目中最常用的下拉刷新和加载更多组件为例 简单介绍一下自定义viewgroup时应该怎么做. 分析:下拉刷新和加载更多的原理和步骤 自定 ...

  3. C语言基于GTK+Libvlc实现的简易视频播放器(二)

    简易视频播放器-全屏播放 一.课程说明 上一次我们使用gtk+libvlc实现了一个最简单的视频播放器,可以实现点击按钮暂定和停止播放视频,以及同步显 示视频播放进度,但即使作为一个视频播放器,只有这 ...

  4. MySQL5.7 修改密码

    MySQL5.7 修改密码 mysql> update mysql.user set authentication_string = password('新密码') where user='用户 ...

  5. 5、软件架构师要阅读的书籍 - IT软件人员书籍系列文章

    软件架构师在项目中的地位是不言而喻的,其对于项目的需求要相对比较了解,然后对项目代码的结构需要做到覆盖全面.本文就说说作为一个软件架构师需要阅读的一些书籍. 当然,这些书籍都来源于网络,是笔者收集整理 ...

  6. 【从零开始学习Hadoop】--1.Hadoop的安装

    第1章 Hadoop的安装1. 操作系统2. Hadoop的版本3. 下载Hadoop4. 安装Java JDK5. 安装hadoop6. 安装rsync和ssh7. 启动hadoop8. 测试had ...

  7. MySQL如何导出带日期格式的文件

    一网友问在MySQL中如何只用SQL语句导出带日期格式的文件.觉得有点意思,于是尝试了一下.导出文件使用SELECT INTO OUTFILE 但是OUTFILE后面的值不能使用变量,所以只能使用动态 ...

  8. 如何查看Oracle客户端版本

    在实际工作中,总会遇到一些需要查看.验证ORACLE客户端版本的问题,因为一台服务器可能装了多个Oracle客户端版本:也有可能你需要知道安装的版本是32位还是64位的.如何查看Oracle客户端(O ...

  9. JavaScript:内存泄露、性能调优

    1.在进行JS内存泄露检查之前,先要了解JS的内存管理: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Manageme ...

  10. Tomcat中更改网站根目录

    Tomcat的默认目录是指向webapps下的root目录,输入http://localhost:8080,会打开root目录下的页面.我想让localhost指向我自己的目录.比如webapps/m ...