Shell脚本完成Mysql数据库完全备份
编程需求:
作为一个运维工程师,对数据库的增删改查是我们的日常工作,所以如果能用脚本完成备份,对于日常工作量是一个不错的减压.
现有一台Mysql的数据库,想实现完全备份.
源代码
#!/bin/bash
#定义日期,方便存储的时候更加方便寻找到每天备份的数据库
DATE=$(date +%Y-%d-%m)
#定义存放路径,自己定义即可
DES=#存放的路径
#定义mysql用户名称
MYSQL_U="连接数据库的用户"
#mysql密码,根据需要修改密码
MYSQL_P="登录数据库用户的密码"
#判断存放备份数据库的路径是否存在,若不存在则自动创建
if [ ! -d "$DES" ] ; then
mkdir -p "$DES"
fi
#获取数据库名称列表
DB=$(mysql -u $MYSQL_U -p$MYSQL_P -e 'show databases')
#通过循环执行备份所有的MySQL数据库
for database in $DB
do
#information_schema库不备份,其他库均备份
if [ ! $database == "information_schema" ];then
#完全备份的方式进行备份
mysqldump -u $MYSQL_U -p$MYSQL_P $database | bzip2 > "$DES/${DATE}_mysql.gz"
fi
done
脚本运行结果及说明
1.执行此脚本要求登录数据库的用户有相关的权限!
2.bzip2需要安装相关指令的包
yum -y install bzip2即可
3.执行脚本/tmp/mysqldump.sh
可能会出现这两条错误,但是似乎不影响备份!目前这连个问题尚未解决!
mysqldump: Got error: 1049: "Unknown database 'Database'" when selecting the database
mysqldump: Got error: 1142: "SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'cond_instances'" when using LOCK TABLES
4.如果数据库不在本地,则需要加上 -h 数据库服务器地址,推荐可以将其定义成变量,将两台代码进行更改即可!
DB=$(mysql -u $MYSQL_U -p$MYSQL_P -h 服务器IP地址 -e 'show databases')
mysqldump -u $MYSQL_U -p$MYSQL_P -h 服务器IP地址 $database | bzip2 > "$DES/${DATE}_mysql.gz"
查看脚本执行后的备份结果
cd 到您定义的存放备份数据库的目录下
ls
可以看到刚才执行完脚本后新生成的备份数据库文件
2019-19-11_mysql.gz