2011年4月

cidaemon.exe持续占用cpu资源

2011的夏天快到了,但是还没有到呢,机子已经欲火焚身了:

cidaemon.exe持续占用cpu资源

最高的时候cpu和显卡都是80多度徘徊,cpu占用一直在50%以上,我以为是天气原因。后来仔细怕长是cidaemon.exe进程,
cidaemon.exe是一个windows系统服务:Microsoft Indexing Service
cidaemon.exe is an indexing service which catalogues files on your computer to enable for faster file searches.

解决方法:

方法1,搜索中关闭:

启动了这个服务就会在电脑空闲的时候建立索引,所以机器会变慢! 可以通过以下的方法取消该服务 打开“我的电脑”->“搜索”---->“改变首选项”---->使用制作索引服务....---->选 “不,不要启用制作索引服务” 然后确定。

方法2,直接关闭服务:

控制面板——管理工具——服务——Indexing Service ——点右键关闭

用cpanel的cron jobs来备份mysql数据库和网站文件

进网站的cpanel,advanced菜单里面的Cron Jobs,

"Add New Cron Job",时间看情况自己定,然后Command填写

mysqldump -utunpscom_user -ptunpscom_pass --opt tunpscom_db | bzip2 -c > /home/tunpscom/tunpscom_`/bin/date +"\%Y\%m\%d_\%H\%M\%S"`.sql.bz2

以上是备份数据库了,注意date %的格式,前面加入了反斜杆,如果不加反斜杆,会报错:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file

至今未搞懂是嘛原因。

备份网站:

tar cjvf wp_content_`/bin/date +"\%Y\%m\%d_\%H\%M\%S"`.tar.bz2 ~/public_html/wp-content/

注意时间不要备份得太勤了,否则主机就警告你了:

The account with the username 'tunpscom' (tunps.com), is running out of disk space.

Please remove some files from this account, or ask the administrator to increase your disk quota.

This account has used 101.22% (607.30 Megs) of its allocated disk space.

!! Do not respond to this message. Your reply will go nowhere. !!

bzip2也表示鸭梨很大:

bzip2: I/O or other error, bailing out. Possible reason follows.
bzip2: Disk quota exceeded
Input file = (stdin), output file = (stdout)
mysqldump: Got errno 32 on write

看32错误是嘛玩意儿:

[root@db1 cron.daily]# perror 32
OS error code  32:  Broken pipe

crontab定时备份mysql

rhel5的默认的/etc/crontab文件内容:

[root@localhost ~]# more /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

run-parts是一个bash脚本,可以运行指定目录的shell,将以下内容保存为*.sh,并保存在/etc/cron.daily目录:
前面的内容分为5个部分,分别是:分 时 日 月 周 , root表示以root用户权限运行
那么/etc/cron.daily下脚本将会在每天临晨4点2分的时候运行

mysqldump --opt tunpscom | bzip2 -c > /data/`date +%Y%m%d_%H%M%S`.bz2

反引号里面的内容是执行date命令,后面%指定日期格式,具体请man date。还有一点需要注意的是bzip2压缩出来的体积比gz小,但是压缩时间长,几百MB看不出来,如果上了G就很明显了。所以也可以用gzip压缩代替:

mysqldump --opt tunpscom | gzip -c > /data/`date +%Y%m%d_%H%M%S`.gz

然后需要将这个*.sh文件的权限修改:chmod 755,让大家都有rx权限。

生成的文件的大概是:20110426_030103.bz2。

ps:10G大小的文本文件用gzip压缩后大小在300MB左右,用bzip2压缩后大小在100MB左右。除了以上介绍的方法,可以使用
crontab -e 新建一个计划任务。
crontab -r 删除计划任务。
crontab -l 列出计划任务。

让codeigniter的oci8 db driver支持insert_id()

php_mysql模块有一个函数:mysql_insert_id

功能是

mysql_insert_id() 返回给定的 link_identifier 中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 link_identifier ,则使用上一个打开的连接。

说白了就是返回上一次insert的id号,但是oracle没有auto_increment属性,不能让字段自增,一般业内的解决方法是用sequence+trigger方案。今天需要取得oracle insert之后的id值,直接用上了codeigniter的$this->db->insert_id(),结果codeigniter报错提示:This feature is not available for the database you are using。我表示鸭梨很大,到底有好大?鸭梨山大:

/**
* Insert ID
*
* @access public
* @return integer
*/
function insert_id()
{
// not supported in oracle
return $this->display_error('db_unsupported_function');
}

既然都display_error了还返回的是interger。- -#
没办法codeigniter支持的数据库是主流的mysql,oracle是被抛弃的小孩。我们只能自己将其抚养成人了。
insert_id代码修改为:

function insert_id($tbl='')
{
$sql = "select " . $tbl . "_seq.currval as id from dual";
$statement = @ociparse($this->conn_id, $sql);
$row=@ociexecute($statement);
@ocifetchinto($statement, $row, OCI_ASSOC);
return $row['ID'];
}

加了一个$tbl参数,因为必须要传递$tbl,才能知道要查询的sequence,而且sequence要有一定的命名规范,比如:tablename_seq。