MySQL备份
Binlog日志 Binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息。 例如,更改数据库库表和更改表内容的SQL语句都会记录到binlog里,但是对库表等内容的查询则不会记录到日志中。 Binlog记录的语句类型: * DML:insert update delete * DDL:create drop alter truncate * DCL:grant revoke 查看MySQL是否开启的Binlog功能 登录数据库后,查看binlog相关参数: mysql> show variables like '%log_bin%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin | OFF | | log_bin_basename
Binlog日志
Binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息。
例如,更改数据库库表和更改表内容的SQL语句都会记录到binlog里,但是对库表等内容的查询则不会记录到日志中。
Binlog记录的语句类型:
查看MySQL是否开启的Binlog功能
登录数据库后,查看binlog相关参数:
可以看到目前binlog是关闭状态的;在此状态下,对数据库的任何操作都不会被记录,所有的备份功能都依赖于用户使用
mysqldump
命令进行手动备份。开启binlog功能
需要修改MySQL配置文件
/etc/my.cnf
来实现:重启mysqld后,再通过
show variables like '%log_bin%';
查看,可以发现log_bin已经是开启状态。binlog常用命令
查看binlog日志文件信息
该命令会显示binlog的日志列表和每个日志的文件大小。
刷新新日志文件
每次执行该命令,当前正在使用的binlog日志会被终止使用,并新建一个binlog日志用于新的记录。
查看当前正在使用的日志及其相关信息
查看日志的记录内容(事件)
例如:
可以看到一个创建数据库的操作被记录了下来。
解码binlog日志
由于binlog是二进制文件,所以我们是不能直接查看日志文件的;MySQL提供了
mysqlbinlog
命令,可以对日志文件进行解码供用户阅读。实践:模拟使用binlog进行数据恢复
创建测试数据
可以看出现在已经有了很多记录。
模拟:数据库误删除
查看binlog日志的起点和终点pos值
起点:154;终点:2122
使用
mysqlbinlog
命令,将这段的记录导出登录MySQL数据库,临时关闭binlog功能,防止数据恢复时重复写入记录。
使用
source
命令将sql文件重新写入最后重新开启binlog
set sql_log_bin=0;
跨日志文件恢复数据
假如有5个binlog日志文件,从mysql-bin.000001到mysql-bin.000005,其中被删除的日志的起始pos为mysql-bin.000001的225,终止pos为mysql-bin.000005的1779。
那么其实回复方法是一样的:
mysqlbinlog
命令在处理多个日志文件时会默认应用startPos的值为第一个日志文件,stopPos的值为最后一个日志文件。最后在数据库中source这个sql文件就可以完成数据恢复了;不要忘记在恢复前临时关闭binlog记录功能。
基于GTID的binlog
什么是基于GTID的binlog
GTID是从 MySQL 5.6.5 开始新增的复制方式,通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID;这种方式强化了数据库的主备一致性,故障恢复以及容错能力。
在原来基于二进制日志的复制中,从库需要告知主库要从哪个偏移量pos值进行增量同步,如果指定错误会造成数据的遗漏,从而造成数据的不一致;借助GTID,在发生主备切换的情况下,MySQL的其它从库可以自动在新主库上找到正确的复制位置,这大大简化了复杂复制拓扑下集群的维护,也减少了人为设置复制位置发生误操作的风险。
另外,基于GTID的复制可以忽略已经执行过的事务,减少了数据发生不一致的风险。
什么是事务
事务是用于处理操作量较大的操作。
特性
支持
MySQL中只有Innodb引擎的数据库和表才支持事务
事务作用的语句
事务用来管理 INSERT,UPDATE,DELETE 语句
mysql默认的事务规则
在MySQL数据库中,事务默认是会自动提交的,也就是说,如果没有用 begin ... commit 来显式提交事务的话,MySQL 会认为每一条SQL语句都是一个事务,也就是每一条SQL语句都会自动提交。
GTID的组成
GTID (Global Transaction ID) 是一个已提交事务的编号,并且是一个全局唯一的编号。
GTID由两部分组成:UUID+TID
开启GTID功能
修改配置文件
创建一个测试数据库后,通过
show master status
查看当前日志,可以发现Executed_Gtid_Set字段不再是空白的,其中
f568445a-3cb2-11ee-b227-000c29da9fe9:1
这个值正好的uuid:tid
的格式。事务控制语句
使用SET AUTOCOMMIT=0/1来禁止或者开启自动提交
显示开启一个事务,向t1表中插入数据
可以看出,手动开启事务后,三个insert语句是被当成一组事务来看待的。
基于GTID截取日志
有了gtid之后,再也不用关心日志的开始pos,结束pos了,一个gtid记录,记录一个事务。
使用mysqldump和binlog组合进行数据备份
mysqldump是专门进行数据库备份的命令,通过mysqldump,数据可以被导出为一个SQL文件。
通常我们会使用mysqldump和binlog(GTID)进行组合备份,例如每天晚上0点对数据库进行一次全量备份(mysqldump),在两次备份之间使用binlog进行增量备份。
mysqldump
用法:
参数:
对于数据量比较大的库或有频繁写入操作的库,一般还需要在备份时进行锁表,确保数据一致性;
可以使用-x参数进行锁库或全局锁(取决于是要备份单个库,还是全部数据)。
Read Next
事件源模式和传统数据库方法在数据管理上的优劣分析
对事件源模式和传统数据库方法在应用程序性能影响、性能、扩展性和可靠性的分析;以及云原生环境下数据管理的最佳实践
关于Metrics_server在自托管环境下无法使用的问题
修复kubernetes的metrics server在自托管环境下因缺少CA证书而无法运行的问题。
关于IP、子网掩码、主机位和网络位的计算方法
如何通过子网掩码和掩码位计算一个IP地址的网络地址和可分配的主机位
交换机的工作原理 - 学习、泛洪、转发和过滤
交换机的工作原理,包括学习、泛洪、转发和过滤四个过程;如何使用MAC地址来管理网络数据流,如何通过与设备的互动来建立和更新地址表。