MYSQL备份-增量备份

msql逻辑备份中,提供了增量备份和差异备份。
增量备份:备份上次备份后,产生的所有数据。
差异备份:备份上次完全备份后,产生的所有数据。

想要使用mysql提供的增量备份,就必须要用到binlog日志

binlog日志:
是二进制日志
记录了除查询之外的所有sql命令
可以用于数据的备份与恢复
可以用于配置mysql主从同步
binlog日志默认没有开启,想要开启binlog日志需要修改配置文件/etc/my.cnf

开启binlog日志:

# 数据库版本不同就会有不同的操作。
# 我使用的mysql版本是8.0.17,不需要手动开启binlog日志
# 默认的日志是:/var/lib/mysql/binlog.xxxx	

vim /etc/my.cnf
[mysqld]
...
server_id=5	#指明id,不能有重复,一般采用主机号
log_bin=/mylog/xxx	#指明了binlog存放的目录为/mysql,日志名为xxx,这个目录的所有者和所有组必须要是mysql,否则无法写入,默认/var/lib/mysql/
max_binlog_size=500m	#指定日志大小,超过500M则重新生成日志。如果binlog开启之后,每当mysql重新启动时也会新产生一个binlog日志文件
...

chown mysql:mysql /mylog	#修改日志目录的所有者

systemctl restart mysqld	#重新启动mysql服务

生成新的binlog日志:

1、重启mysql服务

2、mysql> flush logs	#在登录mysql的状态下输入 flush logs

3、mysql -uroot -p123456 -e ‘flush logs’	#采用非交互式,不需要登录msql
# 使用非交互式访问数据库,mysql -uroot -p123456 -e 'sql命令或者语句'	

4、mysqldump -uroot -p123456 --flush-logs spiderDB > xxx/xxx.sql
# 将spiderDB这个数据库完全备份之后,新产生一个binlog日志,之后的操作都记录在这里

查看binlog日志:

mysql> show master status	#mysql当前使用的binlog日志,在登录mysql中使用命令查询
cat /mylog/xxx.index	#这个文件记录了mysql所有的binlog日志文件

删除binlog日志:

1、使用系统命令rm删除。这种方法用于删除所有的binlog日志和index文件
2、使用mysql提供的命令删除:
	purge master logs to 'binlog日志名'	#删除指定日志之前的所有日志
	reset master 	#清空所有binlog日志,从编号为000001的重新产生

修改日志记录格式:

使用mysqlbinlog查看日志时,默认是看不到执行的sql语句的
binlog日志有三种模式:
	1.row
	2.mixed	#只有这种能看到执行的sql语句
	3.statement
	
查看格式:
mysql> show variables like '%binlog%'
binlog_format

修改格式:
vim /etc/my.cnf
[mysqld]
...
binlog_format='mixed'	#混合模式
...

读取binlog日志:

mysqlbinlog /var/lib/mysql/binlog.000001	#读取名为binlog.000001的日志文件

# at 1317
#191010 20:56:18 server id 1  end_log_pos 1426 CRC32 0x6f81dc24 	Query	thread_id=9	exec_time=0	error_code=0
SET TIMESTAMP=1570712178/*!*/;
insert into user values('3','c')
/*!*/;
# at 1426
#191010 20:56:18 server id 1  end_log_pos 1457 CRC32 0xa2e7032b 	Xid = 20
COMMIT/*!*/;

如何区分多条sql语句:
1、偏移量:at后面的就是偏移量,两个at之间就是一条sql语句
2、时间点:at下面那一行就是时间点

根据偏移量读取binlog日志:
mysqlbinlog --start-position=1317 --stop-position=1426
# --start-position是起始偏移量,--stop-position是结束偏移量

根据时间点读取binlog日志:
mysqlbinlog --start-datetime='2019-10-10 20:56:18' --stop-datetime='2019-10-10 21:56:18'
# --start-datetime是起始时间,--stop-datetime是结束时间

根据binlog恢复数据:

# 如果插入了很多数据,但是在最后把这些数据都给删除了,
# 那么通过整个binlog日志进行恢复数据明显无法达到恢复数据的效果。
# 因此需要从binlog日志中选择可以让数据恢复的语句。

根据偏移量恢复:
mysqlbinlog --start-position=1317 --stop-position=1426 | mysql -uroot -p123456

根据时间点恢复:
mysqlbinlog --start-datetime='2019-10-10 20:56:18' --stop-datetime='2019-10-10 21:56:18' \
| mysql -uroot -p123456

写总结的第三十五天!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值