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
添加定时任务
在计算机关机中选择任务计划程序,创建一个任务,定时触发执行写好的脚本即可。