He,YuanHui —— 业精于勤荒于嬉,行成于思毁于随

如果你喜欢一个事,又有这样的才干,那就把整个人都投入进去,就要象一把刀直扎下去直到刀柄一样,不要问为什么,也不要管会碰到什么。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  240 随笔 :: 1 文章 :: 135 评论 :: 2 引用

公告

=================================================
本文为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'问题”,弄得我头大...

 

 

posted on 2011-02-17 09:47 He,YuanHui 阅读(...) 评论(...) 编辑 收藏

Add to Google