远程mysql8.0服务数据定时备份到本地

需求

现在有一台运行在阿里云上的mysql8.0服务,为了数据的安全性需要每天凌晨备份数据到本地,而且需要每个数据库需要单独备份。

思路

本地使用的也是linux系统,在本地上运行mysqldump命令,对于多个数据库需要循环遍历,并将以上内容写入脚本,为了保证数据库密码的安全可以对脚本进行加密,最后使用crontab完成每天凌晨功能。

安装mysql

因为只用到了mysqldump,所以可以将以下文件解压到任何一个文件夹中,然后通过绝对路径访问mysqldump

cd /usr/local
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.21-linux-glibc2.12-x86_64 mysql8

备份

mkdir /opt/mysql_dump
cd /opt/mysql_dump
vim backup.sh

在 backup.sh中写入以下内容,并修改数据库名称列表、主机地址和密码

#!/bin/bash

# 数据库名称列表
databases=("auth" "user")
# 文件备份到的目录,这个目录要手动创建
dump_dir='/opt/mysql_dump'
for str in ${databases[@]};do
        # 判断是否存在数据库相同名称的目录
        if [ ! -d "$dump_dir/$str" ]; then
                mkdir $dump_dir/$str
        fi
        # `date +\%Y\%m\%d\%H\%M\%S` 给文件添加一个时间戳
        /usr/local/mysql8/bin/mysqldump -h host -P3306 -u root -p'pasword' --default-character-set=utf8 $str > $dump_dir/$str/`date +\%Y\%m\%d\%H\%M\%S`.sql
done

修改文件的执行权限

chmod u+x backup.sh

测试是否可以备份

./backup.sh

mysqldump的基本使用

备份整个数据库

/usr/local/mysql8/bin/mysqldump -u root -h host -p'password' dbname > backdb.sql

备份数据库中的某个表

/usr/local/mysql8/bin/mysqldump -u root -h host -p'password' dbname tbname1, tbname2 > backdb.sql

备份多个数据库

/usr/local/mysql8/bin/mysqldump -u root -h host -p'password' --databases dbname1, dbname2 > backdb.sql

备份系统中所有数据库

/usr/local/mysql8/bin/mysqldump -u root -h host -p'password' --all-databases > backdb.sql

脚本加密

由于脚本中涉及到数据库的密码问题,可以对shell脚本进行加密,gzexe(可以反编译成明文不是很全,是系统自带命令)或shc,这里我们使用gzexe进行加密

gzexe backup.sh

定时任务

每天凌晨备份一次

编辑工作表

crontab -e

打开编辑框填入以下内容

0 0 * * * /opt/mysql_dump/backup.sh

查看任务是否已经执行

crontab -l

crontab 相关操作

crontab [-u username]    //省略用户表表示操作当前用户的crontab
    -e      (编辑工作表)
    -l      (列出工作表里的命令)
    -r      (删除工作作)

{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}

  • o minute: 区间为 0 – 59
  • o hour: 区间为0 – 23
  • o day-of-month: 区间为0 – 31
  • o month: 区间为1 – 12. 1 是1月. 12是12月.
  • o Day-of-week: 区间为0 – 7. 周日可以是0或7.

版权声明:本文为maker_knz原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。