远程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.
文章出自 enCE(奈斯) ,文章地址:http://www.eaoogle.com/article/index.html?id=27。