mysql的二进制日志

MySQL日志文件系统的组成

  1. 错误日志:记录启动,停止MySQL时出现的问题。
  2. 通用日志:记录建立的客户端连接和执行语句。
  3. 更新日志:记录更改数据的语句。该日志在MySQL5.1中已经不宰使用。
  4. 二进制日志:记录所有更改数据的语句。还用于复制。
  5. 慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不适用索引的查询。
  6. innodb日志:innodb redo log

缺省情况下,所有日志创建于mysqld数据目录中。
可以通过刷新日志,来强制mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。
当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时,则日志被老化。
对于存在MySQL复制的情形下,从复制服务器将维护更多日志文件,被称为接替日志。

查询日志

记录查询语句,日志存储位置:
文件:file
表:table (mysql.general_log)

general_log={ON|OFF}
general_log_file=HOSTNAME.log
log_output={FILE|TABLE|NONE}

慢查询日志

慢查询:运行时间超出指定时长的查询;
long_query_time
存储位置:
文件:FILE
表:TABLE,mysql.slog_log

log_slow_queries={ON|OFF}
slow_query_log={ON|OFF}
slow_query_log_file=
log_output={FILE|TABLE|NONE}
log_slow_filter=admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk
log_slow_rate_limit
log_slow_verbosity

错误日志

记录信息:

  1. mysqld启动和关闭过程 输出的信息;
  2. mysqld运行中产生的错误信息;
  3. event scheduler运行时产生的信息;
  4. 主从复制架构中,从服务器复制线程启动时产生的日志;

log_error=
/var/log/mariadb/mariadb.log|OFF
log_warnings={ON|OFF}

二进制日志

用于记录引起数据改变或存在引起数据改变的潜在可能性的语句(STATEMENT)或改变后的结果(ROW),也可能是二者混合;
功用:“重放”

binlog_format={STATEMENT|ROW|MIXED}
STATEMENT:语句;
ROW:行;
MIXED:混编;

它包含的内容及作用如下:

  • 包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)
  • 包含关于每个更新数据库(DML)的语句的执行时间信息
  • 不包含没有修改任何数据的语句,如果需要启用该选项,需要开启通用日志功能
  • 主要目的是尽可能的将数据库恢复到数据库故障点,因为二进制日志包含备份后进行的所有更新
  • 用于在主复制服务器上记录所有将发送给从服务器的语句
  • 启用该选项数据库性能降低1%,但保障数据库完整性,对于重要数据库值得以性能换完整。有些类似于oracle开启归档模式。

开启二进制日志的方法及属性

使用--log-bin[=file_name]选项或在配置文件中指定log-bin启动时,mysqld写入包含所有更新数据的SQL命令的日志文件。

对于未给出file_name值, 默认名为-bin后面所跟的主机名。

在未指定绝对路径的情形下,缺省位置保存在数据目录下。

每个二进制日志名会添加一个数字扩展名用于日志老化,因此不支持自定义的扩展名,会被mysql数字扩展名动态替换。

若当前的日志大小达到max_binlog_size,则自动创建新的二进制日志。

对于大的事务,二进制日志会超过max_binlog_size设定的值。也即是事务仅仅写入一个二进制日志。 由是可知,二进制日志文件大小接近,其size不是完全相等,这点不同于oracle。

二进制日志文件会有一个对应二进制日志索引文件,该文件包含所有的二进制日志,其文件名与二进制日志相同,扩展名为.index

二进制索引文件通过--log-bin-index[=file_name]选项来指定

RESET MASTER语句将删除所有二进制日志文件,这将影响到从库。也可以用PURGE MASTER LOGS只删除部分二进制文件。

查看二进制日志文件列表:
SHOW MASTER|BINARY LOGS;

查看当前正在使用的二进制日志文件:
SHOW MASTER STATUS;

查看二进制 日志文件中的事件:
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

二进制文件的构成:
两类文件
日志文件:mysql-bin.文件名后缀 二进制格式
索引文件:mysql-bin.index 文本格式

服务器变量:
log_bin=/PATH/TO/BIN_LOG_FILE 记录文件路径
只读变量;
session.sql_log_bin={ON|OFF}
控制某会话中的“写”操作语句是否会被记录于日志文件中;
max_binlog_size=1073741824
sync_binlog={1|0}
binlog_format=

mysqlbinlog:
YYYY-MM-DD hh:mm:ss

--start-datetime=
--stop-datetime=

-j, --start-position=#
--stop-position=#

--user, --host, --password

二进制日志事件格式:
基于语句记录:statement
基于行记录:row
混合模式:mixed,让系统自行判定该基于哪种方式进行

# at 553
#160831 9:56:08 server id 1 end_log_pos 624 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1472608568/!/;
BEGIN
/*!*/;

事件的起始位置:# at 553
事件发生的日期时间:#160831 9:56:08
事件发生的服务器id:ser ver id 1
事件的结束位置:end_log_pos 624
事件的类型:Query
事件发生时所在服务器执行此事件的线程的ID: thread_id=2
语句的时间戳与将其写入二进制日志文件中的时间差:exec_time=0
错误代码:error_code=0
事件内容:SET TIMESTAMP=1472608568/!/;

二进制日志相关演示

启动日志

查看环境

MariaDB [(none)]> show variables like '%version%'
        -> ;
    +-------------------------+---------------------+
    | Variable_name           | Value               |
    +-------------------------+---------------------+
    | innodb_version          | 5.5.52-MariaDB-38.3 |
    | protocol_version        | 10                  |
    | slave_type_conversions  |                     |
    | version                 | 5.5.56-MariaDB      |
    | version_comment         | MariaDB Server      |
    | version_compile_machine | x86_64              |
    | version_compile_os      | Linux               |
    +-------------------------+---------------------+
    7 rows in set (0.01 sec)
    
    MariaDB [(none)]> show variables like '%log_bin%';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin                         | OFF   |--该参数用于设定是否启用二进制日志 
    | log_bin_trust_function_creators | OFF   |
    | sql_log_bin                     | ON    |
    +---------------------------------+-------+
    3 rows in set (0.01 sec)

binary log相关参数

    MariaDB [(none)]> show variables like '%binlog%';
    +-----------------------------------------+----------------------+
    | Variable_name                           | Value                |
    +-----------------------------------------+----------------------+
    | binlog_annotate_row_events              | OFF                  |
    | binlog_cache_size                       | 32768                |
    | binlog_checksum                         | NONE                 |
    | binlog_direct_non_transactional_updates | OFF                  |
    | binlog_format                           | STATEMENT            |
    | binlog_optimize_thread_scheduling       | ON                   |
    | binlog_stmt_cache_size                  | 32768                |
    | innodb_locks_unsafe_for_binlog          | OFF                  |
    | max_binlog_cache_size                   | 18446744073709547520 |
    | max_binlog_size                         | 1073741824           |
    | max_binlog_stmt_cache_size              | 18446744073709547520 |
    | sync_binlog                             | 0                    |
    +-----------------------------------------+----------------------+
    12 rows in set (0.01 sec)

当前mysql服务器数据文件的缺省位置

    MariaDB [(none)]> show variables like '%datadir%';
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | datadir       | /var/lib/mysql/ |
    +---------------+-----------------+
    1 row in set (0.00 sec)

编辑my.cnf来设定binary log日志位置(注,配置二进制日志路径及文件名后,系统变量log_bin被自动置为on)
在编辑配置文件时要把服务停止

[mysqld]
log_bin=/var/log/maria/mariadb.log/binarylog/binlog

[root@localhost ~]# mkdir -p /var/log/maria/mariadb.log/binarylog
[root@localhost ~]# chown -R mysql:mysql  /var/log/maria/mariadb.log/binarylog

切换日志

MariaDB [(none)]> system ls -hltr /var/log/mariadb/binarylog/*
-rw-rw----. 1 mysql mysql 245 Oct 12 22:55 /var/log/mariadb/binarylog/binlog.000001      #日志文件
-rw-rw----. 1 mysql mysql  41 Oct 12 22:55 /var/log/mariadb/binarylog/binlog.index     #索引文件
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 本文转载于: https://www.cnblogs.com/martinzhang/p/3454358.html...
    简单的菜鸟阅读 2,320评论 0 7
  • 日志文件对于一个服务器来说是非常重要的,它记录着服务器的运行信息,许多操作都会写日到日志文件,通过日志文件可以监视...
    时待吾阅读 1,006评论 0 5
  • Mysql 有4种类型的日志:Error Log、Genaral Query Log、 Binary Log 和 ...
    人在码途阅读 16,374评论 2 11
  • 虽然不能恢复百分百,至少能将损失降到最低。 有个问题测试: 主从同步时,主库网络断开,binlog dump线程...
    kun_zhang阅读 3,024评论 0 6
  • MySQL的二进制日志(binary log)是一个二进制文件,主要用于记录修改数据或有可能引起数据变更的MySQ...
    时待吾阅读 1,941评论 0 1