1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql 定时全量备份和增量备份

mysql 定时全量备份和增量备份

时间:2022-06-26 15:20:17

相关推荐

mysql 定时全量备份和增量备份

最近需要对mysql进行定时备份,写一篇备忘

1. 创建备份目录

目录说明:

/data/backup/mysql : 备份文件存放目录/data/backup : 脚本存放目录

mkdir -p /data/backup/mysql

cd /data/backup

2.创建全量备份脚本文件

vim mysql_backup.sh

mysqldump 语法说明:

mysqldump [options] –u 用户名 -p 密码 数据库名 > 备份的文件-R 导出 函数和存储过程-E 导出事件-A 备份所有数据库-d 备份表结构-t 备份表数据-B 同时备份多个数据库,例如:-B db1 db2 db3-l 指定表上锁-x 所有表上锁–single-transaction 不锁表备份,只支持innodb 优先级大于–master-data–master-data 记录binlog同时锁表 –master-data = 1 binlog 记录不加注释 =2 加注释–defaults-extra-file 加载指定配置文件和所有默认需要加载配置文件–defaults-file 加载指定配置文件–flush-logs 刷新binlog日志,增量备份必要条件

#!/bin/bash#用户、密码写在配置文件中所以此处不配置#db_user='root'#db_password=`cat /data/www/mysql_password`db_name='数据库名称'backup_dir='/data/backup/mysql/'current_time=$(date +'%Y-%m-%d_%H:%M:%S')filepath=$backup_dir$current_time'.sql.gz'echo '开始导出数据库...'# 下面的意思是 加载/data/backup/f及默认配置文件 导出函数、存储过程、事件,刷新binlog#,binlog加注释同时全局锁表,根据自身实际情况进行配置mysqldump --defaults-extra-file=/data/backup/f -R -E --flush-logs --master-data=2 $db_name | gzip > $filepathecho '导出成功,文件名为: '$filepath

chmod +x ./mysql_backup.sh

3.新建配置文件

vim f

#mysql 配置导入参数[mysql]host=127.0.0.1user=rootpassword='root'#mysqldump 配置导出参数[mysqldump]#允许导出的文件大小上限#max_allowed_packet = 400Mhost=127.0.0.1user=rootpassword='root'

4.开启binlog

查找f

find / -name f

vim /etc/f

加入

server_id = 2

log_bin = mysql-bin

重启mysql服务

systemctl restart mysqld

查看是否开启

show variables like ‘log_bin%’;

5.导出测试

sh ./mysql_backup.sh

ll ./mysql

6.创建导入脚本文件

cd /data/backup

vim mysql_restore.sh

#!/bin/bashif [ -z $1 ] || [ ! -f $1 ]then echo "请输入sql压缩文件(*.sql.gz)" exit 1fidb_name='test_backup'base_dir='/data/backup/mysql/'gz_sql_file=`basename $1`file_ext=${gz_sql_file##*.}if [ $file_ext != 'gz' ]then echo '文件格式不正确,请输入 .sql.gz 文件' exit 1fisql_file=${gz_sql_file%.*}echo '解压文件中...'gzip -dc $base_dir$gz_sql_file > $base_dir$sql_fileecho '解压完成.'echo '开始导入数据库...'mysql --defaults-extra-file=/data/backup/f $db_name < $base_dir$sql_fileif [ -f $base_dir$sql_file ]then echo '删除临时文件.' rm -f $base_dir$sql_filefiecho '导入完成.'

chmod +x ./mysql_restore.sh

7.导入测试

sh ./mysql_restore.sh ./mysql/-06-04_091700.sql.gz

出现This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA

set global log_bin_trust_function_creators=TRUE;

8.创建增量备份脚本文件

cd /data/backup

vim mysql_increment_backup.sh

注意下面用到的文件和目录不能为空

#!/bin/bashbackupDir=/data/backup/increment_backup#备份时复制mysql-bin.00000*的目标目录mysqlDir=/var/lib/mysql#mysql的数据目录logFile=/data/backup/log_file/backup.logBinFile=/var/lib/mysql/mysql-bin.index#mysql的index文件路径,放在数据目录下的mysqladmin -uroot -proot flush-logs#这个是用于产生新的mysql-bin.00000*文件# wc -l 统计行数# awk 简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。Counter=`wc -l $BinFile |awk '{print $1}'`NextNum=0#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的for file in `cat $BinFile`do base=`basename $file` echo $base #basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./ NextNum=`expr $NextNum + 1` if [ $NextNum -eq $Counter ] then echo $base skip! >> $logFile else dest=$backupDir/$base if(test -e $dest) #test -e用于检测目标文件是否存在,存在就写exist!到$logFile去 then echo $base exist! >> $logFile else cp $mysqlDir/$base $backupDir echo $base copying >> $logFile fi fidoneecho `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup success! >> $logFile

chmod +x ./mysql_increment_backup.sh

9.创建清理备份脚本

vim remove_backup.sh

#/bin/bash# 删除30天前的全量备份find /data/backup/mysql -type f -mtime +30 | xargs rm -f

chmod +x ./remove_backup.sh

10.定时任务介绍

crontab 语法说明:

-e 编辑内容-l 查看内容

定时配置格式为 ******

代表任何时间段,5个*,从左至右分别是:

分 取值范围0-59时 取值范围0-23天 取值范围1-31年 取值范围1-12周 取值范围0-6

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

查看crontab服务状态:service crond status

启动crontab服务:service crond start

停止crontab服务:service crond stop

查看crontab服务是否已设置为开机启动,执行命令:ntsysv

加入开机自动启动:chkconfig crond on

11.配置定时任务

crontab -e

#每周日凌晨1点进行全量备份0 1 * * 0 /data/backup/mysql_backup.sh#每天凌晨2点进行增量备份0 2 * * * /data/backup/mysql_increment_backup.sh# 每天凌晨3点,自动删除30天前的备份0 3 * * * /data/backup/remove_backup.sh

service crond start

ntsysv

chkconfig crond on

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。