mysql-bin_MySQL - binlog日志简介及设置

基本概念

binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undo log是完全不同的日志;其主要是用来记录对mysql数据更新或潜在发生更新的SQL语句,记录了所有的DDL和DML(除了数据查询语句)语句,并以事务的形式保存在磁盘中,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册 5.1.24版)。

作用主要有:

复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves并回放来达到master-slave数据一致的目的

数据恢复:通过mysqlbinlog工具恢复数据

增量备份

二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。

日志管理

开启binlog

修改配置文件 my.cnf

配置 log-bin 和 log-bin-index 的值,如果没有则自行加上去。

log-bin=mysql-bin

log-bin-index=mysql-bin.index

这里的 log-bin 是指以后生成各 Binlog 文件的前缀,比如上述使用master-bin,那么文件就将会是master-bin.000001、master-bin.000002 等。

log-bin-index 则指 binlog index 文件的名称,这里我们设置为master-bin.index,可以不配置。

命令查看配置

binlog开启后,可以在配置文件中查看其位置信息,也可以在myslq命令行中查看:

mysql> show variables like '%log_bin%';

+---------------------------------+---------------------------------------------+

| Variable_name | Value |

+---------------------------------+---------------------------------------------+

| log_bin | ON |

| log_bin_basename | D:\Program Files\MySQL\data\mysql-bin |

| log_bin_index | D:\Program Files\MySQL\data\mysql-bin.index |

| log_bin_trust_function_creators | OFF |

| log_bin_use_v1_row_events | OFF |

| sql_log_bin | ON |

+---------------------------------+---------------------------------------------+

6 rows in set (0.07 sec)

查看binlog文件列表

mysql> show binary logs;

+------------------+-----------+-----------+

| Log_name | File_size | Encrypted |

+------------------+-----------+-----------+

| mysql-bin.000001 | 202 | No |

| mysql-bin.000002 | 2062 | No |

+------------------+-----------+-----------+

2 rows in set (0.07 sec)

binlog文件开启binlog后,会在数据目录(默认)生产host-bin.n(具体binlog信息)文件及host-bin.index索引文件(记录binlog文件列表)。当binlog日志写满(binlog大小max_binlog_size,默认1G),或者数据库重启才会生产新文件,但是也可通过手工进行切换让其重新生成新的文件(flush logs);另外,如果正使用大的事务,由于一个事务不能横跨两个文件,因此也可能在binlog文件未满的情况下刷新文件。

查看日志状态

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000002 | 2062 | | | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.08 sec)

显示正在写入的二进制文件,及当前position

刷新日志

mysql> flush logs;

Query OK, 0 rows affected (0.12 sec)

mysql> show binary logs;

+------------------+-----------+-----------+

| Log_name | File_size | Encrypted |

+------------------+-----------+-----------+

| mysql-bin.000001 | 202 | No |

| mysql-bin.000002 | 2109 | No |

| mysql-bin.000003 | 155 | No |

+------------------+-----------+-----------+

3 rows in set (0.07 sec)

自此刻开始产生一个新编号的binlog日志文件

每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;

重置(清空)所有binlog

你可能感兴趣的:(mysql-bin)