• 使用linux命令定时备份还原数据库


    一、定时备份
    1、找到合适位置创建文件夹,放置脚本文件和备份数据
    创建备份数据库的脚本路径
    mkdir -p /usr/local/msyql/mysql_backup
    创建存放备份数据的路径
    mkdir -p /usr/local/mysql/database_bak/
    进入备份数据库的脚本路径
    cd /usr/local/mysql/mysql_backup
    创建脚本并填写内容
    vi mysql_backup.sh
    2、填充mysql_backup.sh脚本的内容

    #!/bin/bash
    #================基础参数===============
    #这里的用户名输入自己的用户名
    user="root"
    #这里的密码输入自己的密码
    password="123456"
    port="3306"
    #备份库名列表,括号内多个数据库空格隔开,这个也是自己的数据库名称
    db_name_array=("test")
    #备份位置(若不存在,会自动创建)
    datafile_path="/usr/local/mysql/database_bak"
    #mysqlDump的绝对位置,基本为mysql安装路径
    mysqlDump_path="/usr/bin/mysqldump"
    #是否删除.sql文件(包含子目录): ON开启,其他字符不开启
    rf_switch="ON"
    #备份数据保留天数(按文件修改时间计算)
    expire_day=10
    #================非开发人员勿改================
    #备份最终路径,db_name是自己的数据库名称
    bak_path="${datafile_path}/${db_name}"
    #错误日志文件名称
    error_log="${bak_path}/${db_name}_error.log"
    #================备份执行指令================
    #判断文件夹,不存在则创建
    if [ ! -d "$bak_path" ]
    then
     mkdir -p  ${bak_path}
     echo "已创建文件夹${bak_path}"
    #这个是和if对着的
    fi
    #判断mysql是否开启 
    # lsof要root权限启动
    checkPort=`lsof -i:${port} | wc -l`
    if [ "$checkPort" -gt "0" ]
    then
     echo "mysql 已启动"
    else
     echo "mysql 未启动无法进行备份"
     echo "mysql 未启动无法进行备份" > $error_log
    fi
    
    #执行备份,
    for db_name in ${db_name_array[*]}
    do
    ${mysqlDump_path} --defaults-extra-file=/etc/my.cnf --databases $db_name | gzip > ${bak_path}"/"$db_name$'_'$(date +%Y%m%d).sql.gz 2>>${error_log}
    done
    #删除过期文件
    if [ $rf_switch == "ON" ]
    then
     find ${bak_path} -name "*.sql" -mtime +${expire_day} | xargs rm -f
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    3、脚本增加权限
    chmod +x ./mysql_backup.sh
    4、安装lsof
    yum install -y lsof
    6、修改mysql配置文件
    vi /etc/my.cnf
    在文件末尾加入下面内容(密码是数据库的密码):
    [mysqldump]
    user=root
    password=你的密码
    5、测试脚本运行
    ./mysql_backup.sh

    6、设置定时自动执行备份脚本
    打开脚本
    crontab -e

    编辑脚本
    #每天下午4点半执行脚本
    30 16 * * * sudo /usr/local/mysql/mysql_backup/mysql_backup.sh
    二、接收方自动接收数据库备份
    在接收方上操作:
    1.安装sshpass
    yum install sshpass

    2.设置定时传输备份
    打开脚本
    crontab -e

    编辑脚本
    #定时拷贝生产库的备份
    30 16 * * * sshpass -p ‘admin’ scp -r admin@192.168.60.204:/usr/local/mysql/database_bak/* /usr/local/mysql/database_bak
    创建存放备份数据的路径
    mkdir -p /usr/local/mysql/database_bak/

    三、数据库定时还原脚本
    1、首先在接受方服务器上创建一个定时还原的脚本

    vi /usr/local/mysql/mysql_backup/Reduction.sh
    然后可以打开脚本
    #这里写自己发送方的数据库名称,也是将数据库名称封装在变量中
    db_name=‘test’
    #将定时时间封装在变量中
    DATE=date +%Y%m%d
    #备份所在的文件路径
    DIR=/usr/local/mysql/database_bak
    echo $DIR
    #解压备份文件
    gunzip D I R / DIR/ DIR/db_nameKaTeX parse error: Expected group after '_' at position 2: '_̲'DATE.sql.gz

    #前边都是为了最后这一步
    mysql --defaults-extra-file=/etc/my.cnf $db_name < D I R / DIR/ DIR/db_nameKaTeX parse error: Expected group after '_' at position 2: '_̲'DATE.sql

    2、切换到路径下,给脚本增加权限
    cd /usr/local/mysql/mysql_backup
    chmod 755 ./ Reduction.sh
    3、修改mysql配置文件vi /etc/my.cnf
    在文件末尾加入下面内容:
    [mysql]
    user=root
    password=你的密码
    4、设定定时
    打开脚本
    crontab -e

    在脚本最后一行添加
    #固定时间执行执行还原脚本
    30 16 * * * sudo /usr/local/mysql/mysql_backup/Reduction.sh

    i

  • 相关阅读:
    leetcode - 1647. Minimum Deletions to Make Character Frequencies Unique
    深入浅出 SQL 优化:全面提升查询性能的技巧
    C语言趣味代码(一)
    yolov5的trick总结
    [ Linux ] 动静态库 手把手教你写一个自己的库
    (C语言)一元多项式的乘法与加法运算
    解决flume往hdfs中写大量小文件问题
    如何评价自己的研究工作是否有价值
    无线渗透理论_无线通信过程
    Rust中打印语句为什么使用宏实现?
  • 原文地址:https://blog.csdn.net/weixin_45706856/article/details/126087398