由于最近碰到一个日志清理的问题,所以就花时间写了这篇文章,严格来说只是学习笔记。
1.通用日志文件
默认安装情况下不开启,即不会生成这个文件,需要手工开启,可直接在命令行中设置:set global general_log = ON。即时生效。重启MySQL服务后,会关闭,需重新启动。
也可在配置文件my.ini中设置:general_log=on。这样每次启动MySQL服务都会自动启动。
这样MySQL就会在data目录下创建一个和你计算机同名的日志文件:计算机名-PC.log。
以后你对MySQL做的任何操作,都会被记录到这个日志文件中。
2.二进制日志文件
默认安装情况下不开启,即不会生成这个文件,需要手工开启,在配置文件my.ini中的[mysqld]后面加入:log_bin=binary_log。这里的binary_log为二进制文件名。
这样MySQL就会在data目录下创建如下两个文件:binary_log.000001和binary_log.index。
以后对MySQL表做的任何更新,都会被记录里到这个日志文件中。
当在data目录下手工删除了某些二进制日志文件时,一定要同时删除binary_log.index里面的对应记录,否则mysql服务将无法启动。
可在命令行中通过 show binlog events in ‘binary_log.000001’查看:
也可通过mysqlbinlog命令查看,先在dos下进入data目录然后输入:mysqlbinlog binary_log.000001。
mysqlbinlog binary_log.000001 > Jin.txt可输出到txt文件方便查看。
重启MySQL后,将会在data目录下重新生成一个新的日志文件,如原来的是binary_log.000001,那么重启后会生成binary_log.000002文件,也即是每次重启后都会按文件后面的数字递增生成一个新文件。
flush logs命令可立即生成一个最新的二进制文件,并将后面的更新操作记录其中。但这样貌似会出现一个问题:通用日志(general_log)和慢查询日志(slow_log)将不再更新。不再更新的意思是说,这些操作被存储在内存中了,要等下次重启mysql后,才会重新写入日志中。
所以在使用flush logs命令的时候需要非常小心,因为如果在执行了flush logs命令后,后面产生的通用日志(general_log)和慢查询日志(slow_log)很大的话,那么就会占用很大的内存。这个只是我的猜测,大家可以认证一下。
3.慢查询日志文件
默认安装情况下不开启,即不会生成这个文件,需要手工开启,在配置文件my.ini中的[mysqld]后面加入:
# 慢查询日志文件
log_slow_queries = slow_queries_log
# 记录下查询时间超过10秒的SQL
long_query_time = 10
# 表示记录下没有使用索引的查询SQL
log-queries-not-using-indexes
slow_queries_log是慢查询日志的文件名,long_query_time为查询时间(单位s),大于此时间的查询都被记录到该日志,log-queries-not-using-indexes表示没有使用索引的查询,该查询也会被记录到该日志文件下。
这样MySQL就会在data目录下创建如下文件:slow_queries_log。
以后符合上面条件的查询都会被记录到这个日志文件中。
4.log_output = table
该选项默认为log_output = file,即将日志存入文件中。可设置将日志存入表中,只需在my.ini文件[mysqld]加入log_output = table,即可将通用查询日志(general_log)以及慢查询(log_slow_queries)日志分别存入mysql数据库的general_log和slow_log表中。
但好像在这种模式下无法存储二进制文件。
5.通过日志文件进行增量备份
在进行增量备份之前,首先我们需要进行一个全备份,可以使用mysqldump命令:
mysqldump -u 用户名 -p --single-transaction [数据库名|--all-databases] > 文件名.sql
--single-transaction的意思相当于设置会话的隔离级别为REPEATABLE-READ,即允许重复读,保证数据库的一致性(关于MySQL的隔离级别,可参考我之前写的文章:http://www.iteye.com/topic/1130108)。
举个例子,假如现在有下面几个数据库:
我们要对Jin_Liang这个数据库做一个全备份,那可以在DOS写如下命令:
由图可见,备份完成,我们将备份文件存储在了D盘的Jin_Liang_Backup.sql文件下:
打开文件可以看到,里面其实都是表的创建命令以及数据的insert语句。
假如我们现在清空数据库Jin_Liang里的所有表(模拟崩溃状态):
这时候Jin_Liang里面的数据已经全部被删除了,我们将通过Jin_Liang_Backup.sql来恢复它们,命令如图所示:
这时候通过mysql命令行客户端查看:
由图可见,表已全部恢复。
上面即是mysql数据库的全备份了,如果想对所有的数据库都进行备份,那么只要在上面的mysqldump命令中选择—all-databases即可。但这有一个缺点,那就是我们必须先手工创建数据库,当然我们在用mysqldump命令的时候可加入--add-drop-database选项,这样就不需要手工创建数据库了。
PS: 这里还有一些很有用的命令:
只导出一个表:
mysqldump -u 用户名 -p 数据库名 表名> 文件名.sql
只导出数据库的表结构:
mysqldump -u 用户名 -p -d --add-drop-table 数据库名 >文件名.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个
那下面就开始介绍如何通过二进制日志文件做增量备份。
首先先看下data目录下的日志文件有哪些:
如图所示,有四个二进制日志文件:binary_log.000001、binary_log.000002、binary_log.000003和binary_log.000004;一个错误日志文件:LilyZhang-PC.err;一个通用日志文件:LilyZhang-PC.log;一个慢查询日志文件:slow_queries.log;还有两个mysql默认的日志文件:ib_logfile0和ib_logfile1。
当然我们只需要二进制日志文件。
首先我们需要做flush logs操作,重新生成一个新的二进制日志文件,以便把后面的操作都记录其中:
然后查看data目录,可见新生成了binary_log.000005二进制日志文件。
这时候我们更新一条记录:
查看binary_log.000005文件:
由图可见,该更新操作已被记录到binary_log.000005文件中。
我们把binary_log.000005导出到txt文件方便查看:
打开binary_log.000005.txt文件,如图所示:
里面记录了前面的更新操作。所以我们只要根据该操作反向操作即可恢复到之前的状态。
从binary_log.000005.txt文件的内容上看,里面记录的其实是重做日志,也即是说当数据库崩溃时,我们可以根据其来重新提交【之前所做的更新】,当然前提是我们做了全备份,并且通过这个全备份文件恢复了备份前的数据,以保证查询条件存在。
而增量备份的意思是,我们在做了一次全备份以后,后面我们只要备份那些新更新的数据即可。而二进制日志文件中,保存的即是后面的更新操作,我们只要将其取出重执行一遍,即可恢复到之前的状态。所以,我们在做了一次全备份后,后面的备份我们只要备份二进制日志文件即可。
现在我们来模仿通过二进制日志文件如何恢复数据库。首先我们将数据库Jin_Liang删除,以模仿崩溃状态:
然后重建数据库:
通过全备份恢复:
这时候可以看到表已恢复:
但查看classes表,此时的数据不是最新的,因为我们之前有做更新:
update classes set class_name = 'Jin' where class_name = 'Jin_Liang'
此时我们就可以通过二进制日志文件来重做这个操作,假设我们前面在做增量备份时,将binary_log.000005备份到了old_logs目录下,那么只要做如下操作即可恢复:
此时查看classes表:
class_name中Jin_Liang已更新为Jin。
相关推荐
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
《基于YOLOv8的智慧社区独居老人生命体征监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
Android Studio Meerkat 2024.3.1 Patch 1(android-studio-2024.3.1.14-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/90557060 part2: https://download.csdn.net/download/weixin_43800734/90557056
侧轴承杯加工工艺编制及夹具设计.zip
NASA数据集锂电池容量特征提取(Matlab完整源码和数据) 作者介绍:机器学习之心,博客专家认证,机器学习领域创作者,2023博客之星TOP50,主做机器学习和深度学习时序、回归、分类、聚类和降维等程序设计和案例分析,文章底部有博主联系方式。从事Matlab、Python算法仿真工作8年,更多仿真源码、数据集定制私信。
板料折弯机液压系统设计.zip
C6150车床的设计.zip
机器学习之KNN实现手写数字
python爬虫;智能切换策略,反爬检测机制
mpls-vpn-optionA-all
56tgyhujikolp[
GB 6442-86企业职工伤亡事故调查分析规则.pdf
汽车液压式主动悬架系统的设计().zip
2000-2024年各省专利侵权案件结案数数据 1、时间:2000-2024年 2、来源:国家知识产权J 3、指标:专利侵权案件结案数 4、范围:31省 5、用途:可用于衡量知识产权保护水平
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
内容概要:本文档详细复现了金融数学课程作业,涵盖欧式看涨期权定价和投资组合优化两大部分。对于欧式看涨期权定价,分别采用Black-Scholes模型和蒙特卡洛方法进行了计算,并对彩虹期权进行了基于最大值的看涨期权定价。投资组合优化部分则探讨了最小方差组合、给定收益的最小方差组合、最大效用组合以及给定风险的最大收益组合四种情形,还对比了拉格朗日乘数法和二次规划求解器两种方法。文中不仅提供了详细的MATLAB代码,还有详尽的中文解释,确保每一步骤清晰明了。 适合人群:金融工程专业学生、量化分析师、金融数学爱好者。 使用场景及目标:①帮助学生理解和掌握金融衍生品定价的基本原理和方法;②为从事量化分析的专业人士提供实用工具和技术支持;③作为教学材料辅助高校教师讲授相关内容。 其他说明:文档还包括了完整的论文结构建议,从封面页到结论,再到附录,涵盖了所有必要元素,确保提交的作业符合学术规范。此外,还特别强调了数据预处理步骤,确保代码可以顺利运行。
脉冲电解射流加工喷射装置设计(1)
ThinkPad S1 (2nd Generation) 和ThinkPad Yoga 260 用户指南V3.0,包含如何拆机更换硬件
charles描述文件下载
python代码-使用人类对话数据集lora微调deepseek