日志
mysql的日志种类非常多
通用查询日志 慢查询日志 错误日志 与时间有关联
二进制日志 中继日志 与主从服务器的同步有关
重做日志 回滚日志 与数据丢失有关
通用查询日志
记录了所有用户的连接开始时间和截至时间 以及给mysql服务器发送的所有指令
当数据异常时,开启通用查询日志,还原操作的具体场景 帮助定位问题
查看控制通用查询日志的系统变量
show variables like '%general';
系统变量general_log的值是off 关闭状态 默认关闭
通用查询日志的名称是zzz.log
开启通用查询日志
set global general_log='on';
指定通用查询日志的文件夹和名称
set global @@global.general_log_file='D:/test.log';
查看修改是否生效
查看通用查询日志
通用查询日志都是文本型的数据 使用记事本打开
为节省空间,移除旧的日志文件,创建新的日志文件,对通用日志文件进行维护:
首先 ,关闭通用查询日志 ;
然后 ,将通用查询日志文件移动到备份文件夹 空出磁盘空间 ;
最后,开启通用查询日志
慢查询日志
my.ini文件 系统变量min_examined_row_limit
记录执行时间超过指定时长的查询
当数据库发生阻塞,运行变慢时,检查慢查询日志 找到那些慢查询 消耗了大量的系统资源 方便查询优化
慢查询日志是由mysql的配置文件控制的
错误日志
记录了mysql服务器启动,停止启动的时间以及系统启动,运行和停止过程中的诊断信息,包括错误,警告和提示等 方便了解服务器的状态,对服务器进行维护
数据库服务器发生系统故障时,错误日志是首选
错误日志是默认开启的 在mysql的配置文件’my.ini‘中配置
日志可以帮助找回由于误操作丢失的数据
比如二进制日志 中继日志 回滚日志(undo log) 重做日志(redo log)等
二进制日志
主要用于主从服务器之间的数据同步,以及服务器遇到故障时数据的无损失恢复
主要记录数据库的更新事件 比如创建数据表 更新表中的数据等
操作二进制日志
主要包括查看,刷新二进制日志,用二进制日志恢复数据以及删除二进制日志
查看二进制日志 (3种情况)
a. 查看当前正在写入的二进制日志 ,名称以及当前写入的位置
show master status;
b. 查看所有的二进制日志
show binary logs;
c. 查看二进制日志中所有的数据更新事件
show binary events in 二进制文件名称;
刷新二进制日志
关闭服务器正在写入的二进制日志文件,重新打开一个新文件 文件名的后缀在现有的基础上+1
flush binary logs;
用二进制日志恢复数据
执行二进制日志中从位置xxx开始,到yyy截至的所有数据的更新操作
mysqlbinlog -start-position=xxx --stop-position=yyy 二进制文件名 | mysql -u 用户 -p
删除二进制日志
删除所有的二进制文件
reset master;
删除指定二进制日志文件编号小的所有二进制日志文件
pug master logs to 'test-bin.00005';
中继日志
只在主从服务器架构的从服务器上存在
从服务器为与主服务器保持一致 要从 主服务器读取二进制内容 并把读取到的信息写入本地日志文件 从服务器读取中继日志 并根据中继日志的内容对从服务器的数据进行更新 完成主从服务器的数据同步
从服务器本地的日志文件叫做中继日志
注:从服务器宕机 为了系统恢复 要重装操作系统时 如果服务器名称与之前不同 ,需要把从服务器的名称修改回之前的名称,因为中继日志的名称是包含之前的从服务器的名称的
回滚日志 (undo log)
事务执行的时候,回滚日志中记录了事务中每次数据更新前的状态
事务需要回滚的时候 可以通过读取回滚日志恢复指定的位置
回滚日志可以让其他的事务读取到这个事务对数据更改之前的值,确保其他事务可以不受这个事务修改数据的影响
查看回滚日志的文件大小
show variables like '%innodb_max_undo_log_size%';
单个回滚日志最大可达1G字节存储空间
查看回滚日志所在的文件夹 是否自动截断 是否具有独立的表空间
show variables like '%innodb_undo%';
回滚日志的存储目录是数据目录(默认值) 数据目录的位置可以通过查询变量’datadir‘查看
回滚日志没有提前截断(默认值)
回滚日志没有自己独立的表空间(默认值)
重做日志(redo log)
存储在磁盘上的一种日志文件 确保数值的持久性 防止数据更新丢失
作用
1)系统遇到故障恢复的时候 可以修复被未完成的事务修改的数据
2)为了提高数据的存取效率 数据更新先保存到内存中,再进行磁盘的读写; 但是停电或宕机时, 内存中保存的数据可能丢失 这时 通过读取重做日志中记录的数据更新操作 把没来的及写到磁盘上的数据更新写到磁盘上 保证数据的完整性
查看重做日志的文件夹和文件数量
show variables like '%innodb_log_files_in_group%';
有2个重做日志文件 该值的取值范围在1~4之间 这4个文件用于不同的操作
1 用户创建表时的插入操作
2 用户创建表的更新和删除操作
3 临时表的插入操作
4 临时表的更新和删除操作
总结
通过数据库的全量备份和二进制日志中保存的增量信息完成数据库的无损失恢复 但是数据量巨大 数据库和数据表很多 这种方法很有挑战性 因为起始位置不好找
这时,配置主从数据库服务器比较合适 把二进制日志文件写入到中继日志,进而同步到从数据库服务器中,可以有效避免数据库故障导致的数据异常等问题