四、日志****
| 日志文件**** | 选项**** | 文件名称**** | 作用**** |
|---|---|---|---|
| 通用日志**** | --general_log | general_log | |
| 错误日志**** | --log_error | host_name.err | |
| 慢日志文件**** | --slow_query_log,--long_query_time | slow_log | |
| 二进制日志**** | --log_bin,--expire-logs-days | mysql-bin |
[root@mysql mysql]# cat /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=2
port=3306
general_log=ON
log_error=/var/log/mysql/error.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=0.1
log_queries_not_using_indexes
log_bin=/var/log/mysql/mysql-bin
[mysql]
socket=/tmp/mysql.sock
1)通用日志****
general_log=[OFF|ON] (此变量表示开启状态,OFF表示关闭,ON表示开启,默认是OFF)
show variables like '%general%'; 查看是否开启
localhost.log 在mysql数据路径下
2)错误日志****
log_error=/var/log/mysql/error.log
chmod -R mysql.mysql /var/log/mysql给添加程序用户权限
log_error=日志存储路径(相对路径在data目录下,为了数据安全,可以将日志和数据路径分开,但是分开后要保证日志存放的路径程序用户有写入权限。)
3)慢查询日志********
检查执行时间过长,返回结果过慢的sql
影响sql语句返回结果的因素:有网络因素 系统因素 数据库sql 1.6
相关配置参数如:
1、开关slow_query_log=1
2、文件位置及名字 slow_query_log_file=/data/mysql/slow.log
3、设定慢查询时间long_query_time=0.1 设置这个参数指标的时候要考虑排除网络系统等消耗的时间,才是我们的sql执行的查询时间,例如,我们执行一个语句实际时间是2s,我的网络延迟是0.2秒,我的系统延迟是0.1s,我的sql语句的执行实际必须控制在1.7秒以内。
4、没走索引的语句也记录 log_queries_not_using_indexes
设置完慢查询语句后可以用mysqldumpslow来分析慢sql日志
mysqldumpslow -s c -t 5 slow.log(慢sql日志的名称)
-s 排序 c 统计 -t 10 排名前十
重点关注,执行频率高的语句,消耗时间长,没走索引的语句
4)二进制日志****
二进制日志主要记录的是ddl,dcl,dml语句,记录一些对数据数据库产生更改的语句,其中ddl语句和dcl语句是直接记录的,dml语句是根据事务记录的。
二进制日志的开启方式是在配置文件中增加
log-bin=路径
二进制日志的格式:binlog_format=row
二进制日志有三种格式:statement格式,sbr格式 此种模式binlog日志记录的sql语句,在此种格式下就记录这一条语句。
row格式 rbr格式 此种模式是按行记录sql语句
mixed格式 mbr格式 混合型的,让mysql自己去选择sbr还是rbr。
ddl,dcl语句都是按照sql记录。dml记录过程是按照行去记录
insert into 表名称 values (now())where id <100
这个表里有个值是date日期
rbr格式下记录的 inserte into 表名 (时间)id=1;
sbr语句记录的一个完整改变表的语句,大大节省了存储空间,看起方便,但是在数据恢复的时候容易产生错误。
rbr语句记录比较冗余,但是最大程度的按行了,每行发生的改变,数据恢复时最大程度的恢复了业务发生时的场景。
5 ) binlog 日志****
binlog日志主要的用途是:数据恢复和主从复制。
查看当前是否开启binlog日志的的命令show variables like "%log_bin%";
查看当前的binlog日志有哪些show binary logs;
在二进制日志当中,是靠位置信息及记录sql语句,我们通常需要查看当前所处binlog日志位置信息 :show master status;
切割二进制日志:flush logs;
mysql-bin.index 记录binlog日志的索引文件
采用binlog日志恢复数据过程
获取要执行的binlog日志:mysqlbinlog --stop-position=782 mysql-bin.000004 >/tmp/yunjisuan.sql
恢复数据时要在恢复数据的窗口暂停记录binlog日志 set sql_log_bin=0;
恢复完毕后set sql_log_bin=1;在恢复记录binlog日志。
指定恢复某库的 mysqlbinlog --stop-position=933 --skip-gtids -d yunjisuan1 mysql-bin.000005 > /tmp/1.sql
mysqladmin 给超户设置密码
mysqldumpslow 分析慢日志
mysqlbinlog 查看二进制日志
6 )gtid是分为两个部分****
一部分叫server_uuid 这个是我们在初始化数据库的时候产生的
开启git模式和后,会在server-uuid后跟上一个tid
tid是一个自增数,用来记录是数据库发生变化的操作。
gtid有一个特性叫幂等性。这个特性的意思是一旦有了操作不会重复操作。
create database yunjisuan1 产生一个gtid =1
通过gtid恢复数据需要将gtid=1这条调出到sql文件里,sql文件里的gtid和系统里记录的gtid一致的时候,sql文件里的gtid语句不执行。
开启gitid
vi /etc/my.cnf
gtid-mode=on
enforce-gtid-consistency=true
查看gtid show binlog events in 'mysql-bin.000006';
gtid 恢复数据:mysqlbinlog --skip-gtids --include-gtids='f1887910-c20c-11ed-930d-000c29f6f675:1-4' mysql-bin.000006 >/tmp/1.sql
set sql_log_bin=0;
排除不执行语句用 --exclude-gtids='','' mysqlbinlog --skip-gtids --include-gtids='f1887910-c20c-11ed-930d-000c29f6f675:1-4' --exclude-gtids='f1887910-c20c-11ed-930d-000c29f6f675:4' mysql-bin.000006 >/tmp/1.sql
--skip-gtids
--include-gtids
--exclude-gtids