运维日常

Shell脚本完成Mysql数据库完全备份

2019-11-19  本文已影响0人  大白菜的猪猪

编程需求:

作为一个运维工程师,对数据库的增删改查是我们的日常工作,所以如果能用脚本完成备份,对于日常工作量是一个不错的减压.


现有一台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

上一篇下一篇

猜你喜欢

热点阅读