2.非导入导出命令3.其他命令mysql(参考文章:Mysql备份与恢复简单总结与tee命令的使用)1.先要创建一个存放日志信息的日志文件:tee 完整路径例如,tee C:Program Files (x86)MySQLMySQL Server 5.5logmysql.log2.导入导出命令、非导入导出命令、其他的命令,都保存到了mysql.log文件3.如何把每次的命令操作的日志信息保存到一个单独的日志文件?
oracle&mysql的日志信息
标签:mysql oracle 日志信息
小编还为您整理了以下内容,可能对您也有帮助:
在ORACLE 中怎么查看SQL 执行日志
1、首先打开oracle sql developer工具,没有此工具的可以去百度浏览器下载安装即可,鼠标点击查看菜单。
2、在二级菜单中,选择SQL历史记录选项,或者按快捷键F8打开窗口。
3、默认打开是会显示在最下方的小窗口,在标题栏双击鼠标左键,即可最大化窗口,再次双击左键还原窗口。
4、最大化窗口之后,便于更好的查询记录结果,可以看到,以往执行的sql记录都显示出来了可以往下翻动,查询自己需要的日志。
在ORACLE 中怎么查看SQL 执行日志
1、首先打开oracle sql developer工具,没有此工具的可以去百度浏览器下载安装即可,鼠标点击查看菜单。
2、在二级菜单中,选择SQL历史记录选项,或者按快捷键F8打开窗口。
3、默认打开是会显示在最下方的小窗口,在标题栏双击鼠标左键,即可最大化窗口,再次双击左键还原窗口。
4、最大化窗口之后,便于更好的查询记录结果,可以看到,以往执行的sql记录都显示出来了可以往下翻动,查询自己需要的日志。
oracle 如何查看日志?
1、Oracle日志的路径的查看:
登录:sqlplus "/as sysdba"
查看路径:SQL> select * from v$logfile;
SQL> select * from v$logfile;(#日志文件路径)
2、Oracle日志文件包含哪些内容:(日志的数量可能略有不同)
control01.ctl example01.dbf redo02.log sysaux01.dbf undotbs01.dbf
control02.ctl redo03.log system01.dbf users01.dbf
control03.ctl redo01.log SHTTEST.dbf temp01.dbf
3、Oracle日志的查看方法语句代码:
SQL>select * from v$sql (#查看最近所作的操作)
SQL>select * fromv $sqlarea(#查看最近所作的操作)
4、LogMiner的使用:
5、查看LogMiner工具分析结果
SQL> select * from dict t where t.table_name like '%LOGMNR%';看所有与logmnr相关的视图
6、分析结果在GV$LOGMNR_CONTENTS 视图中,可按以下语句查询:
selec tscn , timestamp , log_id , seg_owner , seg_type , table_space , data_blk# , data_obj# , data_objd#, session#,serial#,username,session_info,sql_redo,sql_undo from logmnr3 t where t.sql_redo like 'create%';
MySQL三种重要日志
日志是MySQL的重要组成部分,其中对于开发而言不得不关注三种重要的日志,分别是二进制日志(bin log)、事务日志(redo log、undo log)。接下来详细介绍这三种日志。
binlog叫做二进制日志,主要是用于记录MySQL表的逻辑变化过程。在实际应用过程中,通常被用于主从复制和数据恢复。
事务执行过程中,会先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中。
事务提交后的写入只是写入到文件系统的page cache,并没有把数据持久化到磁盘。持久化磁盘由操作系统决定调用fsync。
MySQL提供了配置决定fsync的时机,当sync_binlog=0的时候,每次提交事务只写入page cache,不执行fsync。当sync_binlog=1的时候,表示每次提交事务都会执行fsync。当sync_binlog = N的时候,每次提交事务都写入page cache,累计多个事务才进行fsync。
显然,当sync_binlog = 1的时候,binlog日志不会丢失。当sync_binlog = N的时候,如果发生异常重启,会丢失N个事务的binlog日志。
STATEMENT
记录数据操作的原始SQL,可能引发主库备库因索引选择不一致,导致数据执行结果不一致。
ROW
ROW基于行复制,只记录哪条数据被修改.缺点:占空间。比如DELETE 语句,对于STATEMENT只占用1条SQL。而ROW格式则需要把所有记录的数据记录下来。
MIXED
对于可能引发主备不一致的命令使用ROW格式,否则使用STATEMTNT
对于每一次更新操作,MySQL都需要写入磁盘,然后需要找到对应那条记录并更新。IO成本较高和查找成本都很高。为了提高性能,MySQL会将更新操作写入redo log,并更新内存。INNODB引擎会在适当的时候将操作记录更新到磁盘。
[图片上传失败...(image-c6a1f2-1627716309698)]
undo log主要是记录了数据的逻辑变化,比如对应一条insear语句,undo log会记录一条delete语方便回退到更新前的值。
时刻A发生故障的话,由于binlog未写入,redo log回滚数据,两个日志数据是一致的。
时刻B发生故障,则需要判断binlog是否完整来决定如何恢复。
redo log和bin log的区别?
为什么redo log crash-safe,而bin log不可以?
MySQL三种重要日志
日志是MySQL的重要组成部分,其中对于开发而言不得不关注三种重要的日志,分别是二进制日志(bin log)、事务日志(redo log、undo log)。接下来详细介绍这三种日志。
binlog叫做二进制日志,主要是用于记录MySQL表的逻辑变化过程。在实际应用过程中,通常被用于主从复制和数据恢复。
事务执行过程中,会先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中。
事务提交后的写入只是写入到文件系统的page cache,并没有把数据持久化到磁盘。持久化磁盘由操作系统决定调用fsync。
MySQL提供了配置决定fsync的时机,当sync_binlog=0的时候,每次提交事务只写入page cache,不执行fsync。当sync_binlog=1的时候,表示每次提交事务都会执行fsync。当sync_binlog = N的时候,每次提交事务都写入page cache,累计多个事务才进行fsync。
显然,当sync_binlog = 1的时候,binlog日志不会丢失。当sync_binlog = N的时候,如果发生异常重启,会丢失N个事务的binlog日志。
STATEMENT
记录数据操作的原始SQL,可能引发主库备库因索引选择不一致,导致数据执行结果不一致。
ROW
ROW基于行复制,只记录哪条数据被修改.缺点:占空间。比如DELETE 语句,对于STATEMENT只占用1条SQL。而ROW格式则需要把所有记录的数据记录下来。
MIXED
对于可能引发主备不一致的命令使用ROW格式,否则使用STATEMTNT
对于每一次更新操作,MySQL都需要写入磁盘,然后需要找到对应那条记录并更新。IO成本较高和查找成本都很高。为了提高性能,MySQL会将更新操作写入redo log,并更新内存。INNODB引擎会在适当的时候将操作记录更新到磁盘。
[图片上传失败...(image-c6a1f2-1627716309698)]
undo log主要是记录了数据的逻辑变化,比如对应一条insear语句,undo log会记录一条delete语方便回退到更新前的值。
时刻A发生故障的话,由于binlog未写入,redo log回滚数据,两个日志数据是一致的。
时刻B发生故障,则需要判断binlog是否完整来决定如何恢复。
redo log和bin log的区别?
为什么redo log crash-safe,而bin log不可以?
如何查看oracle的日志文件
Oracle日志文件查看方法:
1、以sysdba权限用户登录数据库。
2、执行sql语句:
select * from v$logfile;3、结果显示即为日志路径:
4、另外还有其他的操作日志可用以下两个sql语句查询:select * from v$sql;--(#查看最近所作的操作)
select * fromv $sqlarea;--(#查看最近所作的操作)
mysql数据库日志怎么看
MySQL的日志文件模块启动后才会有日志记录。
开启日志服务:
在MY.INI里,MYSQLD项下添加log-bin=mysql。
如果只对某个库进行日志文件记录,那么再添加binlog-do-db=test,这样就只记录test数据库的日志,而放弃其他的。
添加完后,重新启动MYSQL的服务,日志文件开始工作了.
查看是否启用了日志命令:mysql>show variables like 'log_bin';
查看当前的日志命令:mysql> show master status;
看二进制日志文件用mysqlbinlog命令:shell>mysqlbinlog mail-bin.000001
mysql数据库日志怎么看
MySQL的日志文件模块启动后才会有日志记录。
开启日志服务:
在MY.INI里,MYSQLD项下添加log-bin=mysql。
如果只对某个库进行日志文件记录,那么再添加binlog-do-db=test,这样就只记录test数据库的日志,而放弃其他的。
添加完后,重新启动MYSQL的服务,日志文件开始工作了.
查看是否启用了日志命令:mysql>show variables like 'log_bin';
查看当前的日志命令:mysql> show master status;
看二进制日志文件用mysqlbinlog命令:shell>mysqlbinlog mail-bin.000001
journalctl不记录mysql启动日志
journalctl不记录MySQL启动日志的原因是因为MySQL服务的启动日志通常会被重定向到MySQL日志文件中,而不是被系统日志服务(如systemd-journald)记录。
MySQL是一个的进程,它有自己的日志记录机制。在MySQL配置文件中,可以设置日志文件的路径和级别。通常,MySQL的启动日志和其他运行日志(如错误日志、查询日志)会被记录在相应的日志文件中。
这种设计有几个好处。首先,MySQL日志文件可以更方便地进行管理和归档,不会和系统日志混合在一起。其次,MySQL日志文件中的日志信息更加详细和专业,可以提供更多有关MySQL服务的运行状态、错误信息和性能指标。
拓展内容:
除了MySQL,许多其他服务和应用程序也会将自己的日志信息记录到各自的日志文件中,而不是使用系统日志服务。这样做的好处是可以更好地控制日志记录的方式和内容,便于故障排查、性能分析和日志管理。
对于系统管理员来说,了解每个服务的日志记录方式是很重要的,以便在需要时查找和分析相关的日志信息。在处理问题时,可能需要同时查看系统日志和特定服务的日志,以全面了解发生了什么事情。
因此,在使用journalctl命令查看系统日志时,如果需要查看MySQL的启动日志或其他特定服务的日志,需要知道相应的日志文件路径,并使用适当的工具来查看和分析这些日志文件。
深入分析Oracle数据库日志文件(1)
作为Oracle DBA 我们有时候需要追踪数据误删除或用户的恶意操作情况 此时我们不仅需要查出执行这些操作的数据库账号 还需要知道操作是由哪台客户端(IP地址等)发出的 针对这些问题 一个最有效实用而又低成本的方法就是分析Oracle数据库的日志文件 本文将就Oracle日志分析技术做深入探讨 一 如何分析即LogMiner解释 从目前来看 分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMiner来进行 Oracle数据库的所有更改都记录在日志中 但是原始的日志信息我们根本无法看懂 而LogMiner就是让我们看懂日志信息的工具 从这一点上看 它和tkprof差不多 一个是用来分析日志信息 一个则是格式化跟踪文件 通过对日志的分析我们可以实现下面的目的 查明数据库的逻辑更改 侦察并更正用户的误操作 执行事后审计 执行变化分析 不仅如此 日志中记录的信息还包括 数据库的更改历史 更改类型(INSERT UPDATE DELETE DDL等) 更改对应的SCN号 以及执行这些操作的用户信息等 LogMiner在分析日志时 将重构等价的SQL语句和UNDO语句(分别记录在V$LOGMNR_CONTENTS视图的SQL_REDO和SQL_UNDO中) 这里需要注意的是等价语句 而并非原始SQL语句 例如 我们最初执行的是 delete a where c <> cyx ; 而LogMiner重构的是等价的 条DELETE语句 所以我们应该意识到V$LOGMNR_CONTENTS视图中显示的并非是原版的现实 从数据库角度来讲这是很容易理解的 它记录的是元操作 因为同样是 delete a where c <> cyx ; 语句 在不同的环境中 实际删除的记录数可能各不相同 因此记录这样的语句实际上并没有什么实际意义 LogMiner重构的是在实际情况下转化成元操作的多个单条语句 另外由于Oracle重做日志中记录的并非原始的对象(如表以及其中的列)名称 而只是它们在Oracle数据库中的内部编号(对于表来说是它们在数据库中的对象ID 而对于表中的列来说 对应的则是该列在表中的排列序号 COL COL 等) 因此为了使LogMiner重构出的SQL语句易于识别 我们需要将这些编号转化成相应的名称 这就需要用到数据字典(也就说LogMiner本身是可以不用数据字典的 详见下面的分析过程) LogMiner利用DBMS_LOGMNR_D BUILD()过程来提取数据字典信息 LogMiner包含两个PL/SQL包和几个视图 dbms_logmnr_d包 这个包只包括一个用于提取数据字典信息的过程 即dbms_logmnr_d build()过程 dbms_logmnr包 它有三个过程 add_logfile(name varchar options number) 用来添加/删除用于分析的日志文件 start_logmnr(start_scn number end_scn number start_time number end_time number dictfilename varchar options number) 用来开启日志分析 同时确定分析的时间/SCN窗口以及确认是否使用提取出来的数据字典信息 end_logmnr() 用来终止分析会话 它将回收LogMiner所占用的内存 与LogMiner相关的数据字典 v$logmnr_dictionary LogMiner可能使用的数据字典信息 因logmnr可以有多个字典文件 该视图用于显示这方面信息 v$logmnr_parameters 当前LogMiner所设定的参数信息 v$logmnr_logs 当前用于分析的日志列表 v$logmnr_contents 日志分析结果 二 Oracle i LogMiner的增强 支持更多数据/存储类型 链接/迁移行 CLUSTER表操作 DIRECT PATH插入以及DDL操作 在V$LOGMNR_CONTENTS的SQL_REDO中可以看到DDL操作的原句(CREATE USER除外 其中的密码将以加密的形式出现 而不是原始密码) 如果TX_AUDITING初始化参数设为TRUE 则所有操作的数据库账号将被记录 提取和使用数据字典的选项 现在数据字典不仅可以提取到一个外部文件中 还可以直接提取到重做日志流中 它在日志流中提供了操作当时的数据字典快照 这样就可以实现离线分析 允许对DML操作按事务进行分组 可以在START_LOGMNR()中设置MITTED_DATA_ONLY选项 实现对DML操作的分组 这样将按SCN的顺序返回已经提交的事务 支持SCHEMA的变化 在数据库打开的状态下 如果使用了LogMiner的DDL_DICT_TRACKING选项 Oracle i的LogMiner将自动对比最初的日志流和当前系统的数据字典 并返回正确的DDL语句 并且会自动侦察并标记当前数据字典和最初日志流之间的差别 这样即使最初日志流中所涉及的表已经被更改或者根本已经不存在 LogMiner同样会返回正确的DDL语句 在日志中记录更多列信息的能力 例如对于UPDATE操作不仅会记录被更新行的情况 还可以捕捉更多前影信息 支持基于数值的查询 Oracle i LogMiner在支持原有基于元数据(操作 对象等)查询的基础上 开始支持基于实际涉及到的数据的查询 例如涉及一个工资表 现在我们可以很容易地查出员工工资由 变成 的原始更新语句 而在之前我们只能选出所有的更新语句 三 Oracle i/ i的日志分析过程 LogMiner只要在实例起来的情况下都可以运行 LogMiner使用一个字典文件来实现Oracle内部对象名称的转换 如果没有这个字典文件 则直接显示内部对象编号 例如我们执行下面的语句 delete from C A where C = gototop and ROWID = AAABg AAFAAABQaAAH ; 如果没有字典文件 LogMiner分析出来的结果将是 delete from UNKNOWN OBJ# where COL = HEXTORAW( d a d ae ) and ROWID = AAABg AAFAAABQaAAH ; 如果想要使用字典文件 数据库至少应该出于MOUNT状态 然后执行dbms_logmnr_d build过程将数据字典信息提取到一个外部文件中 下面是具体分析步骤 确认设置了初始化参数 UTL_FILE_DIR 并确认Oracle对改目录拥有读写权限 然后启动实例 示例中UTL_FILE_DIR参数如下 SQL> show parameter utl NAME TYPE value utl_file_dir string /data /cyx/logmnr 这个目录主要用于存放dbms_logmnr_d build过程所产生的字典信息文件 如果不用这个 则可以不设 也就跳过下面一步 生成字典信息文件 exec dbms_logmnr_d build(dictionary_filename => dic ora dictionary_location => /data /cyx/logmnr ); 其中dictionary_location指的是字典信息文件的存放位置 它必须完全匹配UTL_FILE_DIR的值 例如 假设UTL_FILE_DIR=/data /cyx/logmnr/ 则上面这条语句会出错 只因为UTL_FILE_DIR后面多了一个 / 而在很多其它地方对这一 / 是不敏感的 dictionary_filename指的是放于字典信息文件的名字 可以任意取 当然我们也可以不明确写出这两个选项 即写成 exec dbms_logmnr_d build( dic ora /data /cyx/logmnr ); 如果你第一步的参数没有设 而直接开始这一步 Oracle会报下面的错误 ERROR at line : ORA : initialization parameter utl_file_dir is not set ORA : at SYS DBMS_LOGMNR_D line ORA : at SYS DBMS_LOGMNR_D line ORA : at line 需要注意的是 在oracle for Windows版中会出现以下错误 : : SQL> execute dbms_logmnr_d build( oradict ora c:oracleadminoralog ); BEGIN dbms_logmnr_d build( oradict ora c:oracleadminoralog ); END; * ERROR at line : ORA : Subscript outside of limit ORA : at SYS DBMS_LOGMNR_D line ORA : at line 解决办法 编辑 $ORACLE_HOME/rdbms/admindbmslmd sql 文件 把其中的 TYPE col_desc_array IS VARRAY( ) OF col_description; 改成 TYPE col_desc_array IS VARRAY( ) OF col_description; 保存文件 然后执行一遍这个脚本 : : SQL> @c:oracleora dbmsadmindbmslmd sql Package created Package body created No errors Grant succeeded 然后重新编译DBMS_LOGMNR_D包 : : SQL> alter package DBMS_LOGMNR_D pile body; Package body altered 之后重新执行dbms_logmnr_d build即可 : : SQL> execute dbms_logmnr_d build( oradict ora c:oracleadminoralog ); PL/SQL procere successfully pleted 添加需要分析的日志文件 SQL>exec dbms_logmnr add_logfile( logfilename=> /data /cyx/rac arch/arch_ _ arc options=>dbms_logmnr new); PL/SQL procere successfully pleted 这里的options选项有三个参数可以用 NEW 表示创建一个新的日志文件列表 ADDFILE 表示向这个列表中添加日志文件 如下面的例子 REMOV lishixin/Article/program/Oracle/201311/18949
深入分析Oracle数据库日志文件(1)
作为Oracle DBA 我们有时候需要追踪数据误删除或用户的恶意操作情况 此时我们不仅需要查出执行这些操作的数据库账号 还需要知道操作是由哪台客户端(IP地址等)发出的 针对这些问题 一个最有效实用而又低成本的方法就是分析Oracle数据库的日志文件 本文将就Oracle日志分析技术做深入探讨 一 如何分析即LogMiner解释 从目前来看 分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMiner来进行 Oracle数据库的所有更改都记录在日志中 但是原始的日志信息我们根本无法看懂 而LogMiner就是让我们看懂日志信息的工具 从这一点上看 它和tkprof差不多 一个是用来分析日志信息 一个则是格式化跟踪文件 通过对日志的分析我们可以实现下面的目的 查明数据库的逻辑更改 侦察并更正用户的误操作 执行事后审计 执行变化分析 不仅如此 日志中记录的信息还包括 数据库的更改历史 更改类型(INSERT UPDATE DELETE DDL等) 更改对应的SCN号 以及执行这些操作的用户信息等 LogMiner在分析日志时 将重构等价的SQL语句和UNDO语句(分别记录在V$LOGMNR_CONTENTS视图的SQL_REDO和SQL_UNDO中) 这里需要注意的是等价语句 而并非原始SQL语句 例如 我们最初执行的是 delete a where c <> cyx ; 而LogMiner重构的是等价的 条DELETE语句 所以我们应该意识到V$LOGMNR_CONTENTS视图中显示的并非是原版的现实 从数据库角度来讲这是很容易理解的 它记录的是元操作 因为同样是 delete a where c <> cyx ; 语句 在不同的环境中 实际删除的记录数可能各不相同 因此记录这样的语句实际上并没有什么实际意义 LogMiner重构的是在实际情况下转化成元操作的多个单条语句 另外由于Oracle重做日志中记录的并非原始的对象(如表以及其中的列)名称 而只是它们在Oracle数据库中的内部编号(对于表来说是它们在数据库中的对象ID 而对于表中的列来说 对应的则是该列在表中的排列序号 COL COL 等) 因此为了使LogMiner重构出的SQL语句易于识别 我们需要将这些编号转化成相应的名称 这就需要用到数据字典(也就说LogMiner本身是可以不用数据字典的 详见下面的分析过程) LogMiner利用DBMS_LOGMNR_D BUILD()过程来提取数据字典信息 LogMiner包含两个PL/SQL包和几个视图 dbms_logmnr_d包 这个包只包括一个用于提取数据字典信息的过程 即dbms_logmnr_d build()过程 dbms_logmnr包 它有三个过程 add_logfile(name varchar options number) 用来添加/删除用于分析的日志文件 start_logmnr(start_scn number end_scn number start_time number end_time number dictfilename varchar options number) 用来开启日志分析 同时确定分析的时间/SCN窗口以及确认是否使用提取出来的数据字典信息 end_logmnr() 用来终止分析会话 它将回收LogMiner所占用的内存 与LogMiner相关的数据字典 v$logmnr_dictionary LogMiner可能使用的数据字典信息 因logmnr可以有多个字典文件 该视图用于显示这方面信息 v$logmnr_parameters 当前LogMiner所设定的参数信息 v$logmnr_logs 当前用于分析的日志列表 v$logmnr_contents 日志分析结果 二 Oracle i LogMiner的增强 支持更多数据/存储类型 链接/迁移行 CLUSTER表操作 DIRECT PATH插入以及DDL操作 在V$LOGMNR_CONTENTS的SQL_REDO中可以看到DDL操作的原句(CREATE USER除外 其中的密码将以加密的形式出现 而不是原始密码) 如果TX_AUDITING初始化参数设为TRUE 则所有操作的数据库账号将被记录 提取和使用数据字典的选项 现在数据字典不仅可以提取到一个外部文件中 还可以直接提取到重做日志流中 它在日志流中提供了操作当时的数据字典快照 这样就可以实现离线分析 允许对DML操作按事务进行分组 可以在START_LOGMNR()中设置MITTED_DATA_ONLY选项 实现对DML操作的分组 这样将按SCN的顺序返回已经提交的事务 支持SCHEMA的变化 在数据库打开的状态下 如果使用了LogMiner的DDL_DICT_TRACKING选项 Oracle i的LogMiner将自动对比最初的日志流和当前系统的数据字典 并返回正确的DDL语句 并且会自动侦察并标记当前数据字典和最初日志流之间的差别 这样即使最初日志流中所涉及的表已经被更改或者根本已经不存在 LogMiner同样会返回正确的DDL语句 在日志中记录更多列信息的能力 例如对于UPDATE操作不仅会记录被更新行的情况 还可以捕捉更多前影信息 支持基于数值的查询 Oracle i LogMiner在支持原有基于元数据(操作 对象等)查询的基础上 开始支持基于实际涉及到的数据的查询 例如涉及一个工资表 现在我们可以很容易地查出员工工资由 变成 的原始更新语句 而在之前我们只能选出所有的更新语句 三 Oracle i/ i的日志分析过程 LogMiner只要在实例起来的情况下都可以运行 LogMiner使用一个字典文件来实现Oracle内部对象名称的转换 如果没有这个字典文件 则直接显示内部对象编号 例如我们执行下面的语句 delete from C A where C = gototop and ROWID = AAABg AAFAAABQaAAH ; 如果没有字典文件 LogMiner分析出来的结果将是 delete from UNKNOWN OBJ# where COL = HEXTORAW( d a d ae ) and ROWID = AAABg AAFAAABQaAAH ; 如果想要使用字典文件 数据库至少应该出于MOUNT状态 然后执行dbms_logmnr_d build过程将数据字典信息提取到一个外部文件中 下面是具体分析步骤 确认设置了初始化参数 UTL_FILE_DIR 并确认Oracle对改目录拥有读写权限 然后启动实例 示例中UTL_FILE_DIR参数如下 SQL> show parameter utl NAME TYPE value utl_file_dir string /data /cyx/logmnr 这个目录主要用于存放dbms_logmnr_d build过程所产生的字典信息文件 如果不用这个 则可以不设 也就跳过下面一步 生成字典信息文件 exec dbms_logmnr_d build(dictionary_filename => dic ora dictionary_location => /data /cyx/logmnr ); 其中dictionary_location指的是字典信息文件的存放位置 它必须完全匹配UTL_FILE_DIR的值 例如 假设UTL_FILE_DIR=/data /cyx/logmnr/ 则上面这条语句会出错 只因为UTL_FILE_DIR后面多了一个 / 而在很多其它地方对这一 / 是不敏感的 dictionary_filename指的是放于字典信息文件的名字 可以任意取 当然我们也可以不明确写出这两个选项 即写成 exec dbms_logmnr_d build( dic ora /data /cyx/logmnr ); 如果你第一步的参数没有设 而直接开始这一步 Oracle会报下面的错误 ERROR at line : ORA : initialization parameter utl_file_dir is not set ORA : at SYS DBMS_LOGMNR_D line ORA : at SYS DBMS_LOGMNR_D line ORA : at line 需要注意的是 在oracle for Windows版中会出现以下错误 : : SQL> execute dbms_logmnr_d build( oradict ora c:oracleadminoralog ); BEGIN dbms_logmnr_d build( oradict ora c:oracleadminoralog ); END; * ERROR at line : ORA : Subscript outside of limit ORA : at SYS DBMS_LOGMNR_D line ORA : at line 解决办法 编辑 $ORACLE_HOME/rdbms/admindbmslmd sql 文件 把其中的 TYPE col_desc_array IS VARRAY( ) OF col_description; 改成 TYPE col_desc_array IS VARRAY( ) OF col_description; 保存文件 然后执行一遍这个脚本 : : SQL> @c:oracleora dbmsadmindbmslmd sql Package created Package body created No errors Grant succeeded 然后重新编译DBMS_LOGMNR_D包 : : SQL> alter package DBMS_LOGMNR_D pile body; Package body altered 之后重新执行dbms_logmnr_d build即可 : : SQL> execute dbms_logmnr_d build( oradict ora c:oracleadminoralog ); PL/SQL procere successfully pleted 添加需要分析的日志文件 SQL>exec dbms_logmnr add_logfile( logfilename=> /data /cyx/rac arch/arch_ _ arc options=>dbms_logmnr new); PL/SQL procere successfully pleted 这里的options选项有三个参数可以用 NEW 表示创建一个新的日志文件列表 ADDFILE 表示向这个列表中添加日志文件 如下面的例子 REMOV lishixin/Article/program/Oracle/201311/18949
mysql的几种日志记录
重做日志(redo log)
作用:
确保事务的持久性。
防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。
内容:
物理格式的日志,记录的是物理数据页面的修改的信息,其redo log是顺序写入redo log file的物理文件中去的。
什么时候产生:
事务开始之后就产生redo log,redo log的落盘并不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入redo log文件中。
什么时候释放:
当对应事务的脏页写入到磁盘之后,redo log的使命也就完成了,重做日志占用的空间就可以重用(被覆盖)。
对应的物理文件:
默认情况下,对应的物理文件位于数据库的data目录下的ib_logfile1&ib_logfile2
innodb_log_group_home_dir 指定日志文件组所在的路径,默认./ ,表示在数据库的数据目录下。
innodb_log_files_in_group 指定重做日志文件组中文件的数量,默认2
关于文件的大小和数量,由一下两个参数配置:
innodb_log_file_size 重做日志文件的大小。
innodb_mirrored_log_groups 指定了日志镜像文件组的数量,默认1
其他:
很重要一点,redo log是什么时候写盘的?前面说了是在事物开始之后逐步写盘的。
之所以说重做日志是在事务开始之后逐步写入重做日志文件,而不一定是事务提交才写入重做日志缓存,
原因就是,重做日志有一个缓存区Innodb_log_buffer,Innodb_log_buffer的默认大小为8M(这里设置的16M),Innodb存储引擎先将重做日志写入innodb_log_buffer中。
回滚日志(undo log)
作用:
保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读
内容:
逻辑格式的日志,在执行undo的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的,这一点是不同于redo log的。
什么时候产生:
事务开始之前,将当前是的版本生成undo log,undo 也会产生 redo 来保证undo log的可靠性
什么时候释放:
当事务提交之后,undo log并不能立马被删除,
而是放入待清理的链表,由purge线程判断是否由其他事务在使用undo段中表的上一个事务之前的版本信息,决定是否可以清理undo log的日志空间。
对应的物理文件:
MySQL5.6之前,undo表空间位于共享表空间的回滚段中,共享表空间的默认的名称是ibdata,位于数据文件目录中。
MySQL5.6之后,undo表空间可以配置成的文件,但是提前需要在配置文件中配置,完成数据库初始化后生效且不可改变undo log文件的个数
如果初始化数据库之前没有进行相关配置,那么就无法配置成的表空间了。
关于MySQL5.7之后的undo 表空间配置参数如下
innodb_undo_directory = /data/undospace/ --undo表空间的存放目录
innodb_undo_logs = 128 --回滚段为128KB
innodb_undo_tablespaces = 4 --指定有4个undo log文件
二进制日志(binlog):
作用:
用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步。
用于数据库的基于时间点的还原。
内容:
逻辑格式的日志,可以简单认为就是执行过的事务中的sql语句。
但又不完全是sql语句这么简单,而是包括了执行的sql语句(增删改)反向的信息,也就意味着delete对应着delete本身和其反向的insert;update对应着update执行前后的版本的信息;insert对应着delete和insert本身的信息。
在使用mysqlbinlog解析binlog之后一些都会大白。
因此可以基于binlog做到类似于oracle的闪回功能,其实都是依赖于binlog中的日志记录。
什么时候产生:
事务提交的时候,一次性将事务中的sql语句(一个事物可能对应多个sql语句)按照一定的格式记录到binlog中。
这里与redo log很明显的差异就是redo log并不一定是在事务提交的时候刷新到磁盘,redo log是在事务开始之后就开始逐步写入磁盘。
因此对于事务的提交,即便是较大的事务,提交(commit)都是很快的,但是在开启了bin_log的情况下,对于较大事务的提交,可能会变得比较慢一些。
这是因为binlog是在事务提交的时候一次性写入的造成的,这些可以通过测试验证。
什么时候释放:
binlog的默认是保持时间由参数expire_logs_days配置,也就是说对于非活动的日志文件,在生成时间超过expire_logs_days配置的天数之后,会被自动删除。
对应的物理文件:
配置文件的路径为log_bin_basename,binlog日志文件按照指定大小,当日志文件达到指定的最大的大小之后,进行滚动更新,生成新的日志文件。
对于每个binlog日志文件,通过一个统一的index文件来组织。
慢查询日志:
慢日志记录执行时间过长和没有使用索引的查询语句,报错select、update、delete以及insert语句,慢日志只会记录执行成功的语句。
查看慢查询时间:
show variables like “long_query_time”;默认10s
查看慢查询日志路径:
show variables like “%slow%”;
开启慢日志
set global slow_query_log=1;
mysql的几种日志记录
标签:basename逻辑最大的指定bin判断purgeselectredo
如何查看mysql数据库操作记录日志
一.错误日志
错误日志在Mysql数据库中很重要,它记录着mysqld启动和停止,以及服务器在运行过程中发生的任何错误的相关信息。
1.配置信息
--log-error=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认hostname.err做为文件名,默认存放在DATADIR目录中。
也可以将log-error配置到my.cnf文件中,这样就省去了每次在启动mysqld时都手工指定--log-error.例如:
[mysql@test2]$ vi /etc/my.cnf
# The MySQL server
[mysqld]
....
log-error = /var/lib/mysql/test2_mysqld.err
.....
2.错误信息样板
080313 05:21:55 mysqld started
080313 5:21:55 InnoDB: Started; log sequence number 0 43655
080313 5:21:55 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.0.26-standard-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Edition - Standard (GPL)
080313 5:24:13 [Note] /usr/local/mysql/bin/mysqld: Normal shutdown
080313 5:24:13 InnoDB: Starting shutdown...
080313 5:24:16 InnoDB: Shutdown completed; log sequence number 0 43655
080313 5:24:16 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete
080313 05:24:16 mysqld ended
080313 05:24:47 mysqld started
080313 5:24:47 InnoDB: Started; log sequence number 0 43655
080313 5:24:47 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.0.26-standard-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Edition - Standard (GPL)
080313 5:33:49 [Note] /usr/local/mysql/bin/mysqld: Normal shutdown
三.查询日志
查询日志记录了clinet的所有的语句。
Note:由于log日志记录了数据库所有操作,对于访问频繁的系统,此种日志会造成性能影响,建议关闭。
1.配置信息
--log=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认为主机名(hostname)做为文件名,默认存放在DATADIR目录中。
也可以将log配置到my.cnf文件中,这样就省去了每次在启动mysqld时都手工指定--log.例如:
# The MySQL server
[mysqld]
......
#query-log
log = /var/lib/mysql/query_log.log
......
2.读取查询日志
查询日志是纯文本格可,可以使用OS文本读取工具直接打开查看。例如:
[mysql@test2]$ tail -n 15 query_log.log
080313 7:58:28 17 Query show tables
080313 8:07:45 17 Quit
080313 10:01:48 18 Connect root@localhost on
080313 10:02:38 18 Query SELECT DATABASE()
18 Init DB test
080313 10:02:42 18 Query show tables
080313 10:03:07 18 Query select * from pet
080313 10:06:26 18 Query insert into pet values('hunter','yxyup','cat','f','1996-04-29',null)
080313 10:06:39 18 Query select * from pet
080313 10:07:13 18 Query update pet set sex='m' where name='hunter'
080313 10:07:38 18 Query delete from pet where name='hunter'
080313 10:13:48 18 Query desc test8
080313 10:14:13 18 Query create table t1(id int,name char(10))
080313 10:14:41 18 Query alter table t1 add sex char(2)
[mysql@test2]$
四.慢查询日志
慢查询日志是记录了执行时间超过参数long_query_time(单位是秒)所设定值的SQL语句日志。
Note:慢查询日志对于我们发现性能有问题的SQL有很帮助,建议使用并经常分析
1.配置信息
--log-slow-queries=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认为hostname-slow.log做为文件名,默认存放在DATADIR目录中。
也可以将log-slow-queries配置到my.cnf文件中,这样就省去了每次在启动mysqld时都手工指定--log-slow-queries.例如:
# The MySQL server
[mysqld]
......
#slow-query-log
log-slow-queries = /var/lib/mysql/slow_query_log.log
......
2.读取慢查询日志
[mysql@test2]$ cat slow_query_log.log
/usr/local/mysql/bin/mysqld, Version: 5.0.26-standard-log. started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 080313 5:41:46
# User@Host: root[root] @ localhost []
# Query_time: 108 Lock_time: 0 Rows_sent: 0 Rows_examined: 8738
use test;
select count(1) from t1 a, t1 b,t1 c where a.id=b.id and b.name=c.name;
# Time: 080313 5:52:04
# User@Host: root[root] @ localhost []
# Query_time: 583 Lock_time: 0 Rows_sent: 0 Rows_examined: 508521177
select count(1) from t1 a, t1 b where a.id=b.id;
/usr/local/mysql/bin/mysqld, Version: 5.0.26-standard-log. started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 080313 10:39:59
# User@Host: root[root] @ localhost []
# Query_time: 11 Lock_time: 0 Rows_sent: 4537467 Rows_examined: 4537467
use test;
select id from tail;
如果慢查询日志记录很多可以使用mysqlmpslow进行分类汇总
[mysql@test2]$ mysqlmpslow slow_query_log.log
Reading mysql slow query log from slow_query_log.log
Count: 1 Time=583.00s (583s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
select count(N) from t1 a, t1 b where a.id=b.id
Count: 1 Time=108.00s (108s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
select count(N) from t1 a, t1 b,t1 c where a.id=b.id and b.name=c.name
Count: 1 Time=11.00s (11s) Lock=0.00s (0s) Rows=4537467.0 (4537467), root[root]@localhost
select id from tail;
mysql有以下几种日志:
错误日志: -log-err
查询日志: -log
慢查询日志: -log-slow-queries
更新日志: -log-update
二进制日志: -log-bin
在mysql的安装目录下,打开my.ini,在后面加上上面的参数,保存后重启mysql服务就行了。
例如:
#Enter a name for the binary log. Otherwise a default name will be used.
#log-bin=
#Enter a name for the query log file. Otherwise a default name will be used.
#log=
#Enter a name for the error log file. Otherwise a default name will be used.
log-error=
#Enter a name for the update log file. Otherwise a default name will be used.
#log-update=
查看日至:
1. 首先确认你日志是否启用了
mysql>show variables like 'log_bin';
如果启用了,即ON
那日志文件就在mysql的安装目录的data目录下
cat/tail 日志文件名
2. 怎样知道当前的日志
mysql> show master status;
3. 查看从某一段时间到某一段时间的日志
mysqlbinlog --start-datetime='2008-01-19 00:00:00'
--stop-datetime='2008-01-30 00:00:00' /var/log/mysql/mysql-bin.000006
> mysqllog1.log