有时候我们会不小心对一个大表进行了 update,比如说写错了 where 条件......
此时,如果 kill 掉 update 线程,那回滚 undo log 需要不少时间。如果放置不管,也不知道 update 会持续多久。
那我们能知道 update 的进度么?
实验
我们先创建一个测试数据库:
那我们怎么准确的这个倍数呢?
一种方法是靠经验:update 语句的 where 中会扫描多少行,是否修改主键,是否修改唯一键,以这些条件来估算系数。
另一种方法就是在同样结构的较小的表上试验一下,获取倍数。
这样,我们就能准确估算一个大型 update 的进度了。
B. 如何在MySql中记录SQL日志记录
一.错误日志
错误日志在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
C. 如何查看sql数据库操作日志
这可能是因为该数据库: 处于可疑模式。 不再存在。 处于单用户模式,并且唯一可用的连接已由其他用户或事物使用。 已被分离。 已设置为 RESTRICTED_USER 状态。 处于脱机状态。 设置为紧急状态。 不具有映射到用户的登录帐户,或者该用户已被拒绝访问。 此外,该登录帐户可能是多个组的成员,且其中一个组的默认数据库在连接时不可用。 SQL Server 2005 在 SQL Server 2005 中,可以使用 sqlcmd 实用程序更改默认数据库。为此,请按照下列步骤操作: 1. 单击“开始”,单击“运行”,键入 cmd,然后按 Enter。 2. 根据 SQL Server 登录使用的身份验证种类,请使用以下方法之一: 如果 SQL Server 登录使用 Microsoft Windows 身份验证连接到该实例,请在命令提示符处键入以下内容,然后按 Enter: sqlcmd –E -S InstanceName –d master 如果 SQL Server 登录使用 SQL Server 身份验证连接到该实例,请在命令提示符处键入以下内容,然后按 Enter: sqlcmd -S InstanceName -d master -U SQLLogin -P Password 注意:InstanceName 是要连接到的 SQL Server 2005 实例的名称的占位符。SQLLogin 是已删除其默认数据库的 SQL Server 登录的占位符。Password 是 SQL Server 登录密码的占位符。 3. 在 sqlcmd 提示符处,键入以下内容,然后按 Enter: Alter LOGIN SQLLogin WITH DEFAULT_DATABASE = AvailDBName 注意:AvailDBName 是可由实例中 SQL Server 登录访问的现有数据库的名称的占位符。 4. 在 sqlcmd 提示符处,键入 GO,然后按 Enter。 SQL Server 2000 和 SQL Server 7.0 在 SQL Server 2000 和 SQL Server 7.0 中,可以使用 osql 实用程序更改默认数据库。为此,请按照下列步骤操作: 1. 在命令提示符处,键入以下内容,然后按 Enter: C:\>osql -E 2. 在“osql”提示符处,键入以下内容,然后按 Enter: 1>sp_defaultdb 'user's_login', 'master' 3. 在第二个提示符处,键入以下内容,然后按 Enter: 2>go 更简单明了的: 无法打开用户默认数据库,登录失败,这也是SQL Server使用者熟悉的问题之一。在使用企业管理器、查询分析器、各类工具和应用软件的时候,只要关系到连接SQL Server数据库的时候,都有可能会碰到此问题,引起此错误发生的原因比较多,下面我们就来详细分析引起此问题的原因以及解决办法。 一、原因 登录帐户的默认数据库被删除。
D. 如何在MySql中记录SQL日志记录
My
SQL可以用下面方法跟踪sql
语句,以下方法以Windows平台为例,linux雷同:
1
配置my.ini文件(在安装目录,linux下文件名为my.cnf
查找到[mysqld]区段,增加日志的配置,如下示例:[mysqld]log=C:/temp/mysql.log
log_slow_queries=C:/temp/mysql_slow.log
long_query_time=1
log指示日志文件存放目录;
log_slow_queries指示记录执行时间长的sql日志目录;
long_query_time指示多长时间算是执行时间长,单位s。
Linux下这些配置项应该已经存在,只是被注释掉了,可以去掉注释。但直接添加配置项也OK啦。
2
重新启动mysql服务。注意事项:A日志存放目录必须提前存在,否则不能记录日志。这里也局势C:/temp目录必须已经存在
B
日志文件是linux格式的文本,建议用ultraEdit打开,转换为dos格式查看(否则没有换行,看不懂的)
C
服务在启动状态下不能删除日志文件,否则就无法记录sql语句了。
D
不能用ultraEdit直接清除文件内容后保存,否则也记录不下来了。需要重启服务,如果ultraEdit保存了.bak,后记录到此文件中。
E
可以用notepad清除文本后保存,可以继续记录日志。
E. 如何用phpmyadmin记录sql用户操作日志
1. 启用查询日志,把这个在/etc/my.cnf在[mysqld]部分log = /path/to/query.log
这个日志文件会变得非常大的一个繁忙的服务器上 更新: 因为MySQL 5.1.12的你general_log=1
与MySQL 5.1.29,该log选项已被否决。来指定general_log_file=/path/to/query.log
代替。看
2. 就拿这个回答另一个相关的问题一起来看看。它显示了如何启用,禁用和看直播服务器日志而不需要重新启动。 登录mysql的所有查询 这里是一个总结: 如果你不想或者无法重新启动MySQL服务器,你可以继续这样你运行的服务器上: 创建你的日志表(见答案) 启用查询日志记录的数据库上 (请注意,字符串'表'应该从字面上,而不是取代放任何表感谢尼古拉pg林)SET global general_log = 1;
SET global log_output = 'table';
查看日志select * from mysql.general_log
禁止对数据库的查询记录SET global general_log = 0;
3. 您可以禁用或启用的一般查询日志(记录所有查询)与SET GLOBAL general_log = 1 # (or 0 to disable)
4. MyAdmin 4.0 CodeGo.net,你去>监视器。在那里,您可以启用慢查询日志和一般日志,看现场监控,选择图表的一部分,请参阅相关的查询和分析。
5. 你可以分析象PT-查询顾问的日志开源工具和有工具,以及像MONyog,MEM,JetProfiler等。 你可以参考在查询分析器工具。
F. 请教查看SQL SERVER操作日志详细记录的相关推荐
您好,很高兴为您解答。
在SQL Server 7.0和SQL Server2000中,可以用下面的命令查看:
DBCC log ( {dbid|dbname}, [, type={0|1|2|3|4}] )
参数:
Dbid or dbname - 任一数据库的ID或名字
type - 输出结果的类型:
0 - 最少信息(operation, context, transaction id)
1 - 更多信息(plus flags, tags, row length)
2 - 非常详细的信息(plus object name, index name,page id, slot id)
3 - 每种操作的全部信息
4 - 每种操作的全部信息加上该事务的16进制信息
默认 type = 0
要查看MSATER数据库的事务日志可以用以下命令:
DBCC log (master)
释放日志空间
1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(客户资料)
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库
b.在我的电脑中删除LOG文件
c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库
此法将生成新的LOG,大小只有500多K
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
a.分离
E X E C sp_detach_db @dbname = 'pubs'
b.删除日志文件
c.再附加
E X E C sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs.mdf'
5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
--SQL语句设置方式:
E X E C sp_dboption '数据库名', 'autoshrink', 'TRUE'
6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小)
--SQL语句的设置方式:
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)
特别注意:
请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
另外提供一种更简单的方法,建议大家使用。
更简单的方法:
1。右建数据库属性窗口--故障还原模型--设为简单
2。右建数据库所有任务--收缩数据库
3。右建数据库属性窗口--故障还原模型--设为大容量日志记录
G. 如何查看sql数据 操作记录日志
方法一:
可以通过执行该命令来查看错误日志信息:exec xp_readerrorlog
方法二:
在SQL SERVER Management Studio中连接该sql server实例,object Explorer中查找Management->SQL Server logs->右键选view-》选择你要看的日志信息(sql server log or sql server and Windows log)
方法三:
去安装路径下去找你的log文件,我的默认实例路径如下
driver:\SQL Server 2008 R2\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ERRORLOG
H. 如何用phpmyadmin记录sql用户操作日志
1. 启用查询日志,把这个在/etc/my.cnf在[mysqld]部分log = /path/to/query.log
这个日志文件会变得非常大的一个繁忙的服务器上 更新: 因为MySQL 5.1.12的你general_log=1
与MySQL 5.1.29,该log选项已被否决。来指定general_log_file=/path/to/query.log
代替。看
2. 就拿这个回答另一个相关的问题一起来看看。它显示了如何启用,禁用和看直播服务器日志而不需要重新启动。 登录mysql的所有查询 这里是一个总结: 如果你不想或者无法重新启动MySQL服务器,你可以继续这样你运行的服务器上: 创建你的日志表(见答案) 启用查询日志记录的数据库上 (请注意,字符串'表'应该从字面上,而不是取代放任何表感谢尼古拉pg林)SET global general_log = 1;
SET global log_output = 'table';
查看日志select * from mysql.general_log
禁止对数据库的查询记录SET global general_log = 0;
3. 您可以禁用或启用的一般查询日志(记录所有查询)与SET GLOBAL general_log = 1 # (or 0 to disable)
4. MyAdmin 4.0 CodeGo.net,你去>监视器。在那里,您可以启用慢查询日志和一般日志,看现场监控,选择图表的一部分,请参阅相关的查询和分析。
5. 你可以分析象PT-查询顾问的日志开源工具和有工具,以及像MONyog,MEM,JetProfiler等。 你可以参考在查询分析器工具。
I. 如何查看sql数据库操作日志
查看sql数据库操作日志的方法步骤:
1、用windows身份验证登陆数据库,点击【连接】;
按以上步骤操作即可以查看操作日志。
J. 如何查看sql数据库操作日志
找到SQL
server,点属性,点开advance选项卡,里面有个mp
directory
后面那个目录就是你的日志文件存放的目录
这时你复制那个目录下来,在资源管理器中打开那个目录,里面的ERORRLOG就是日志文件啦,用记事本打开他们,慢慢看吧,希望你找到你要的信息。