關於兩個問題:日誌的自動備份指令碼、mysql重設密碼

來源:互聯網
上載者:User

=================================================
本文為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'問題”,弄得我頭大...

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.