企业内部管理系统网站建设,微信商家小程序怎么弄,杭州seo排名,宁波医院网站建设日志管理在数据库保存数据时#xff0c;有时候不可避免会出现数据丢失或者被破坏#xff0c;这种时候#xff0c;我们必须保证数据的安全性和完整性#xff0c;就需要使用日志来查看或者恢复数据了数据库中数据丢失或被破坏可能原因#xff1a;误删除数据库数据库工作时有时候不可避免会出现数据丢失或者被破坏这种时候我们必须保证数据的安全性和完整性就需要使用日志来查看或者恢复数据了数据库中数据丢失或被破坏可能原因误删除数据库数据库工作时意外断电或程序意外终止由于病毒造成的数据库损坏或丢失文件系统损坏后系统进行自检操作升级数据库时命令语句不严格设备故障......MySQL日志类型日志类型记入文件中的信息类型错误日志记录启动运行或停止时出现的问题查询日志记录建立的客户端连接和执行的语句二进制日志记录所有更改数据的语句主要用于复制和即时点恢复慢日志记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询事务日志记录InnoDB等支持事务的存储引擎执行事务时产生的日志默认情况下所有日志创建于mysqld数据目录中。通过刷新日志你可以强制 mysqld来关闭和重新打开日志文件刷新日志在mysql中执行语句 flush logs 刷新日志在shell中通过mysqladmin命令执行日志刷新mysqladmin flush-logs
mysqladmin refresh错误日志错误日志记录内容服务器启动和关闭过程中的信息服务器运行过程中的错误信息事件调度器运行一个时间产生的信息在从服务器上启动从服务器进程是产生的信息指定错误日志保存的位置可以⽤--log-error[file_name]选项来指定mysqld保存错误日志文件的位置如果file_name也就是文件名没有指定name默认名字将会是host_name.err如果你执行FLUSH LOGS错误日志用-old重新命名后缀并且mysqld创建⼀个新的空日志文件查看当前错误日志配置show global variables like log_error%;是否记录警告日志show global variables like log_warnings;查询日志通用查询日志启动开关general_log{ON|OFF}日志文件变量:general_log_file[/PATH/TO/file]全局日志开关:log{ON|OFF} 该开关打开后所有日志都会被开启记录类型log_output{TABLE|FILE|NONE}可见要开启通用查询日志至少需要配置general_logON
log_output{TABLE|FILE}
general_log_file查看默认配置SHOW GLOBAL VARIABLES LIKE %general_log%;
SHOW GLOBAL VARIABLES LIKE %log_output%;慢查询日志MySQL如果启⽤了 slow_query_logON 选项就会记录执⾏时间超过long_query_time的查询日志文件为slow_query_log_file[file_name]如果没有给出file_name值 默认为主机名后缀为-slow.log如果给出了文件名但不是绝对路径名文件则写入数据目录开启慢查询的方法(只在当前有效)set global slow_query_log ON;查看配置文件SHOW GLOBAL VARIABLES LIKE %slow_query_log%;# 使用 mysqldumpslow 命令获得日志中显示的查询摘要来处理慢查询日志
# mysqldumpslow slow.log
# 那么多久算是慢呢
# 如果查询时长超过long_query_time的定义值默认10秒即为慢查询
mysql SHOW GLOBAL VARIABLES LIKE long_query_time;二进制日志文件开关二进制日志启动开关log-bin [file_name]作用1.⼆进制日志包含了所有更新了数据或者已经潜在更新了数据的所有语句2.语句以“事件”的形式保存它描述数据更改。二进制日志还包含关于每个更新数据库的语句的执行时间信息。它不包含没有修改任何数据的语句行3.二进制日志的主要⽬的是在数据库存在故障时恢复时能够最⼤可能地更新数据库即时点恢复因为二进制日志包含备份后进行的所有更新。4.二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句二进制日志的记录二进制会自行选择记录执行语句或者执行后的数据结果有以下情况假设一个表有10万行数据现在要执行一个语句将表中的某个字段的值全部替换这个时候因为记录执行后的结果数据的话日志会非常大会选择记录执行语句2.如果向某个字段插入当前时间这种不同时间执行结果时不一样的那就得记录执行后的数据结果3.实际上也可以结合两种方式来记录这种情况叫做混合方式的二进制日志二进制日志的管理日志滚动在my.cnf中设定max_binlog_size 200M表示限制二进制日志最大尺存为200M超过200M后进行滚动。MySQL的滚动方式与其他日志不太⼀样滚动时会创建⼀个新的编号大1的日志用于记录最新的日志而原日志名字不会被改变。每次重启MySQL服务日志都会自动滚动⼀次。另外如果需要手动滚动则使⽤命令 mysql FLUSH LOGS ;日志查看查看有那些二进制文件show binary logs;查看当前正在使用的二进制日志文件show master status;查看二进制内容show binlog events in mysqld-binlog.000002;
mysqlbinlog [option] log-files二进制日志还原数据使用mysqlbinlog读取需要的日志内容使用标准输入重定向到一个sql文件然后在mysql服务器上导入即可举个例子mysqlbinlog mysqld-binlog.000002 /root/temp_date.sql二进制日志还原出错如果在导入的时候出现了错误——mysqlbinlog: [ERROR] unknown variable default-character-setutf8mb4原因——mysqlbinlog这个工具无法识别binlog中的配置中的default-character-setutf8mb4这个指令解决方式添加 --no-defaults 参数mysqlbinlog --no-defaults binlog.000069 c:/a.sql
/*注意需要指定binlog的位置如果是当前路径则可以直接使⽤名称即可*/2.修改配置文件 my.cnfdefault-character-setutf8mb4 修改为 character-set-server utf8mb4但是需要重启MySQL服务删除二进制日志文件二进制日志文件不能直接删除如果使用rm等命令直接删除日志文件可能导致数据库崩溃必须使用命令 PURGE 删除日志文件PURGE { BINARY | MASTER } LOGS { TO log_name |BEFORE datetime_expr}注意如果数据库使用的编码是utf8mb4编码mysqlbinlog命令可能不能解析这种编码两种解决方法1. 在 MySQL 的 配 置 /etc/my.cnf 中 将 default-character-setutf8mb4 修 改 为character-set-server utf8 但是这需要重启MySQL服务如果你的MySQL服务正在忙那这样的代价会比较大。2. 用mysqlbinlog --no-defaults mysql-bin.000004 命令打开