二进制日志:(多个线程会争用,可以首先写到缓冲区中)

    记录了当前服务器的数据修改和有潜在可能性影响数据修改的语句

    默认在数据目录下,通常情况下为mysql-bin

    [root@redhat7 data]# file mysql-bin.000001 
    mysql-bin.000001: MySQL replication log  复制日志


可以通过mysqlbinlog命令来查看

时间记录 time

偏移位置 position

    

wKiom1hbVoajfNDGAACYEEjh4nI581.png-wh_50


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(手动滚动)


wKiom1hbY2fCmsTiAABCmBOMV-s281.png-wh_50       

 


查看当前正在使用的二进制日志

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)


二进制日志的功用

    即时点(时间点)恢复:

    复制:


[root@redhat7 data]# file mysql-bin.index 
mysql-bin.index: ASCII text
[root@redhat7 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 

也可以使用

[root@redhat7 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 二进制日志文件的上限,单位为字节  (超过上限会滚动)             |                |
  +-------------------------------------------------------------------------------+

建议:切勿将二进制日志与数据文件放在同一设备



事先做好规划

[root@redhat7 data]# mkdir /mysql/binlog
[root@redhat7 data]# vim /etc/my.cnf
log-bin=/mysql/binlog/master-bin
[root@redhat7 data]# chown -R mysql:mysql /mysql/binlog/

重启mysqld 服务器

[root@redhat7 data]# cd /mysql/binlog/
[root@redhat7 binlog]# ls
master-bin.000001  master-bin.index


可以临时通过sql_log_bin来控制二进制的写入


wKiom1hbY7Hx1fXmAABZitaGvjc480.png-wh_50


wKioL1hbY7GgSo_rAABdAH63bS4908.png-wh_50



中继日志:(跟主从复制相关)

  对于非从服务器,中继日志没有启用

  relay_log  指明一个文件路径                                       

  relay_log_index 

  relay_log_purge = {ON|OFF} 是否自动清理不在需要的中继日志

  relay_log_space_limit 中继大小是否限制