本文目錄一覽:
如何查看mysql資料庫操作記錄日誌
1、首先確認你日誌是否啟用了mysqlshow variables like ‘log_bin’。
2、如果啟用了,即ON,那日誌文件就在mysql的安裝目錄的data目錄下。
3、怎樣知道當前的日誌mysql show master status。
4、看二進位日誌文件用mysqlbinlog,shellmysqlbinlog mail-bin.000001或者shellmysqlbinlog mail-bin.000001 | tail,Windows 下用類似的。
MySQL的日誌操作:
1、首先,登陸mysql後,執行sql語句:show variables like ‘log_bin’。
2、#錯誤日誌log-errol開啟方式:在my.ini的[mysqld]選項下:添加代碼:log-error=E:\log-error.txt。
記錄內容:主要是記錄啟動、運行或停止mysqld時出現的致命性問題,都是系統級的錯誤記錄。
3、#查詢日誌:log,開啟方式:在my.ini的[mysqld]選項下:添加代碼:log=E:/mysql_log.txt。
4、#二進位日誌:log-bin,開啟方式:在my.ini的[mysqld]選項下:添加代碼:log-bin=E:/mysql_log_bin,記錄內容:主要是記錄所有的更改數據的語句,可使用mysqlbinlog命令恢複數據。
MySQL日誌實時查看執行語句以及更新日誌的教程
查看MySQL執行的語句
想實時查看MySQL所執行的sql語句,類似mssql里的事件探查器。對my.ini文件進行設置,打開文件進行修改:
basedir=E:/MySQL 4.0.12 #bind-address=192.168.15.196 datadir=E:/MySQL 4.0.12/data #language=E:/MySQL 4.0.12/share/your language directory #slow query log#=slowqueris.log #tmpdir#= #port=3306 #set-variable=key_buffer=16M
ong_query_time =1 –是指執行超過多久的sql會被log下來,這裡是1秒
log-slow-queries=slowqueris.log –將查詢返回較慢的語句進行記錄
log-queries-not-using-indexes = nouseindex.log –就是字面意思,log下來沒有使用索引的query
log=mylog.log –對所有執行語句進行記錄
以上參數開啟後,可能會影響MySQL性能,在生產環境下建議關閉
如何使用新的更新日誌
如果你只使用一個更新日誌,你只須清空日誌文件,然後移走舊的更新日誌文件到一個備份中,然後啟用新的更新日誌。
用下列方法可以強制伺服器啟用新的更新日誌:
mysqladmin flush-logs
你一般需要在命令行提供使用的`資料庫用戶:
mysqladmin –u root –p flush-logs mysqladmin refresh
你一般需要在命令行提供使用的資料庫用戶:
mysqladmin –u root –p refresh
如果你正在使用MySQL 3.21或更早的版本,你必須使用mysqladmin refresh。
SQL命令
FLUSH LOGS
重啟伺服器
上述方法都具有這樣的功能:
關閉並且再打開標準和更新記錄文件。如果你指定了一個沒有擴展名的更新記錄文件,新的更新記錄文件的擴展數字將相對先前的文件加1。
mysqlFLUSH LOGS;
如何使用新的常規日誌
用上面的方法同樣可以強制更新常規日誌。
要準備備份常規日誌,其步驟可能複雜一些:
$ cd mysql-data-directory$ mv mysql.log mysql.old$ mysqladmin flush-tables
然後做一個備份並刪除「mysql.old」。
如何查看mysql資料庫操作記錄日誌?
有時候我們會不小心對一個大表進行了 update,比如說寫錯了 where 條件……
此時,如果 kill 掉 update 線程,那回滾 undo log 需要不少時間。如果放置不管,也不知道 update 會持續多久。
那我們能知道 update 的進度么?
實驗
我們先創建一個測試資料庫:
快速創建一些數據:
連續執行同樣的 SQL 數次,就可以快速構造千萬級別的數據:
查看一下總的行數:
我們來釋放一個大的 update:
然後另起一個 session,觀察 performance_schema 中的信息:
可以看到,performance_schema 會列出當前 SQL 從引擎獲取的行數。
等 SQL 結束後,我們看一下 update 從引擎總共獲取了多少行:
可以看到該 update 從引擎總共獲取的行數是表大小的兩倍,那我們可以估算:update 的進度 = (rows_examined) / (2 * 錶行數)
?小貼士
information_schema.tables 中,提供了對錶行數的估算,比起使用 select count(1) 的成本低很多,幾乎可以忽略不計。
那麼是不是所有的 update,從引擎中獲取的行數都會是表大小的兩倍呢?這個還是要分情況討論的,上面的 SQL 更新了主鍵,如果只更新內容而不更新主鍵呢?我們來試驗一下:
等待 update 結束,查看 row_examined,發現其剛好是表大小:
那我們怎麼準確的這個倍數呢?
一種方法是靠經驗:update 語句的 where 中會掃描多少行,是否修改主鍵,是否修改唯一鍵,以這些條件來估算係數。
另一種方法就是在同樣結構的較小的表上試驗一下,獲取倍數。
這樣,我們就能準確估算一個大型 update 的進度了。
原創文章,作者:LCYIU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/331016.html