linux mysql mysqldump,Linux Shell脚本之利用mysqldump备份MySQL数据库(详细注解)

设计该脚本的一些设计、编写考虑:

该脚本适用于编译安装MySQL和通过yum或apt-get等安装方式

该脚本可以反复执行,不会重复覆盖数据

可增加,删除N天前的备份以节省磁盘空间

充分利用mysqldump的自带锁表功能、刷新日志、复制等功能

利用mysqldump命令备份MySQL数据库的脚本(不带注释版,适合生产环境使用)

#!/bin/bash

MYSQLDBUSERNAME=root

MYSQLDBPASSWORD=password

MYSQBASEDIR=/usr/local/mysql

MYSQL=$MYSQBASEDIR/bin/mysql

MYSQLDUMP=$MYSQBASEDIR/bin/mysqldump

BACKDIR=/var/backup/db

DATEFORMATTYPE1=$(date +%Y-%m-%d)

DATEFORMATTYPE2=$(date +%Y%m%d%H%M%S)

[ -d $MYSQBASEDIR ] && MYSQDATADIR=$MYSQBASEDIR/data || MYSQDATADIR=/var/lib/mysql

[ -x $MYSQL ] || MYSQL=mysql

[ -x $MYSQLDUMP ] || MYSQLDUMP=mysqldump

[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}

[ -d ${BACKDIR}/${DATEFORMATTYPE1} ] || mkdir ${BACKDIR}/${DATEFORMATTYPE1}

DBLIST=`ls -p $MYSQDATADIR | grep / |tr -d /`

for DBNAME in $DBLIST

do ${MYSQLDUMP} --user=${MYSQLDBUSERNAME} --password=${MYSQLDBPASSWORD} --routines --events --triggers --single-transaction --flush-logs --databases ${DBNAME} | gzip > ${BACKDIR}/${DATEFORMATTYPE1}/${DBNAME}-backup-${DATEFORMATTYPE2}.sql.gz

[ $? -eq 0 ] && echo "${DBNAME} has been backuped successful" || echo "${DBNAME} has been backuped failed"

/bin/sleep 5

done

利用mysqldump命令备份MySQL数据库的脚本(带注释版,适合学习和测试使用)

#!/bin/bash

# MYSQLDBUSERNAME是MySQL数据库的用户名,可自定义

MYSQLDBUSERNAME=root

# MYSQLDBPASSWORD是MySQL数据库的密码,可自定义

MYSQLDBPASSWORD=password

# MYSQBASEDIR是MySQL数据库的安装目录,--prefix=$MYSQBASEDIR,可自定义

MYSQBASEDIR=/usr/local/mysql

# MYSQL是mysql命令的绝对路径,可自定义

MYSQL=$MYSQBASEDIR/bin/mysql

# MYSQLDUMP是mysqldump命令的绝对路径,可自定义

MYSQLDUMP=$MYSQBASEDIR/bin/mysqldump

# BACKDIR是数据库备份的存放地址,可以自定义修改成远程地址

BACKDIR=/var/backup/db

# 获取当前时间,格式为:年-月-日,用于生成以这种时间格式的目录名称

DATEFORMATTYPE1=$(date +%Y-%m-%d)

# 获取当前时间,格式为:年月日时分秒,用于生成以这种时间格式的文件名称

DATEFORMATTYPE2=$(date +%Y%m%d%H%M%S)

# 如果存在MYSQBASEDIR目录,则将MYSQDATADIR设置为$MYSQBASEDIR/data,具体是什么路径,就把data改成什么路径,否则将MYSQBASEDIR设定为/var/lib/mysql,可自定义

[ -d $MYSQBASEDIR ] && MYSQDATADIR=$MYSQBASEDIR/data || MYSQDATADIR=/var/lib/mysql

# 如果mysql命令存在并可执行,则继续,否则将MYSQL设定为mysql,默认路径下的mysql

[ -x $MYSQL ] || MYSQL=mysql

# 如果mysqldump命令存在并可执行,则继续,否则将MYSQLDUMP设定为mysqldump,默认路径下的mysqldump

[ -x $MYSQLDUMP ] || MYSQLDUMP=mysqldump

# 如果不存在备份目录则创建这个目录

[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}

[ -d ${BACKDIR}/${DATEFORMATTYPE1} ] || mkdir ${BACKDIR}/${DATEFORMATTYPE1}

# 获取MySQL中有哪些数据库,根据mysqldatadir下的目录名字来确认,此处可以自定义,TODO

DBLIST=`ls -p $MYSQDATADIR | grep / |tr -d /`

# 从数据库列表中循环取出数据库名称,执行备份操作

for DBNAME in $DBLIST

# mysqldump skip one table

# -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

# mysqldump --ignore-table=mysql.event

# http://serverfault.com/questions/376904/mysqldump-skip-one-table

# --routines,备份存储过程和函数

# --events,跳过mysql.event表

# --triggers,备份触发器

# --single-transaction,针对InnoDB,在单次事务中通过转储所有数据库表创建一个一致性的快照,此选项会导致自动锁表,因此不需要--lock-all-tables

# --flush-logs,在dump转储前刷新日志

# --ignore-table,忽略某个表,--ignore-table=database.table

# --master-data=2 ,如果启用MySQL复制功能,则可以添加这个选项

# 将dump出的sql语句用gzip压缩到一个以时间命名的文件

do ${MYSQLDUMP} --user=${MYSQLDBUSERNAME} --password=${MYSQLDBPASSWORD} --routines --events --triggers --single-transaction --flush-logs --ignore-table=mysql.event --databases ${DBNAME} | gzip > ${BACKDIR}/${DATEFORMATTYPE1}/${DBNAME}-backup-${DATEFORMATTYPE2}.sql.gz

# 检查执行结果,如果错误代码为0则输出成功,否则输出失败

[ $? -eq 0 ] && echo "${DBNAME} has been backuped successful" || echo "${DBNAME} has been backuped failed"

# 等待5s,可自定义

/bin/sleep 5

done

执行效果:

[root@htvm ~]# ./backupmysqlbydate.sh

mysql has been backuped successful

test has been backuped successful

[root@htvm ~]# ls /var/backup/db/2015-07-27/

mysql-backup-20150727195515.sql.gz  test-backup-20150727195515.sql.gz

[root@htvm ~]#

标签:mysqldump,备份MySQL数据库,MySQL数据库备份,mysql备份,mysql备份脚本

--end--

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值