18MySQL日志管理(上)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了18MySQL日志管理(上)相关的知识,希望对你有一定的参考价值。

mysql日志是记录MySQL服务器活动的文件。通过分析这些日志文件,可以了解MySQL服务器的运行情况,诊断故障,优化数据库性能等。MySQL提供了多种类型的日志文件,下面是一些常见的日志类型:

18、MySQL日志管理(上)_log_warnings

1、错误日志(Error log):记录MySQL服务器启动和运行过程中出现的错误信息,例如无法打开文件,内存不足等等。错误日志一般存储在MySQL安装目录下的data目录下。

2、二进制日志(Binary log):记录所有对MySQL数据库进行修改的操作,例如增加、修改、删除表和数据等。二进制日志是MySQL数据库复制和恢复的关键。

3、慢查询日志(Slow query log):记录执行时间超过指定时间的SQL查询语句,可以帮助开发人员分析和优化查询语句。慢查询日志可以通过设置参数slow_query_log来开启或关闭,日志文件一般存储在MySQL安装目录下的data目录下。

4、查询日志(Query log):记录MySQL服务器执行的所有SQL查询语句,包括慢查询日志中的查询语句,查询日志可以通过设置参数general_log来开启或关闭,日志文件一般存储在MySQL安装目录下的data目录下。

5、事务日志(Transaction log):记录所有的事务操作,包括事务的开始、提交、回滚等。事务日志主要用于数据库的恢复和数据一致性保证。

6、通用日志是MySQL中的一个默认日志,用于记录服务器的重要事件,例如启动、关闭、连接和断开连接。通用日志可以包含许多不同的事件,如错误消息和警告

7、中继日志(Relay Log)是MySQL主从复制中从服务器上的一种日志,用于记录从主服务器接收到的二进制日志的内容,然后将其应用于从服务器上的本地副本,以保证从服务器的数据与主服务器的数据同步。

对于日志文件的管理,可以根据实际需求进行配置,一般包括以下几个方面:

日志开启和关闭:根据需要开启或关闭不同类型的日志,可以通过在MySQL配置文件my.cnf中设置参数来控制日志的开启和关闭。

日志存储和备份:将日志文件存储在独立的磁盘分区中,定期备份和压缩日志文件,以免日志文件过大导致磁盘空间不足。

日志分析和维护:定期分析和维护日志文件,查找可能存在的问题和异常情况,并进行优化和修复。

日志安全性:保护日志文件的安全性,限制对日志文件的访问权限,防止日志文件被恶意篡改或删除。

事务日志

MySQL(或MariaDB)的事务日志(Transaction Log),是一个二进制文件,记录了所有对数据库表进行的修改操作。事务日志是MySQL恢复机制的重要组成部分,可以帮助MySQL执行崩溃恢复、数据复制和数据恢复等操作。

事务日志有两种类型:

重做日志(Redo Log)

重做日志是用于防止意外关机和其他类似问题的崩溃恢复机制。它记录了所有修改操作,并且是写入磁盘的顺序写入文件中的二进制文件。

回滚日志(Undo Log)

回滚日志用于撤销事务的操作。如果某个事务在执行期间发生错误或中断(如死锁),系统将使用回滚日志将数据回滚到事务执行之前的状态。

由于MySQL使用预写日志(Write Ahead Log,WAL)机制,故所有修改操作都将先写入预写日志,然后再提交到对应的数据文件中。与日志文件不同,数据文件对磁盘的IO压力较大,数据文件较大且难以管理,故使用事务日志能够更好地管理数据库的可靠性和安全性

事务日志的相关配置

innodb_log_file_size 50331648 每个日志文件大小
innodb_log_files_in_group 2 日志组成员个数
innodb_log_group_home_dir ./ 事务文件路径
innodb_flush_log_at_trx_commit 默认为1

18、MySQL日志管理(上)_事务日志_02

18、MySQL日志管理(上)_错误日志_03

18、MySQL日志管理(上)_事务日志_04

事务日志性能优化参数innodb_flush_log_at_trx_commit

18、MySQL日志管理(上)_log_warnings_05

18、MySQL日志管理(上)_事务日志_06

18、MySQL日志管理(上)_事务日志_07

当innodb_flush_log_at_trx_commit取不同值时的特点可以用下面的表格来清晰地展示:

18、MySQL日志管理(上)_log_error_08

当innodb_flush_log_at_trx_commit取0时,InnoDB的日志缓冲区并不会立刻被写入到磁盘,而是在日志缓冲区被占满时,才会将缓冲区中的日志写入到磁盘。这种方式具有很高的性能,但安全性较低,如果MySQL进程在写入数据时崩溃,那么未被写入磁盘的日志数据会丢失。

当innodb_flush_log_at_trx_commit取1时,InnoDB的日志缓冲区会被较为频繁地写入到磁盘,相比上一种方式安全性大大提高,但性能也有所降低。

当innodb_flush_log_at_trx_commit取2时,InnoDB的日志缓冲区会被缓存入操作系统的高速缓存IO缓冲区中,然后会使用异步方式刷新到磁盘中去,并不会每次事务提交都写入磁盘,所以性能较为稳定,安全性也较高。但是如果发生系统崩溃,可能会导致一部分事务的日志记录丢失,需要使用Redo Log来进行恢复。

高并发业务行业最佳实践,是使用第三种折衷配置(=2):

1.配置为2和配置为0,性能差异并不大,因为将数据从Log Buffer拷贝到OS cache,虽然跨越用户态与内
核态,但毕竟只是内存的数据拷贝,速度很快
2.配置为2和配置为0,安全性差异巨大,操作系统崩溃的概率相比MySQL应用程序崩溃的概率,小很多,设置
为2,只要操作系统不奔溃,也绝对不会丢数据
错误日志

错误日志

mysqld启动和关闭过程中输出的事件信息
mysqld运行中产生的错误信息
event scheduler运行一个event时产生的日志信息
在主从复制架构中的从服务器上启动从服务器线程时产生的信息

18、MySQL日志管理(上)_log_warnings_09

18、MySQL日志管理(上)_错误日志_10

记录哪些警告信息至错误日志文件

18、MySQL日志管理(上)_错误日志_11

log_warnings的值为0,表示不记录警告信息。
log_warnings的值为1,表示警告信息一并记录到错误日志中。
log_warnings的值大于1,表示"失败的连接"的信息和创建新连接时"拒绝访问"类的错误信息也会被记录到错误日志中。





详解MySQL用户与授权MySQL日志管理数据乱码解决方案。

数据库是信息系统中非常重要的环节,合理高效的对它进行管理是很重要的工作。通常是由总管理员创建不同的管理账户,然后分配不同的操作权限,把这些账户交给相应的管理人员使用。本篇我们在CentOS7.5操作系统上应用MySQL5.7版本。

用户与授权(用户管理、授权控制)

一、用户管理包括:新建用户、删除用户、重命名用户、给用户设置密码、忘记root密码的解决办法;
select User,authentication_string,host from user; //查看有多少个用户及用户信息 :

技术分享图片

create user ‘test01‘@‘localhost‘ identified by ‘123123‘; //创建用户及密码:

技术分享图片

grant all on . to ‘test02‘@‘localhost‘ identified by ‘123123‘; //给任何库任何表创建全部权限的用户及密码:

技术分享图片

drop user ‘test01‘@‘localhost‘; //删除用户:

技术分享图片

rename user ‘test02‘@‘localhost‘ to ‘user01‘@‘192.168.100.70‘; //用户重命名:

技术分享图片

select password(‘123123‘); //将密码的明文转化成密文:

技术分享图片

create user ‘user01‘@‘localhost‘ identified by password ‘*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1‘; //新创建用户user01并制定密文密码
set password for ‘user01‘@‘localhost‘ = password(‘123123‘); // 如果密码忘了 可以重新更改密码 :

技术分享图片

使用MySQL时,如果忘记了其他用户的密码,可以使用root用户重新设置,但是如果忘记了root密码,就需要采取特殊的方法进行操作。这里直接修改授权表可以修改root密码,下面介绍它 的使用步骤:

[[email protected] bin]# systemctl stop mysqld.service //先关闭MySQL数据库
[[email protected] bin]# netstat -ntap | grep 3306 //查看一下监听端口
[[email protected] bin]# vim /etc/my.cnf //修改MySQL配置文件
在[mysqld]项插入 skip-grant-tables //插入skip-grant-tables 跳过验证表
[[email protected] bin]# systemctl start mysqld.service //开启MySQL数据库
[[email protected] bin]# netstat -ntap | grep 3306 //查看监听端口
登录 mysql //然后直接mysql 就能登录到数据库中
update mysql.user set authentication_string = password(‘123123‘) where user=‘root‘; //更新数据库信息 将root密码改为123123
退出quit
[[email protected] bin]# vim /etc/my.cnf //然后再进入配置文件将刚才的skip-grant-tables删掉
删除 skip-grant-tables
[[email protected] bin]# systemctl restart mysqld.service //重启服务
[[email protected] bin]# mysql -uroot -p //账号、密码登录MySQL
Enter password: 123123

二、授权控制包括授予权限、查看权限、撤销权限、权限列表说明等。

主要命令操作如下:

grant select,update on . to ‘user01"@"localhost‘ identified by ‘123123‘; //给用户user01授予任意库,组的select、update权限
语法:revoke 权限 on数据库.表 from 用户@主机;
revoke updtae on . from ‘user01’@’localhost’; //撤销用户user01任意库,组的的updta的权限
show grants for "user01‘@‘localhost‘; // 查看用户权限

MySQL日志管理(错误日志、通用查询日志、二进制日志、慢查询日志)

接下来修改MySQL的配置文件,将以上四种日志的配置文件插入到[mysqld]中:

[[email protected] bin]# cd /usr/local/mysql/data/ //mysql日志存放位置
[[email protected] bin]# vim /etc/my.cnf // 将以下内容插入到[mysqld]中:
#错误日志
log-error=/usr/local/mysql/data/mysql_error.log //在此路径下定义错误日志的存放位置、文件名
#通用日志
general_log=ON //开启???
general_log_file=/usr/local/mysql/data/mysql_general.log //指定日志文件存放位置、文件名
#二进制日志(记录用户对数据库的操作)
log_bin=mysql-bin //指定二进制日志
#慢日志
slow_query_log=ON????????????????????????????????? //开启???
slow_query_log_file=mysql_slow_query.log //指定日志文件存放位置、文件名
long_query_time=1 //设置最长记录时间
技术分享图片

查看已经配置好的日志文件:

技术分享图片

错误日志:

1.主要记录当MySQL启动或停止时,以及在运行过程中发生任何错误时的相关信息。错误日志默认保存在MySQL的安装路径data文件夹下,后缀名是.err。
2.在MySQL的配置文件中,可以指定日志文件的保存位置和日志的文件名。log-error=file_name选项来指定保存错误日志的位置,file_name 指定日志文件名,如果没有指定文件名,使用host_name.err作为文件名。重启MySQL后生成mysql_error.log用来记录错误日志。

通用查询日志:

1.通用查询日志用来记录MySQL的所有连接和语句,默认是关闭的。使用show语句可以查询出日志的信息。
2.修改MySQL配置文件的general_log=ON选项,可以打开通用查询日志,general_log_file=name定义通用查询日志的位置,如果没有指定file_named的值,默认名是host_name.log。重启MySQL后通用查询日志生效。
show variables like ‘general%‘; //查看通用日志文件状态:
技术分享图片

二进制日志:

1.二进制日志用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,主要目的是在恢复数据时能够最大程度的恢复数据库。二进制日志默认是开启的,在data文件夹下,以mysql-bin命名,数据量大时,它会自动分割成多个日志文件,以数字做扩展名。
2.二进制日志可以使用MySQL的工具mysqlbinlog查看二进制文件:
mysqlbinlog --no-defaults mysql-bin.000001 //5.7版本MySQL 查看二进制日志文件
show variables like ‘log_bin%‘; //查看二进制日志文件状态(是否开启):
技术分享图片

慢查询日志:

1.慢查询日志记录所有执行时间超过long_query_time秒的SQL语句,用于找到哪些查询语句执行时间长,以便对其进行优化。默认慢查询日志是关闭的,slow_query_log是,慢查询的选项,默认是OFF。
2.使用SQL语句开启慢查询功能。
3.慢查询时间设置默认为10秒,记录10秒内的查询,可以通过global long_query_time选项进行修改。使用show语句查看慢查询日志。
show variables like ‘%slow%‘; //查看慢查询日志文件状态(是否开启):
技术分享图片
show variables like ‘long_query_time‘; //查看最长记录时间:
技术分享图片
set global slow_query_log=ON; //开启慢查询日志:
技术分享图片
慢查询测试:select sleep(6); //延迟6秒:
技术分享图片
[[email protected] data]# vim mysql_slow_query.log //进入慢日志文件查看记录信息,可以看到相应的记录。

数据乱码解决方案

MySQL服务器使用中经常有乱码产生,主要有以下几种原因:

1.服务器系统字符设置问题
2.数据表语系设置的问题
3.客户端连接语系的问题
总结:乱码问题原因简单解释就是 在使用、存储数据的时候,各个环节设置的字符集如果不同,就会产生乱码。

解决方法:对于MySQL服务器,只要设置存储的字符集为UTF-8,对应的客户端程序也使用相同编码,就不会产生乱码。例如:create database chartest character set ‘utf8_general_ci‘; 在创建数据库时使用参数character set设置字符集,collate是对字符集进行校队的规则,字符集设置好后后续在库中都是默认的UTF-8了。

本章总结:

1.MySQL新建用户需要指定权限。

2.忘记root密码,可以跳过权限表进行修改。

3.MySQL日志包括错误日志、通用查询日志、二进制日志、慢速查询日志。

4.MySQL乱码问题可以采用指定字符集UTF-8的方式解决。

以上是关于18MySQL日志管理(上)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL复制的多种方法

关系型数据库之Mysql二进制日志管理

4月18日 MySQL学习

十一linux-mysql的多种日志和引擎文件实战

日志管理系统,多种方式总结

Mysql 日志管理详解