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真是奇怪的行為,上網有查到似乎在某些模式下會這樣,之後遇到再看看囉

2014年10月30日 星期四

[MySQL]如何在Percona上安裝mysqlftppc-bigram做中文全文索引呢

為何不用Sphinx或Lucene呢?因為比起前面這兩個,這plugin安裝及使用上相對容易,幾百萬筆的資料查詢起來還可接受,M/S架構上裝在Slave運作也還OK,若資料量千萬筆就比較不建議用這個囉,還是用專業的Sphinx或Lucene吧

環境:CentOS 6.5 + Percona 5.5.40

安裝條件:
1.mysql-devel套件,安裝這個才有mysql_config
2.libicu-devel套件,要支援UNICODE,安裝這個才有icu-config
4.相容MySQL 5.5與5.6,Engine只能用MyISAM喔

2014年10月7日 星期二

msdtc settings not configured optimally

        話說我用SQL Server 2008 R2 BPA分析新安裝的SQL Server,有一項Warning是msdtc settings not configured optimally,照建議的 MSDTC 設定將用於分散式交易中 SQL Server的這個去設定,我發現怎樣都不會通過檢查,後來仔細看它Issue的地方有反饋一些registry key得設定成建議的值,回推正確的設定應該如下圖,供參考


2014年10月2日 星期四

[Oracle]With Clase與SQL Server的CTE用法不太一樣喔,要注意!

        SQL Server的With子句叫CTE,可以說是暫存的結果集,讓語法看器來更簡潔,可以Reuse結果;Oracle也有With子句,叫Subquery Factoring,我以為用法跟SQL Server一樣用,實際上有滿大的差異,今天花點時間研究一下,原來Oracle可以把with子句當inline view(在FORM裡的子查詢)或temporary table來處理喔,很不一樣吧

        據說Oracle會自行判斷with子句當inline view或temporary table處理,讓它自行判斷往往會發生意想不到的結果,可以使用兩個undocumented materialize hint與inline hint來指定用哪種囉