有時(shí)候我們會(huì)不小心對(duì)一個(gè)大表進(jìn)行了 update,比如說寫錯(cuò)了 where 條件......

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供清豐企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為清豐眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
此時(shí),如果 kill 掉 update 線程,那回滾 undo log 需要不少時(shí)間。如果放置不管,也不知道 update 會(huì)持續(xù)多久。
那我們能知道 update 的進(jìn)度么?
實(shí)驗(yàn)
我們先創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)庫:
快速創(chuàng)建一些數(shù)據(jù):
連續(xù)執(zhí)行同樣的 SQL 數(shù)次,就可以快速構(gòu)造千萬級(jí)別的數(shù)據(jù):
查看一下總的行數(shù):
我們來釋放一個(gè)大的 update:
然后另起一個(gè) session,觀察 performance_schema 中的信息:
可以看到,performance_schema 會(huì)列出當(dāng)前 SQL 從引擎獲取的行數(shù)。
等 SQL 結(jié)束后,我們看一下 update 從引擎總共獲取了多少行:
可以看到該 update 從引擎總共獲取的行數(shù)是表大小的兩倍,那我們可以估算:update 的進(jìn)度 = (rows_examined) / (2 * 表行數(shù))
????小貼士
information_schema.tables 中,提供了對(duì)表行數(shù)的估算,比起使用 select count(1) 的成本低很多,幾乎可以忽略不計(jì)。
那么是不是所有的 update,從引擎中獲取的行數(shù)都會(huì)是表大小的兩倍呢?這個(gè)還是要分情況討論的,上面的 SQL 更新了主鍵,如果只更新內(nèi)容而不更新主鍵呢?我們來試驗(yàn)一下:
等待 update 結(jié)束,查看 row_examined,發(fā)現(xiàn)其剛好是表大小:
那我們?cè)趺礈?zhǔn)確的這個(gè)倍數(shù)呢?
一種方法是靠經(jīng)驗(yàn):update 語句的 where 中會(huì)掃描多少行,是否修改主鍵,是否修改唯一鍵,以這些條件來估算系數(shù)。
另一種方法就是在同樣結(jié)構(gòu)的較小的表上試驗(yàn)一下,獲取倍數(shù)。
這樣,我們就能準(zhǔn)確估算一個(gè)大型 update 的進(jìn)度了。
1.首先確認(rèn)你日志是否啟用了
MySQLshow variables like 'log_bin';
2.如果啟用了,即ON那日志文件就在MySQL的安裝目錄的data目錄下
3.當(dāng)前的日志
MySQL show master status;
4.看二進(jìn)制日志文件用MySQLbinlog
shellMySQLbinlog mail-bin.000001
或者
shellMySQLbinlog mail-bin.000001 | tail
通用查詢?nèi)罩究梢源娣诺揭粋€(gè)文本文件或者表中,所有連接和語句被記錄到該日志文件或表,缺省未開啟該日志。
通過--log[=file_name]或-l [file_name]選項(xiàng)啟動(dòng)它。如果沒有給定file_name的值, 默認(rèn)名是host_name.log。
mysqld按照它接收的順序記錄語句到查詢?nèi)罩尽_@可能與執(zhí)行的順序不同。
不同于更新日志和二進(jìn)制日志,它們?cè)诓樵儓?zhí)行后,但是任何一個(gè)鎖釋放之前記錄日志。
查詢?nèi)罩景姓Z句,而二進(jìn)制日志不包含只查詢數(shù)據(jù)的語句。
服務(wù)器重新啟動(dòng)和日志刷新不會(huì)產(chǎn)生新的一般查詢?nèi)罩疚募?/p>
mysql有以下幾種日志:??
錯(cuò)誤日志:???? -log-err
查詢?nèi)罩荆???? -log
慢查詢?nèi)罩??? -log-slow-queries
更新日志:???? -log-update
二進(jìn)制日志: -log-bin
是否啟用了日志?
mysqlshow?variables?like?'log_%';
怎樣知道當(dāng)前的日志?
mysql?show?master?status;
顯示二進(jìn)制日志數(shù)目?
mysql?show?master?logs;
看二進(jìn)制日志文件用mysqlbinlog?
shellmysqlbinlog?mail-bin.000001
或者
shellmysqlbinlog?mail-bin.000001?|?tail
在配置文件中指定log的輸出位置.?
Windows:Windows 的配置文件為 my.ini,一般在?MySQL?的安裝目錄下或者 c:\Windows 下。
Linux:Linux 的配置文件為 my.cnf ,一般在 /etc 下。?
windows下
#?在[mysqld]?中輸入??
#log??
log-error="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/error.log"??
log="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/mysql.log"??
long_query_time=2??
log-slow-queries=?"E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/slowquery.log"
Linux下
#?在[mysqld]?中輸入??
#log??
log-error=/usr/local/mysql/log/error.log??
log=/usr/local/mysql/log/mysql.log??
long_query_time=2??
log-slow-queries=?/usr/local/mysql/log/slowquery.log
MySQL日志在哪
MySQL日志一般保存在/var/log/目錄下,但還需要看具體的配置文件才能確定,具體方法如下:
1、首先登陸 mysql:mysql -u root -p
2、然后查看是否啟用了日志mysqlshow variables like 'log_%';
3、查看當(dāng)前的日志mysql show master status;
4、你需要知道的mysql的日志類型:錯(cuò)誤日志: -log-err
查詢?nèi)罩荆?-log
慢查詢?nèi)罩? -log-slow-queries
更新日志: -log-update
二進(jìn)制日志: -log-bin
5、修改配置/etc/my.cnf(以下為日志文件保存位置)[mysqld]
log=/var/log/mysqld_common.log
log-error=/var/log/mysqld_err.log
log-bin=/var/log/mysqld_bin.bin
MySQL的日志文件模塊啟動(dòng)后才會(huì)有日志記錄。
開啟日志服務(wù):
在MY.INI里,MYSQLD項(xiàng)下添加log-bin=mysql。
如果只對(duì)某個(gè)庫進(jìn)行日志文件記錄,那么再添加binlog-do-db=test,這樣就只記錄test數(shù)據(jù)庫的日志,而放棄其他的。
添加完后,重新啟動(dòng)MYSQL的服務(wù),日志文件開始工作了.
查看是否啟用了日志命令:mysqlshow variables like 'log_bin';
查看當(dāng)前的日志命令:mysql show master status;
看二進(jìn)制日志文件用mysqlbinlog命令:shellmysqlbinlog mail-bin.000001
名稱欄目:怎么看mysql日志文件,查看mysql日志文件
轉(zhuǎn)載源于:http://chinadenli.net/article28/dsegsjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、云服務(wù)器、外貿(mào)建站、建站公司、網(wǎng)站導(dǎo)航、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)