阿里云mysql 日志_mysql日志-阿里云开发者社区
mysql日志
mysql有以下幾種日志:
錯誤日志: log-error
查詢?nèi)罩?#xff1a; log
慢查詢?nèi)罩? log-slow-queries
更新日志: log-update
二進制日志: log-bin
主從中繼日志:relay_log
在配置文件中指定log的輸出位置.
# vi /etc/my.cnf
[mysqld]
log-error=/usr/local/mysql/logs/error.log?????? (指定錯誤日志存放位置)
log=/usr/local/mysql/logs/sql.log???????? (對所有執(zhí)行語句進行記錄)
long_query_time=2???????????????? (執(zhí)行超過2秒的sql會被log下來)
log-slow-queries= /usr/local/mysql/logs/slowquery.log?????? (將查詢返回較慢的語句進行記錄)
log-queries-not-using-indexes = nouseindex.log???? (log下來沒有使用索引的sql語句)
log-bin=/usr/local/mysql/logs/mysql-bin??????? (設(shè)置二進制日志的保存位置,/usr/local/mysql/logs為
路徑,mysql-bin為文檔前綴,注意給/usr/local/mysql/logs可寫入的權(quán)限)
expire_logs_day=7?????????????????????????????????? (設(shè)置二進制日志的保存時間為7天,7天后自動刪除
)
log_bin=/usr/local/mysql/logs/relaylog????? (設(shè)置主從mysql中繼日志路徑為/usr/local/mysql/logs,格
式為relaylog.00001)
:wq
默認情況下,所有日志創(chuàng)建于mysqld數(shù)據(jù)目錄中。
通過刷新日志,你可以強制 mysqld來關(guān)閉和重新打開日志文件(或者在某些情況下切換到一個新的日志)。
刷新日志的命令:
> flush logs
或
# mysqladmin -u root -p flush-logs
或
# mysqladmin -u root -p refresh
是否啟用了日志
mysql> show variables like 'log_%';
怎樣知道當(dāng)前的日志
mysql> show master status;
顯示二進制日志數(shù)目
mysql> show master logs;
看二進制日志文件用mysqlbinlog
# mysqlbinlog /var/lib/mysql/log/mysql-bin-log.00001
刪除全部日志
> reset master;
刪除000007編號之前的所有日志
> purge master logs to 'mysql-bin.000007';
刪除2012-02-30 23:59:59時間之前的日志
> purge master logs before '2012-02-30 23:59:59';
mysql自帶了一個查看慢日志的工具mysqldumpslow。
執(zhí)行mysqldumpslow –h可以查看幫助信息。
主要介紹兩個參數(shù)-s和-t
-s 這個是排序參數(shù),可選的有:
al: 平均鎖定時間
ar: 平均返回記錄數(shù)
at: 平均查詢時間
c: 計數(shù)
l: 鎖定時間
r: 返回記錄
t: 查詢時間
-t n 顯示頭n條記錄。
實例:
mysqldumpslow -s c -t 20 host-slow.log?????????? (訪問次數(shù)最多的20個sql語句)
mysqldumpslow -s r -t 20 host-slow.log?????????? (返回記錄集最多的20個sql)
mysqldumpslow -t 10 -s t -g “l(fā)eft join” host-slow.log???????? (按照時間返回前10條里面含有左連
接的sql語句)
日志恢復(fù):
bin-log是記錄著mysql所有事件的操作,當(dāng)mysql發(fā)生災(zāi)難性錯誤時,可以通過bin-log做完整恢復(fù),基于時間
點的恢復(fù),和基于位置的恢復(fù)
完整恢復(fù):
假定我們每天凌晨2點都會使用mysqldump備份數(shù)據(jù)庫,但在第二天早上9點由于數(shù)據(jù)庫出現(xiàn)了故障,數(shù)據(jù)無法訪
問,需要恢復(fù)數(shù)據(jù),先使用昨天凌晨備份的文件進行恢復(fù)到凌晨2點的狀態(tài),在使用mysqlbinlog恢復(fù)自
mysqldump備份以來的binlog
這樣數(shù)據(jù)庫就可以完全的恢復(fù)到崩潰前的完全狀態(tài)
基于時間點的恢復(fù):
由于誤操作,比如說刪除了一張表,這時使用上面講的完全恢復(fù)是沒有用的,因為日志里面還存在誤操作的語
句,,我們需要的是恢復(fù)到誤操作前的狀態(tài),然后跳過誤操作的語句,再恢復(fù)后面操作的語句,假定我們刪除
了一張表的誤操作發(fā)生在10:00這個時間點,我們可以使用下面的語句用備份和binlog將數(shù)據(jù)恢復(fù)到故障前
# mysqlbinlog --stop-date='2010-09-04 9:59:59' /var/log/mysql-bin.000001 | mysql -u root -p
然后跳過誤操作的時間點,繼續(xù)執(zhí)行后面的binlog
# mysqlbinlog --start-date='2010-09-04 10:01:00' /var/log/mysql-bin.000001 | mysql -u root -p
其中--stop-date='2010-09-04 9:59:59' 和 --start-date='2010-09-04 10:01:00' 其中的時間是你誤操作的
時間點,當(dāng)然了,這個時間點你需要你自己計算的,而且這個時間點還可以涉及到的不只是誤操作,還可以有
正確的操作也被跳過去了。
基于位置恢復(fù):
由于上面提到的,使用基于時間點的恢復(fù)可能出現(xiàn),在一個時間點里面可能存在誤操作和其他正確的操作,所
以我們需要一種更為精確的恢復(fù)方式
使用mysqlbinlog查看二進制,可看到
其中drop tables test1這個誤操作的end_log_pos為8879917,記下這個id,得出它前后操作的id分別為
8879916,8879918
我們將進行位置恢復(fù)操作
# mysqlbinlog --stop-position='8879916' /var/log/mysql-bin.000001 | mysql -u root -p
# mysqlbinlog --start-position='8879918' /var/log/mysql-bin.000001 | mysql -u root -p
第一行是恢復(fù)到停止位置位置的所以事務(wù),第二性是恢復(fù)從給定的起始位置知道二進制日志結(jié)束所有事物。
本文轉(zhuǎn)自linux博客51CTO博客,原文鏈接http://blog.51cto.com/yangzhiming/834893如需轉(zhuǎn)載請自行聯(lián)系原作者
yangzhimingg
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的阿里云mysql 日志_mysql日志-阿里云开发者社区的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio 的码云扩展
- 下一篇: mysql5 7选路径_MySQL 5.