Mariadb/mysql提供了4中不同的日志,分别是错误日志(error.log)、普通日志(general log)、慢日志(slow log)以及二进制日志(binlog)。错误日志记录了系统启动、运行以及停止过程中遇到的一些问题;普通日志记录了Mariadb执行的所有语句以及语句开始执行的时间等信息,用户可以选择性的打开它;慢日志记录了Mariadb所有慢查询的相关信息;而二进制日志则以事件的形式记录了mariadb的库表结构以及表数据的所有变更信息。
Mysql Binlog
binlog的作用
- 复制
在Mariadb/mysql的主从结构中,主库的binlog记录了主库的所有更改操作,从库通过读取主库的binlog,在本地重放获取的binlog,这样从库就拥有和主库相同的数据,达到复制目的。
- 备份恢复
binlog记录了数据库的所有更改信息,所以当Mariadb/mysql发生崩溃的时候,能够以最近备份点作为起点,然后执行在备份点之后产生的binlog中所有事件,实现数据库最大可能的恢复。
- index文件按照书序记录了Mariadb/Mysql使用的所有binlog文件,管理binlog文件。
binlog操作
# 查看binlog
mysql> show binary logs;
# 查看binlog事件
mysql> show binary events;
binlog配置
binlog的配置在mysql的配置文件中,默认的配置文件是/etc/my.cnf
.相关配置项
expire_logs_days = 5 #配置定情清理
log-bin=/var/mysql/mysql-bin # bin log日志路径
binlog_format=ROW
修改完成之后必须重启,才能生效
binlog常用命令
#0 查看日志开启状态 show variables like 'log_%';
mysql> show variables like 'log_%';
+-------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+-------------------------------------------------------------------------------------------------------------------------------------+
| log_bin | ON |
| log_bin_basename | /var/log/mysql/mariadb-bin |
| log_bin_compress | OFF |
| log_bin_compress_min_len | 256 |
| log_bin_index | /var/log/mysql/mariadb-bin.index |
| log_bin_trust_function_creators | OFF |
| log_disabled_statements | sp |
| log_error | |
| log_output | FILE |
| log_queries_not_using_indexes | OFF |
| log_slave_updates | OFF |
| log_slow_admin_statements | ON |
| log_slow_disabled_statements | sp |
| log_slow_filter | admin,filesort,filesort_on_disk,filesort_priority_queue,...,query_cache_miss,tmp_table |
| log_slow_rate_limit | 1 |
| log_slow_slave_statements | ON |
| log_slow_verbosity | |
| log_tc_size | 24576 |
| log_warnings | 2 |
+-------------------------------------------------------------------------------------------------------------------------------------+
19 rows in set (0.05 sec)
# 查看所有日志
mysql> show master logs;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000017 | 104858004 |
| mariadb-bin.000018 | 105248607 |
| mariadb-bin.000019 | 105317664 |
| mariadb-bin.000020 | 105143468 |
| mariadb-bin.000021 | 104857727 |
| mariadb-bin.000022 | 104915425 |
| mariadb-bin.000023 | 94849361 |
+--------------------+-----------+
7 rows in set (0.09 sec)
#查看最新一个binlog日志的编号名称,及其最后一个操作事件结束点 show master status;
mysql> show master status;
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000023 | 94861723 | | |
+--------------------+----------+--------------+------------------+
1 rows in set (0.05 sec)
# 刷新log日志,立刻产生一个新编号的binlog日志文件,跟重启一个效果 flush logs;
# 清空所有binlog日志 reset master;
# 查看指定binlog文件的内容(show binlog events in 'binname.xxxxx')#
mysql> show binlog events in 'mariadb-bin.000023' limit 4;
+--------------------+-----+-------------------+-----------+-------------+-----------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+--------------------+-----+-------------------+-----------+-------------+-----------------------------------------------------------------------+
| mariadb-bin.000023 | 4 | Format_desc | 1 | 256 | Server ver: 10.3.10-MariaDB-1:10.3.10+maria~bionic-log, Binlog ver: 4 |
| mariadb-bin.000023 | 256 | Gtid_list | 1 | 299 | [0-1-1650762] |
| mariadb-bin.000023 | 299 | Binlog_checkpoint | 1 | 344 | mariadb-bin.000022 |
| mariadb-bin.000023 | 344 | Gtid | 1 | 386 | BEGIN GTID 0-1-1650763 |
+--------------------+-----+-------------------+-----------+-------------+-----------------------------------------------------------------------+
# 获取指定位置binlog的内容(show binlog events from)
Mysqlbinlog方式提取binlog
#a、提取指定的binlog日志
# mysqlbinlog /opt/data/APP01bin.000001
# mysqlbinlog /opt/data/APP01bin.000001|grep insert
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
insert into tb values(2,'jack')
#b、提取指定position位置的binlog日志
mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001
#c、提取指定position位置的binlog日志并输出到压缩文件
mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001 |gzip >extra_01.sql.gz
#d、提取指定position位置的binlog日志导入数据库
mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001 | mysql -uroot -p
#e、提取指定开始时间的binlog并输出到日志文件
mysqlbinlog --start-datetime="2014-12-15 20:15:23" /opt/data/APP01bin.000002 --result-file=extra02.sql
#f、提取指定位置的多个binlog日志文件
mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001 /opt/data/APP01bin.000002|more
#g、提取指定数据库binlog并转换字符集到UTF8
mysqlbinlog --database=test --set-charset=utf8 /opt/data/APP01bin.000001 /opt/data/APP01bin.000002 >test.sql
#h、远程提取日志,指定结束时间
mysqlbinlog -urobin -p -h192.168.1.116 -P3306 --stop-datetime="2014-12-15 20:30:23" --read-from-remote-server mysql-bin.000033 |more
#i、远程提取使用row格式的binlog日志并输出到本地文件
mysqlbinlog -urobin -p -P3606 -h192.168.1.177 --read-from-remote-server -vv inst3606bin.000005 >row.sql