使用脚本定时备份 MySQL 数据库

1.1 Linux 备份数据库

☞ 编写脚本

  先找个地方编写如下 sh 脚本(我一般在 /usr/local 下创建 backup/backup.sh),替换掉下面的用户名,密码,数据库名以及生成文件路径及文件名。需要注意的是,如果是在 Windows 编写完成的脚本会因为 Windows每行结尾 \n\r,Linux 是 \n 而报 -bash: xxxx.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录 错误,执行 sed -i 's/\r$//' name.sh 替换掉字符就可以了。

#!/bin/bash
# 不压缩
mysqldump -uroot -proot database > /home/backup/name_$(date +%Y%m%d_%H%M%S).sql
# 压缩
mysqldump -uroot -proot database | gzip > /home/backup/name_$(date +%Y%m%d_%H%M%S).sql.gz

☞ 添加权限

  刚写好的脚本是没有权限无法执行的,我们先要给其赋权。然后直接运行脚本,看下能否完成备份,同时检查备份文件能否使用。在检查备份时,可能会报 [Err] 2006 - MySQL server has gone away 这是应为可能是 sql 语句过长即 sql 文件过大,超过 MySQL 通信缓存区最大长度。修改下 max_allowed_packet 就可以了。

# 赋权
chmod u+x backup.sh

# 备份
./backup.sh

  注意有些执行备份会提示 Warning: Using a password on the command line interface can be insecure. 可以忽略,实在看的不爽可以在 my.cnf 中 [mysqldump] 下面增加

[mysqldump]
user=myuser
password=mypassword

☞ 添加定时任务

  执行 crontab -e 进入编辑页面,然后指定执行时间以及执行程序, 00 02 * * * /usr/local/backup/backup.sh 每天凌晨 2 点执行 /usr/local/backup 下 backup.sh 脚本。使用 crontab -l 可以查看写好的定时任务;使用 service crond restart 可以重启定时任务服务。





1.2 Windows 备份远程数据库

☞ 编写脚本

  Windows 备份远程数据库的过程跟 Linux 备份数据库的过程类似,是不过一个是 bat 脚本,一个是 sh 脚本。替换下面的 MySQL 安装目录,用户名,密码,远程IP,远程端口,数据库名以及存放备份文件的目录。直接双击运行 bat 脚本进行测试,依然有些执行备份会提示 Warning: Using a password on the command line interface can be insecure.

@echo off
"MySQL bin 目录\mysqldump" -ux -px -h IP -P port database > "存放目录\wise_%date:~0,4%-%date:~5,2%-%date:~8,2%.sql"
@echo on

☞ 添加定时任务

  在计算机关机中选择任务计划程序,创建一个任务,定时触发执行写好的脚本即可。
使用脚本定时备份 MySQL 数据库_第1张图片

你可能感兴趣的:(运维)