您的位置:首页 > 数据库 > MySQL

关于两个问题:日志的自动备份脚本、mysql重置密码

2011-02-17 09:47 579 查看
=================================================
本文为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'问题”,弄得我头大...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: