mysql定时全量备份、增量备份
第一步 先建好备份目录、shell文件
mkdir /var/local/mysqlfullbackup #新建数据全量备份所在目录
mkdir /var/log/mysqllog #新建数据增量备份所在目录
#修改目录所属组和用户
chown -R mysql:mysql /var/local/mysqlfullbackup
chown -R mysql:mysql /var/log/mysqllog
touch /usr/local/bin/mysql_data_fullbackup.sh #增加全量备份shell
chmod +x /usr/local/bin/mysql_data_fullbackup.sh #增加脚本的执行权限
touch /usr/local/bin/mysql_binlog_flush.sh #增加增量备份shell
chmod +x /usr/local/bin/mysql_binlog_flush.sh #增加脚本的执行权限
第二步 修改my.cnf
这里只列出了所需要的参数,其它参数,读者自行添加
[mysqld] # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0
#中间省略
#全量备份目录 #mysqlbackup=/var/local/mysqlfullbackup #二进制日志文件目录 log_bin=/var/log/mysqllog/binlog server-id=100 # 安全性考虑 [client] host=localhost user=账户 password=密码 #......省略......
#!includedir /etc/my.cnf.d
修改完之后,重启服务,使其生效
第三步 写shell脚本(简单写法)
① 全局变量脚本
mysql_data_fullbackup.sh
#!/bin/bash #description: mysql-data automatically backup script # 文件名为100mysql+日期.sql backupDatabase=100mysql fileName=${backupDatabase}`date +"%Y-%m-%d_%H:%M:%S"` # 定义baseDir变量 baseDir=/var/local/mysqlfullbackup/ # 备份数据库 mysqldump --defaults-extra-file=/etc/my.cnf --all-databases --flush-logs --delete-master-logs --single-transaction -R > ${baseDir}${fileName}.sql # --defaults-extra 会读取 my.cnf 账户和密码
# --delete-master-logs 删除前面的二进制备份
# -R 备份存储过程 # 压缩 #tar -zcvf ${baseDir}${fileName}.sql.tar.gz ${baseDir}${fileName}.sql # 删除刚刚备份的sql文件,留下压缩的 #rm -f ${baseDir}${fileName}.sql; # 删除7天前备份的数据,只保留一星期内的数据 #find ${baseDir} -mtime +7 -name "${backupDatabase}*.tar.gz" -exec rm -rf {} \;
②增量备份
mysql_binlog_flush.sh
#!/bin/bash #description: mysql-data automatically backup script # 刷新二进制日志 mysqladmin --defaults-extra-file=/etc/my.cnf flush-logs;
③先试着运行一下,看是否成功
./mysql_data_fullbackup.sh
如果执行.sh脚本时,报错 " /bin/bash^M: 坏的解释器:没有那个文件或目录”,这是因为 .sh文件是从windows拷贝过来的,所以多了\r,执行:
sed -i 's/\r$//' mysql_data_fullbackup.sh
会把 mysql_data_fullbackup.sh 中的\r 替换成空白,再次执行则成功!
如果运行成功没问题,则操作第四步
第四步 添加定时任务
读者如不了解Linux的定时任务,可以自行搜索 crontab
crontab -e
0 18 * * 5 /usr/local/bin/mysql_data_fullbackup.sh # 每个礼拜五的晚上六点 运行该脚本,全量备份一次 0 8 * * 1-5 /usr/local/bin/mysql_binlog_flush.sh # 礼拜一到礼拜五,每天早上8点,运行脚本,刷新增量备份
第五步 加载配置
service crond reload //重新载入配置
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond status //查看服务状态
最后
到时间点后,去对应的目录,看是否有新的备份文件,有则代表配置成功了
备注
show variables like '%dir%'; -- 查看文件目录
show variables like 'general%'; -- 查看运行日志
show variables like '%log_bin%'; -- 查看二进制日志