=================================================
本文為HeYuanHui原作
轉載必須確保本文完整並完整保留原作者資訊及本文原始連結!
NN: khler
E-mail: khler@163.com
QQ: 23381103
MSN: pragmac@hotmail.com
=================================================
最近在Linux下實現一個服務,名為tws,它利用syslog輸出日誌,利用mysql作為後台資料庫。此間碰到了兩個問題,浪費了相當相當相當(印象實在太深刻了:)...)長的時間才得以解決,現記錄於此,希望能夠幫到與我有同樣問題的朋友,節約寶貴時間。
一、日誌輸出及自動備份指令碼:
通過cron服務,我們可以實現定時執行指令碼,我這裡當然是每天定時執行twslogbaker.sh指令碼,備份我的tws產生的日誌資訊,我把它放在了tws服務的可執行檔同目錄下,這當然是個普通的目錄,結果讓人鬱悶的是,手動執行此指令碼沒問題,cron定時執行時,syslog不能向新產生的tws.log檔案中寫入資訊...
具體做法是:
1、輸出日誌:
在我的tws服務裡面,啟動時調用: openlog("tws", LOG_NDELAY,LOG_USER);退出前調用: closelog();中間輸出日誌: syslog(LOG_INFO|LOG_LOCAL6, "%s", buff);
然後在/etc/syslog.conf(如果是ubuntu,在/etc/rsyslog/下添加.conf檔案,具體參見ubuntu的rsyslog文檔)
tws.* /usr/local/twslog/tws.log
2、定時備份:
在/etc/crontab中加入:59 23 * * * root /usr/sbin/twslogbaker.sh,這樣每天晚上的23點59分執行/usr/sbin/下的指令碼twslogbaker.sh。
twslogbaker.sh指令碼是用來備份tws.log日誌的,指令碼內容:
#!/bin/sh
# 當前日期
currdate=$( date +%Y-%m-%d )
# 日誌路徑
path="/usr/local/twslog"
# 原始檔案
orgfile="tws.log"
# 新檔案
dailyfile="$currdate.log"
echo "---> Log path: '$path'"
echo "---> Starting bak '$orgfile' to '$dailyfile' ..."
# Is 'tws.log' file exist?
#if [ ! -r $logfile ]
if [ -r $path/$orgfile ]
then
# bake up log file
echo "---> rename '$orgfile' to '$dailyfile'"
mv $path/$orgfile $path/$dailyfile
else
echo "---> file '$orgfile' not exist!"
fi
# empty tws.log
#echo "---> create '$orgfile' file"
touch $path/$orgfile
#chown root $path/$orgfile
chmod 666 $path/$orgfile echo "---> Done!"
以前沒有將twslogbaker.sh指令碼放在/usr/sbin/下,導致備份完後syslog不能往新的tws.log檔案中寫入內容,放到/usr/sbin/就可以了,是因為許可權的問題嗎?到現在還不是很清楚,知道的兄弟給解釋一下
二、mysql重設密碼:
參照了這篇文章:
http://sundful.javaeye.com/blog/704337
引用Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'問題的解決
這種問題需要強行重新修改密碼,方法如下:
/etc/init.d/mysql stop (service mysqld stop )
/usr/bin/mysqld_safe --skip-grant-tables
另外開個SSH串連
[root@localhost ~]# mysql
mysql>use mysql
mysql>update user set password=password("123456") where user="root";
mysql>flush privileges;
mysql>exit
pkill -KILL -t pts/0 可將pts為0的**使用者(之前運行mysqld_safe的使用者視窗)強制踢出
正常啟動 MySQL:/etc/init.d/mysql start (service mysqld start)
注意:另外還遇到需要service mysql star才能啟動service mysql stop才能停止。
還有直接使用mysql不能找到命令,錯誤為“bash: mysql: command not found”可以直接**mysql的安裝目錄中的bin檔案夾跟絕對路徑運行命令,還有的需要加./mysql 才能執行。
最後一步即pkill的時候一定要注意,你首先開啟的不一定是pts/0,也可能是pst/1、pst/2...,所以,最保險的方法是:直接關閉那個命令視窗就行了。我之前pkill的時候可能沒有正確執行,導致重設了密碼後任然不能登入,一樣的“Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'問題”,弄得我頭大...