二进制日志
记录导致数据改变或潜在导致数据改变的SQL语句;
功能:用于通过“重放”日志文件中的事件来生成数据副本;
而且更重要的是这个SQL语句在文件中保存是以二进制格式保存的而非是文本类型保存
SHOW {BINARY | MASTER} LOGS:查看mariadb自行管理使用中的二进制日志文件列表;
SHOW MASTER STATUS:查看使用中的二进制日志文件;
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
二进制日志记录格式:
基于“语句”记录:startement
基于“行”记录:row
混合模式:mixed,让系统自行判定该基于哪种方式进行;
要记录精确数据使用哪种方式:
基于“行”,记录数据的
基于“语句”,记录语句的
基于行会产生较大的数据量
混合模式,应用折中、语句不会产生混淆,不会导致两次记录、两次执行数据不一样,就基于语句并且节约空间,否则就基于行
二进制日志文件的构成:
两类文件
日志文件:mysql-bin.文件名后缀,二进制
索引文件:mysql-bin.index,文本
mysql-bin.index:是用来追踪mysql或mariadb正在使用中的或者是我们仍然在追踪中可用二进制日志文件序列有哪些
服务器变量:
sql_log_bin=ON|OFF:是否记录二进制日志;
log_bin=/PATH/TO/BIN_LOG_FILE:记录的文件位置;通常为ON;二进制日志默认通过滚动方式来进行记录的
binlog_format=STATEMENT|ROW|MIXED:二进制日志记录的格式;
max_binlog_size=1073741824:单个二进制日志文件的最大体积,默认为1G,
注意:
1、到达最大值之后自动会滚动
2、文件达到上限的大小未必为指定的精确值
sync_binlog=1|0:设定是否启动二进制日志同步功能:
mysqlbinlog:客户端命令工具
mysqlbinlog [options] log_file
--start-position
从指定起始号开始显示:
[root@node7 /data/mysql]#mysqlbinlog --start-position=499 mysql-bin.000002
--stop-position
从指定位置开始到指定结束位置
[root@node7 /data/mysql]#mysqlbinlog --start-position=328 --stop-position=457 mysql-n.000002
--start-datetime=
--stop-datetime=
时间格式:
YYYY-MM-DD hh:mm:ss
二进制日志事件的格式
# at 499
#181014 21:30:29 server id 1 end_log_pos 604 CRC32 0x5c77d4d7 Query thread_id=1 exec_time=0 error_code=0
use `mydb`/*!*/;
SET TIMESTAMP=1539523829/*!*/;
create table tb1(id int,name char(30))
/*!*/;
事件的起始位置: at 499
事件发生的日期和时间: 181014 21:30:29
事件发生的服务器标识: server id 1
事件的结束位置: end_log_pos 604
事件的类型: Query
事件发生时所在服务器执行此事件的线程的id:thread_id=1
语句的时间戳与将其写入二进制文件中的时间差;exec_time=0
错误代码: error_code=0
事件内容:
use `mydb`/*!*/;
SET TIMESTAMP=1539523829/*!*/;
create table tb1(id int,name char(30))
/*!*/;
GTID:全局事务ID号(global transaction id):
专属属性:GTID
说明在同一个复制集群中,每一个服务器上执行任何一个事务,都有一个唯一的标识符、无论是执行过多少个事务、在本次集群运行过程中一定不会有任何其它事务与当前事务重名的
--------------------------------------------------------------------------------------------------------------------------------------------------------
查看数据库日志的操作:
使用file命令来查看mysql-bin.000001 为哪个类型的文件,不能使用cat去查看mysql-bin.000001文件否则显示的结构为乱码
[root@node7 /data/mysql]#file mysql-bin.000001
mysql-bin.000001: MySQL replication log
查看当前mysql服务器中可管理的二进制日志文件有哪些
MariaDB [hellodb]> show binary logs;
+-------------------------+-------------+
| Log_name | File_size |
+------------------------+---------------+
| mysql-bin.000001 | 1675 |
| mysql-bin.000002 | 15764 |
| mysql-bin.000003 | 3429 |
| mysql-bin.000004 | 740 |
| mysql-bin.000005 | 10606 |
| mysql-bin.000006 | 26983604 |
| mysql-bin.000007 | 6098 |
+------------------------+---------------+
也可使用show master logs查看,跟show binary logs是一样的
MariaDB [hellodb]> show master logs;
+------------------------+----------------+
| Log_name | File_size |
+------------------------+----------------+
| mysql-bin.000001 | 1675 |
| mysql-bin.000002 | 15764 |
| mysql-bin.000003 | 3429 |
| mysql-bin.000004 | 740 |
| mysql-bin.000005 | 10606 |
| mysql-bin.000006 | 26983604 |
| mysql-bin.000007 | 6098 |
+------------------------+----------------+
查看当前系统上正在使用的二进制日志文件
查看二进制日志文件的事件
字段解释:
Log_name : 日志文件名
Pos: 起始点
Event_type: 事件的类型
Server_id: 服务器编号
End_log_pos: 结束位置
Info: 记录事件本身的内容