mysql实时增量备份
啟用binlog日志實現對數據的增量備份:
日志存儲位置: /var/lib/mysql/
日志名稱:主機名-bin.000001 或mysqld-bin.000001
binlog日志概述:二進制日志,記錄所有更改數據的操作;默認超過500M自動生成新的日志;
修改主配置文件啟用binlog日志
vim /etc/my.cnf
[mysqld]
log-bin ?(或指定日志名log-bin=x.000001或者指定目錄和文件名log-bin=/logdir/X.000001)
max-binlog-size=200m ? (設置日志最大200m,默認為500m)
:wq
重啟mysql服務,/var/lib/mysql/下會多出一個日志文件1個日志索引文件:
x-bin.000001 ? ?mysql的binlog日志文件
x-bin.index ? ? 記錄當前已有的binlog日志名
mysqlbinlog是mysql日志查看專屬命令
查看binlog日志文件內容: mysqlbinlog ?日志文件名
binlog日志記錄sql語句的方式:
1 根據字符偏移量(pos)
起始字符偏移量 ?--start-positon=數字
結束字符偏移量 ?--stop-position=數字
2 根據時間點(time)
起始時間 ? --start-datetime="yyyy-mm-dd hh:mm:ss"
結束時間 ? --stop-datetime="yyyy-mm-dd hh:mm:ss"
執行binlog日志里的sql語句恢復數據:
mysqlbinlog 選項 ?x-bin.000001 | mysql -uroot -p123456 [數據庫名]
手動生成新的binlog日志文件方式:
1:重啟mysql服務 ? (很少用)
2:mysql> flush logs;
3:?[root@A mysql]# mysql -uroot -p123456 -e "flush logs" ?(引號里可以執行任意sql語句)
4: mysqldump -uroot -p123456 --flush-logs ?數據名 > xxx.sql
清理binlog日志
刪除已有binlog日志
1 刪除指定版本的binlog日志
(1)方式一:mysql> purge master logs to "x-bin.000004"; ? ?(刪除000004之前的日志,x-bin.index同步更新)
(2)方式二: rm -rf x-bin.000001 (x-bin.index不同步更新)
2 刪除所有binlog日志,重建日志; ?mysql> reset master;
編寫腳本allbak.sh每周一對數據做完全備份:00 18 * * 1 /shell/allbak.sh
vim allbak.sh
?#!/bin/bash
?bakdir=/datadir
?dbname=haha
?day=$(date +%F)
?if [ ! -e $bakdir ]
?then mkdir $bakdir
?fi
?mysqldump -uroot -p123456 --flush-logs $dbname > $bakdir/allbak-$day.sql
編寫腳本newbak.sh每周二~日做增量備份(只備份新生成的和沒備份過的binlog日志且正在使用的不備份):不備份最后一個binlog日志 ? 00 18 * * 2-7 /shell/newbak.sh
vim newbak.sh
#!/bin/bash
if [ ! -e /backdir ];then?
?mkdir /backdir
fi
cd ?/var/lib/mysql
for file in `sed '$d' /var/lib/mysql/A-bin.index`
do name=`echo $file | awk -F "/" '{print $2}'`
if [ ! -e /backdir/$name ];then
?cp $name /backdir
fi
done
轉載于:https://blog.51cto.com/liangzai818/1740079
總結
以上是生活随笔為你收集整理的mysql实时增量备份的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 铁路12306app如何购票
- 下一篇: 龙族幻想tony在哪