日志管理
1.错入日志
1.1:作用
mysql启动及工作过程中,状态/报错/警告。
1.2怎么配置?
mysql> select @@log_error;
默认是在datedir=/data/3306/data/hostname.err
####################
vim /etc/my.cnf
log_error=/data/3306/data/mysql.log
重启生效
1.3如何查看错误日志
查看ERROR的上下文
2:二进制日志
2.1作用
数据恢复必备日志
主从复制依赖的日志
2.2怎么配置
2.2.1修改配置文件
vim /etc/my.cnf
server_id=6
log_bin=/data/binlog/mysql-bin
###先别重启
###先创建目录并授权
mkdir -p /data/binlog -p
chown -R mysql.mysql /data/*
###然后重启数据库
#######################
查看二级制数据库的命令
mysqlbinlog mysql-bin.000001
2.3
二进制日志记录了什么?
除了查询类的语句,都会记录
索引数据库变更类的语句
2.3.1记录语句的种类
DDL 数据定义语言
DCL 数据控制语言
DML 数据操作语言
2.3.2不同语句的记录格式说明
select @@binlog_format;
###默认模式是row
DDL,DCL:直接以语句(statement)方式记录
DML语句:insert update delete
SBR : statement ,做什么记录什么
RBR : row 记录数据行的变化
MBR : mixed 自动判断记录模式
######################
SBR和RBR的区别
SBR:statement , 做什么记录什么,记录的就是SQL。可读性强,日志量相对较少。日志记录可能不准确
RBR:记录数据行的变化,默认模式,也是我们推荐的,可读性差,日质量多。日志记录准确
2.3.3 binlog events (二进制日志时间)
1 简介
二进制日志内容以事件为最小记录单元
对于DDL和DCL,一个DDL语句就是一个事件。
对于DML(标准的事务语句):只记录已提交的事务的DML语句
begin; 事件1
a 事件2
b 事件3
commit; 事件4
2事件的构成
mysql[(none)]>create database oldgirl; # 创建一个库
Query OK, 1 row affected (0.01 sec)
#################
mysqlbinlog /data/binlog/mysql-bin.000004 # 执行命令
or
mysqlbinlog --base64-output=decode-rows -v /data/binlog/mysql-bin.000004
# at 219
#190814 18:46:51 server id 6 end_log_pos 322 CRC32 0xa98122ba Query thread_id=3 exec_time=0 error_code=0
create database oldgirl
# at 219 事件开始的位置(position)
#190814 18:46:51 事件发生的时间
end_log_pos 322 事件结束的位置(position)
create database oldgirl 事件内容
2.3.4二进制日志的基本查看
1查看二进制日志的配置信息
``mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------+
| log_bin | ON |
| log_bin_basename | /data/binlog/mysql-bin |
| log_bin_index | /data/binlog/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.00 sec)
`
#####2二进制日志基本信息
show binary logs;
show master status ; 推荐
#####3查看二进制日志的事件信息
show master status ;
show binlog events in 'mysql-bin.000001';
####2.4内容查看和截取
#####2.4.1 内容查看命令
简单查看
[root@db01 /data/binlog]# mysqlbinlog /data/binlog/mysql-bin.000003
人类可读查看
[root@db01 /data/binlog]# mysqlbinlog --base64-output=decode-rows -vv /data/binlog/mysql-bin.000003
查询帮助
[root@db01 /data/binlog]# mysqlbinlog --help
####################################
二进制日志的截取
修改配置文件,并生效
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
secure-file-priv=/tmp
log_error=/data/3306/data/mysql.log
innodb_flush_method=O_DIRECT
server_id=6
log_bin=/data/binlog/mysql-bin
[mysql]
socket=/tmp/mysql.sock
prompt=mysql[\d]>
####################################
语法介绍
--start-position
--stop-position
语法:
mysqlbinlog --start-position=xxx --stop-position=xxx /data/binlog/mysql-bin.000005>/data/bin.sql
2.4.3 恢复日志演练
(1) 准备数据(默认自动begin)
mysql[(none)]>create database binlog charset utf8mb4;
mysql[(none)]>use binlog;
mysql[binlog]>create table t1(id int)engine=innodb charset=utf8mb4;
mysql[binlog]>insert into t1 values(1),(2),(3);
mysql[binlog]>commit;
mysql[binlog]>insert into t1 values(11),(12),(13);
mysql[binlog]>commit;
mysql[binlog]>update t1 set id=10 where id>10;
mysql[binlog]>commit;
mysql[binlog]>select * from t1; #查询表
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 10 |
| 10 |
| 10 |
+------+
6 rows in set (0.00 sec)
(2) 用来测试,直接删库
mysql[binlog]>drop database binlog;
mysql[(none)]>select * from t1;
ERROR 1046 (3D000): No database selected
(3) 数据恢复
- 确认日志的起点和终点
mysql[(none)]>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 1845 | | | |
+------------------+----------+--------------+------------------+-------------------+
mysql[(none)]>mysql[(none)]>show binlog events in 'mysql-bin.000005';
...
起点:219
| mysql-bin.000005 | 219 | Query | 6 | 335 | create database binlog charset utf8mb4
...
终点:1747
| mysql-bin.000005 | 1747 | Query | 6 | 1845 | drop database binlog
(4) 截取日志(命令行执行)
[root@db01 ~]# mysqlbinlog --start-position=219 --stop-position=1747 /data/binlog/mysql-bin.000005>/data/bin.sql
[root@db01 ~]# ls /data/bin.sql
/data/bin.sql
(5) 恢复日志
mysql[(none)]>set sql_log_bin=0; 临时关闭当前会话的binlog记录,不影响其他会话日志记录
mysql[binlog]>source /data/bin.sql;
mysql[binlog]>set sql_log_bin=1;
(6) 查看恢复成功的库
mysql[binlog]>show tables;
+------------------+
| Tables_in_binlog |
+------------------+
| t1 |
+------------------+
1 row in set (0.00 sec)
mysql[binlog]>select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 10 |
| 10 |
| 10 |
+------+
6 rows in set (0.00 sec)
mysqlbinlog -d binlog --start-position=219 --stop-position=1412 /data/binlog/mysql-bin.000006>/data/bin.sql
只过滤这个库
##