二进制日志:(多个线程会争用,可以首先写到缓冲区中)
记录了当前服务器的数据修改和有潜在可能性影响数据修改的语句
默认在数据目录下,通常情况下为mysql-bin
[[email protected] data]# file mysql-bin.000001 mysql-bin.000001: MySQL replication log 复制日志
可以通过mysqlbinlog命令来查看
时间记录 time
偏移位置 position
MySQL > show master status 显示主服务器状态 查看当前使用的二进制日志和下一个事件开始时的基于的位置 MySQL [(none)]> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 107 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
日志滚动:
1、可以按照大小定义
2、可以按照时间定义
3、重启mysql服务器
4、执行flush logs(手动滚动)
查看当前正在使用的二进制日志
MariaDB [(none)]> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 1043 | | mysql-bin.000002 | 245 | | ...............3 | 245 | +------------------+-----------+ 2 rows in set (0.00 sec)
二进制日志的功用
即时点(时间点)恢复:
复制:
[[email protected] data]# file mysql-bin.index mysql-bin.index: ASCII text [[email protected] data]# cat mysql-bin.index ./mysql-bin.000001 ./mysql-bin.000002 ./mysql-bin.000003 ./mysql-bin.000004
清除二进制日志
Mysql > help purge PURGE { BINARY | MASTER } LOGS { TO ‘log_name‘ | BEFORE datetime_expr(某个时间之前) }
查看MySQL的二进制日志
mysql > help SHOW BINLOG EVENTS; mysql > SHOW BINLOG EVENTS; MariaDB [(none)]> show binlog events\G *************************** 1. row *************************** Log_name: mysql-bin.000001 Pos: 4 Event_type: Format_desc Server_id: 1 End_log_pos: 245 Info: Server ver: 5.5.36-MariaDB-log, Binlog ver: 4
service-id:服务器身份标识
(避免重复执行mysql二进制日志中‘修改‘类的语句)
MySQL 记录二进制日志的格式
MariaDB [(none)]> show variables like ‘binlog_format‘; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set (0.00 sec)
基于语句:statement
基于行(数据):row
update tb1 set salary=salary+1000; --> 数据量很大
混合模式:mixed
指定从那个位置开始读取
MariaDB [(none)]> show binlog events in ‘mysql-bin.000001‘ from 591\G
也可以使用
[[email protected] data]# mysqlbinlog --start-position=24223 mysql-bin.000001
mysqlbinlog命令(客户端命令)
--start-time --stop-time --start-position --stop-position
二进制日志文件内容格式
事件发生的日期和时间
服务器ID
事件结束位置
事件的类型
原服务器生成此事件时的线程ID号 MySQL [(none)]> show processlist;
语句时间戳和写入二进制文件的时间差,单位为秒
错误代码,0表示正常执行
事件内容
事件位置(相当于下一事件的开始位置)
MySQL [(none)]> show global variables like ‘%log%‘; +-------------------------------------------------------------------------------+ | log_bin = {ON|OFF};还可以是一个文件路径 | | log_bin_trust_function_creators 是否阻止任何存储函数 | | sql_log_bin = {ON|OFF} 当前会话是否将二进制文件录入进二进制文件 | | sql_log_off 是否将一般查询日志记入查询日志 | | sync_binlog 同步缓冲中的二进制到硬盘的时间,0不基于时间同步,只在事件提交时同步 | | binlog_format = {|statement|row|mixed} | | max_binlog_cache_size mysql二进制日志的缓冲区大小,仅用于缓存事务类的语句 | | max_binlog_stmt_cache_size 语句缓冲区大小,即事务类和非事务类公用的大小 | | max_binlog_size 二进制日志文件的上限,单位为字节 (超过上限会滚动) | | +-------------------------------------------------------------------------------+ 建议:切勿将二进制日志与数据文件放在同一设备
事先做好规划
[[email protected] data]# mkdir /mysql/binlog [[email protected] data]# vim /etc/my.cnf log-bin=/mysql/binlog/master-bin [[email protected] data]# chown -R mysql:mysql /mysql/binlog/ 重启mysqld 服务器 [[email protected] data]# cd /mysql/binlog/ [[email protected] binlog]# ls master-bin.000001 master-bin.index
可以临时通过sql_log_bin来控制二进制的写入
中继日志:(跟主从复制相关)
对于非从服务器,中继日志没有启用
relay_log 指明一个文件路径
relay_log_index
relay_log_purge = {ON|OFF} 是否自动清理不在需要的中继日志
relay_log_space_limit 中继大小是否限制