美文网首页运维日常
Shell脚本完成Mysql数据库完全备份

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

作者: 大白菜的猪猪 | 来源:发表于2019-11-19 11:13 被阅读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

    相关文章

      网友评论

        本文标题:Shell脚本完成Mysql数据库完全备份

        本文链接:https://www.haomeiwen.com/subject/tqrwictx.html