有時候我們會不小心對一個大表進行了 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就是日誌文件啦,用記事本打開他們,慢慢看吧,希望你找到你要的信息。