网站规划说明书,怎么用切片和dw做网站,网站建设与管理作业,郑州做网站的公司排名mysql的全量备份与增量备份全量备份#xff1a;可以使用mysqldump直接备份整个库或者是备份其中某一个库或者一个库中的某个表。增量备份#xff1a;增量备份是针对于数据库的bin-log日志进行备份的#xff0c;需要开始数据库的bin-log日志。增量备份是在全量的基础上进行操… mysql的全量备份与增量备份全量备份可以使用mysqldump直接备份整个库或者是备份其中某一个库或者一个库中的某个表。增量备份增量备份是针对于数据库的bin-log日志进行备份的需要开始数据库的bin-log日志。增量备份是在全量的基础上进行操作的。增量备份主要是靠mysql记录的bin-log日志。可以把二进制日志保存成每天的一个文件。生产环境建议一周或者三天进行一次全量备份一天一次增量备份。 首先配置下mysql增量备份server-id 1log_bin /var/log/mysql/mysql-bin.logbinlog-ignore-db sys, mysql, information_schema, performance_schema#设置日志格式binlog_format mixed#设置日志路径注意路经需要mysql用户有权限写log-bin /data/mysql/logs/mysql-bin.log#设置binlog清理时间expire_logs_days 7#binlog每个日志文件大小max_binlog_size 100m#binlog缓存大小binlog_cache_size 4m#最大binlog缓存大小max_binlog_cache_size 512minnodb_buffer_pool_size64minnodb_thread_concurrency 8 1.MySQLdump增量备份假定星期日下午1点执行全量备份适用于MyISAM存储引擎。[roottest-huanqiu ~]# MySQLdump --lock-all-tables --flush-logs --master-data2 -u root -p test backup_sunday_1_PM.sql对于InnoDB将--lock-all-tables替换为--single-transaction--flush-logs为结束当前日志生成新日志文件--master-data2 选项将会在输出SQL中记录下完全备份后新日志文件的名称用于日后恢复时参考例如输出的备份SQL文件中含有CHANGE MASTER TO MASTER_LOG_FILE’MySQL-bin.000002′, MASTER_LOG_POS106;2.MySQLdump增量备份其他说明如果MySQLdump加上–delete-master-logs 则清除以前的日志以释放空间。但是如果服务器配置为镜像的复制主服务器用MySQLdump –delete-master-logs删掉MySQL二进制日志很危险因为从服务器可能还没有完全处理该二进制日志的内容。在这种情况下使用 PURGE MASTER LOGS更为安全。每日定时使用 MySQLadmin flush-logs来创建新日志并结束前一日志写入过程。并把前一日志备份例如上例中开始保存数据目录下的日志文件 MySQL-bin.000002 , ...1.恢复完全备份mysql -u root -p backup_sunday_1_PM.sql2.恢复增量备份mysqlbinlog MySQL-bin.000002 … | MySQL -u root -p注意此次恢复过程亦会写入日志文件如果数据量很大建议先关闭日志功能结合Linux的cron命令实现定时备份比如需要在每天凌晨1:30备份某个主机上的所有数据库并压缩dump文件为gz格式30 1 * * * mysqldump -u root -pPASSWORD --all-databases | gzip /mnt/disk2/database_date %m-%d-%Y.sql.gzmysqldump全量备份mysqlbinlog二进制日志增量备份1从mysqldump备份文件恢复数据会丢失掉从备份点开始的更新数据所以还需要结合mysqlbinlog二进制日志增量备份。首先确保已开启binlog日志功能。在my.cnf中包含下面的配置以启用二进制日志[mysqld]log-binmysql-bin2mysqldump命令必须带上--flush-logs选项以生成新的二进制日志文件mysqldump --single-transaction --flush-logs --master-data2 backup.sql其中参数--master-data[0|1|2]0: 不记录1记录为CHANGE MASTER语句2记录为注释的CHANGE MASTER语句 下面分享一下自己用过的mysqldump全量和增量备份脚本应用场景1增量备份在周一到周六凌晨3点会复制mysql-bin.00000*到指定目录2全量备份则使用mysqldump将所有的数据库导出每周日凌晨3点执行并会删除上周留下的mysq-bin.00000*然后对mysql的备份操作会保留在bak.log文件中。脚本实现1全量备份脚本假设mysql登录密码为123456注意脚本中的命令路径#!/bin/bash
# Program
# use mysqldump to Fully backup mysql data per week!
# History
# Path
todaydate %Y%m%d
whichdaydate -d $today %w
mondaydate -d $today -$[${whichday}-1] days %Y%m%d
Date$monday
BakDir/home/mysql/backup/$Date
LogFile/home/mysql/backup/bak.log
Begindate %Y年%m月%d日 %H:%M:%S
if [ ! -d $BakDir ];thenmkdir -p $BakDir mkdir -p $BakDir/daily
fi
cd $BakDir
DumpFile$Date.sql
GZDumpFile$Date.sql.tgz
mysqldump -uroot -phello123456 --quick --events --databases gaoke --flush-logs --delete-master-logs --single-transaction $DumpFile
/bin/tar -zvcf $GZDumpFile $DumpFile
/bin/rm $DumpFile
Lastdate %Y年%m月%d日 %H:%M:%S
echo 开始全量备份:$Begin 结束:$Last $GZDumpFile SUCC $LogFile
cd $BakDir/daily
/bin/rm -f *
如果备份多个数据库那么mysqldump -u root -p --databases mysql stady /opt/mysql-stady.sql2增量备份脚本脚本中mysql的数据存放路径是/home/mysql/data具体根据自己的实际情况进行调整#!/bin/bash
# Program
# use cp to backup mysql data everyday!
# History
# Path
todaydate %Y%m%d
whichdaydate -d $today %w
mondaydate -d $today -$[${whichday}-1] days %Y%m%d
Date$monday
BakDir/home/mysql/backup/$Date/daily # //增量备份时复制mysql-bin.00000*的目标目录提前手动创建这个目录
BinDir/var/lib/mysql # //mysql的数据目录
LogFile/home/mysql/backup/bak.log
BinFile$BinDir/mysql-bin.index # //mysql的index文件路径放在数据目录下的
mysqladmin -uroot -phello123456 flush-logs #这个是用于产生新的mysql-bin.00000*文件
Counterwc -l $BinFile |awk {print $1}
NextNum0
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的
for file in cat $BinFile
dobasebasename $file#basename用于截取mysql-bin.00000*文件名去掉./mysql-bin.000005前面的./NextNumexpr $NextNum 1if [ $NextNum -eq $Counter ]thenecho $base skip! $LogFileelsedest$BakDir/$baseif(test -e $dest)#test -e用于检测目标文件是否存在存在就写exist!到$LogFile去thenecho $base exist! $LogFileelseecho $base copying $LogFilecp $BinDir/$base $BakDirecho date %Y年%m月%d日 %H:%M:%S $base 新的增量备份 Bakup succ! $LogFilefifi
done
3设置crontab任务执行备份脚本。先执行的是增量备份脚本然后执行的是全量备份脚本[roottest-huanqiu ~]# crontab -e
#每个星期1凌晨3:00执行完全备份脚本
0 3 * * 1 /bin/bash -x /root/mysqlbackup/full_backup.sh /dev/null 21
#周2-7凌晨3:00做增量备份
0 3 * * 2-7 /bin/bash -x /root/mysqlbackup/binlog_backup.sh /dev/null 21
4手动执行上面两个脚本测试下备份效果[roottest-huanqiu backup]# pwd
/home/mysql/backup
[roottest-huanqiu backup]# mkdir daily
[roottest-huanqiu backup]# ll
total 4
drwxr-xr-x. 2 root root 4096 Nov 29 11:29 daily
[roottest-huanqiu backup]# ll daily/
total 0
先执行增量备份脚本
[roottest-huanqiu backup]# sh /root/Mysql-DailyBak.sh
[roottest-huanqiu backup]# ll
total 8
-rw-r--r--. 1 root root 121 Nov 29 11:29 bak.log
drwxr-xr-x. 2 root root 4096 Nov 29 11:29 daily
[roottest-huanqiu backup]# ll daily/
total 8
-rw-r-----. 1 root root 152 Nov 29 11:29 mysql-binlog.000030
-rw-r-----. 1 root root 152 Nov 29 11:29 mysql-binlog.000031
[roottest-huanqiu backup]# cat bak.log
mysql-binlog.000030 copying
mysql-binlog.000031 copying
mysql-binlog.000032 skip!
2016年11月29日 11:29:32 Bakup succ!
然后执行全量备份脚本
[roottest-huanqiu backup]# sh /root/Mysql-FullyBak.sh
20161129.sql
[roottest-huanqiu backup]# ll
total 152
-rw-r--r--. 1 root root 145742 Nov 29 11:30 20161129.sql.tgz
-rw-r--r--. 1 root root 211 Nov 29 11:30 bak.log
drwxr-xr-x. 2 root root 4096 Nov 29 11:30 daily
[roottest-huanqiu backup]# ll daily/
total 0
[roottest-huanqiu backup]# cat bak.log
mysql-binlog.000030 copying
mysql-binlog.000031 copying
mysql-binlog.000032 skip!
2016年11月29日 11:29:32 Bakup succ!
开始:2016年11月29日 11:30:38 结束:2016年11月29日 11:30:38 20161129.sql.tgz succ
5.增量备份恢复mysqlbinlog --no-defaults --start-datetime18-07-03 21:56:11 --stop-datetime18-07-03 21:56:04 mysql-bin.000003 | mysql -u root -p #结束节点