2014年11月27日 星期四

[MySQL]log_queries_not_using_indexes與slow_query_log同時啟用會造成大量的slow query log

        話說管理的MySQL有啟用slow_query_log,然後發現每天的成長量非常的大 ,每天增加1G吧,量太大了對於分析slow query非常耗時,仔細分析又發現幾乎所有的Query紀錄進去了 ,這不太對啊,log_query_time設1秒,照理說超過1秒才會記錄,但幾乎全紀錄,毫秒微秒級的也記錄作什,看avg、95%跟前五名的都是毫秒級回應,收到這種分析幾乎沒什用


2014年11月21日 星期五

[MySQL]Account user_name@host_name does not exists but it still has privileges defined for following objects:database_name

        平常刪除帳號都用drop user,今天需要對某個DB刪除大量帳號,想說直接delete from mysql.user最快了,刪完用MySQL Workbench開啟來看是否刪乾淨了,結果發現帳號還在,只是前面多了"(!)"符號

        點擊某個帳號,出現下列訊息,好像告訴我沒有刪除乾淨

Account user_name@host_name does not exists but it still has privileges defined for following objects:database_name

       猛然想起mysql.db好像也要刪除,所以若不用drop user而直接清除user資料表,別忘記db資料表也要清喔,完整的刪除方式如下

DELETE FROM mysql.user WHERE user='phpmyadmin' and host='localhost';
DELETE FROM mysql.db   WHERE user='phpmyadmin' and host='localhost';
FLUSH PRIVILEGES;

       若用別的client工具似乎不會發現這個問題,我用Navicat打開是不會看到只刪user未刪db的帳號喔!

2014年11月19日 星期三

[MySQL]查看Binlog的內容

        Binlog是MySQL的日誌,通常用作Replication及備份使用,這麼重要的東西當然要了解它囉,預設安裝是不會啟用Binlog的,要啟用它要在my.ini檔加入下列系統參數,然後重啟MySQL生效

#還有其他相關參數就不列了
log-bin=/var/lib/mysql/mysql-bin #必要的,設定位置及檔案名稱
expire_logs_days=14                    #選擇性的,設定保留的期間
binlog-format=statement              #選擇性的,有三種模式,預設是statement,還有row及mixed

2014年11月6日 星期四

[Shell scripts]warning: here-document at line 3 delimited by end-of-file (wanted `EOF')

        把一個測試過的Shell script用copy與paste內容的方法複製到另外一台Server上,結果執行卻遇到如下錯誤

check_err_log.sh: line 28: warning: here-document at line 3 delimited by end-of-file (wanted `EOF')
check_err_log.sh: line 29: syntax error: unexpected end of file

        上網查是說EOF前面不能有SPACE,可以有TAB,可是怎麼看兩邊的script都一樣啊,至少我肉眼分辨不出來,兩邊的長得跟下圖一模一樣,為何兩邊結果不一樣?


        後來查到可以用cat -A file 命令秀出那些印不出的字,才看出兩邊是不一樣的,左邊是正常可以執行的,是用TAB,會顯示"^I";右邊是會出錯的,SPACE還是顯示SPACE


        最後就把SPACE移掉換用TAB就沒問題了,不過copy和paste會把TAB換成SPACE真是奇怪的行為,上網有查到似乎在某些模式下會這樣,之後遇到再看看囉