Monthly Archive八月 2008



LINUX & Web Server/Apache/Nginx & 技术 28 Aug 2008 02:19 pm

php 控制 nginx 使用404生成html

http://wiki.codemongers.com/NginxHttpCoreModule#error_page

error_page   404  =  /404.php;

我没仔细看,漏掉了中间的 “= “, 以为nginx 404 不能再用php 控制header。
在网上转的半天也学到一些东东
     fastcgi_hide_header X-Powered-By; # 在header里隐藏php的版本
     #fastcgi_pass_header Location;#在header里显示location
     #fastcgi_pass_header Status;
     fastcgi_pass_header Authorization;

自定义http 状态码
https://calomel.org/nginx.html

使用recursive_error_pages  on;递归404来找归档文件或使用memcache
http://marc.info/?l=nginx&m=120127277410400&w=2
http://blog.arh.cc/index.php?/archives/11-Simple-and-clean-nginx.conf.html

linux 维护优化 & 技术 25 Aug 2008 04:49 pm

tomcat 内存溢出

装完nginx环境重启后,tomcat不能启动
tail tomcat/logs/catalina.out

2008-8-25 15:55:37 org.apache.tomcat.util.net.JIoEndpoint processSocket
严重: Error allocating socket processor
java.lang.OutOfMemoryError: Java heap space
        at java.lang.Thread.<init>(Thread.java:208)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.start(JIoEndpoint.java:468)
        at org.apache.tomcat.util.net.JIoEndpoint.newWorkerThread(JIoEndpoint.java:681)
….
  

free -m 看了一下内存从2G变成了1G,让机房重插下内存后一切正常。

Database & 技术 25 Aug 2008 01:53 pm

mysql5.0升级至mysql5.1 需执行mysql_upgrade

http://dev.mysql.com/doc/refman/5.1/zh/installing.html#upgrading-from-5-0

Database & linux 维护优化 & 技术 19 Aug 2008 02:12 pm

mysqlhotcopy备份数据库

首先是perl支持

shell>perl -MCPAN -e shell

cpan>install DBI

cpan>install DBD::mysql ( 安装这个时test通不过)

cpan>q

退出

unset LANG

cd ~/.cpan/build/DBI-1.607
perl Makefile.PL
make test
make install

cd ../DBD-mysql-4.007
perl Makefile.PL –mysql_config=/opt/mysql/bin/mysql_config
make
make test
<coolcode>
 failed: Can’t load ‘/root/.cpan/build/DBD-mysql-4.007/blib/arch/auto/DBD/mysql/mysql.so’
</coolcode>

ln -s /opt/mysql/lib/mysql/* /usr/lib/
make test
<coolcode>
/root/.cpan/build/DBD-mysql-4.007/blib/arch/auto/DBD/mysql/mysql.so: undefined symbol:
</coolcode>
make realclean
perl Makefile.PL –mysql_config=/opt/mysql/bin/mysql_config –libs=”-L/opt/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm”
<coolcode>
all skipped: ERROR: Access denied for user ‘root’@'localhost’ (using password: NO). Can’t continue test
</coolcode>
perl Makefile.PL –mysql_config=/opt/mysql/bin/mysql_config –libs=”-L/opt/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm” –testpassword=123456
make
make test
<coolcode>
t/00base………………..String found where operator expected at t/00base.t line 20, near “BAIL_OUT “Unable to load DBI”"
        (Do you need to predeclare BAIL_OUT?)
</coolcode>

make realclean
perl Makefile.PL –mysql_config=/opt/mysql/bin/mysql_config –libs=”-L/opt/mysql/lib/mysql -lmysqlclient -lz” –cflags=-I/opt/mysql/include/mysql –testhost=localhost –testsocket=/opt/mysql/mysql.sock –testdb=bugdb –testuser=root –testpassword=123456
make
make test
<coolcode>
t/00base………………..String found where operator expected at t/00base.t line 20, near “BAIL_OUT “Unable to load DBI”"
        (Do you need to predeclare BAIL_OUT?)
</coolcode>
(在另一机器上没出这个错)-_-*!!! 直接make install
检察是否安装成功
shell>perldoc DBI
shell>perldoc DBI::mysql

从源码装

http://search.cpan.org/

http://search.cpan.org/dist/DBD-mysql/lib/DBD/mysql.pm#INSTALLATION

gzip -cd DBI-(version).tar.gz | tar xf - cd DBI-(version) perl Makefile.PL make make test make install cd .. gzip -cd Data-ShowTable-(version).tar.gz | tar xf - cd Data-ShowTable-3.3 perl Makefile.PL make make install

Data-ShowTable-3.3.tar.gz 安装时有个错误 *** ERROR: Unterminated I<…> at line 724 in file ShowTable.pm 用以下方法解决 http://lists.mysql.com/perl/1015

cd .. gzip -cd DBD-mysql-(version)-tar.gz | tar xf - cd DBD-mysql-(version) perl Makefile.PL –mysql_config=/opt/mysql/bin/mysql_config –libs=”-L/opt/mysql/lib/mysql -lmysqlclient -lcrypt -lnsl -lm -lz” –cflags=-I/opt/mysql/include/mysql –testsocket=/opt/mysql/mysql.sock –testhost=localhost –testuser=root –testpassword=****** make make test make install

在数据库段分配一个专门用于备份的用户
mysql> grant select,reload,lock tables on *.* to ‘hotcopyer’@‘localhost’ identified by ‘123456′;

mysql> grant insert on hotcopy.checkpoint to hotcopyer@‘localhost’;
mysql> flush privileges;

建表记录下历史
create database hotcopy;
create table checkpoint(time_stamp timestamp not null,src varchar(32),dest varchar(60), msg varchar(255));

cd /opt/mysql/bin/
./mysqlhotcopy test_ucenter –noindices –allowold –checkpoint hotcopy.checkpoint –addtodest /home/admin –user=hotcopyer –password=123456

你也可以将备份用的用户和密码放在~/.my.cnf下
# vi /root/.my.cnf
<coolcode>
[client]
host=localhost
user=hotcopyer
password=123456
</coolcode>

我在运行mysqlhotcopy时会遇到”has gone away”错误,数据库为25张表,800M大小。
<coolcode>
DBD::mysql::db do failed: MySQL server has gone away at /opt/mysql/bin/mysqlhotcopy line 513.
</coolcode>
看了下备份执行时间为10S左右,和我my.cnf中的wait timeout一样,调大max_allowed_packet和wait_timeout参数后没有错误。
修改下配置为
vi /opt/mysql/my.cnf
<coolcode>
max_allowed_packet = 4M #字段最大的可能值
wait_timeout = 60
</coolcode>以上参数放在my.cnf的[mysqlhotcopy]和/root/.my.cnf中的[client]无效。
wait_timeout = 60可能会占用太多的connection。
我将它改为 10,然后修改mysqlhostcopy脚本来解决”has gone away”错误

 

 
 
 
 

 

vi /opt/mysql/bin/mysqlhotcopy
复制第177行的mysql连接至513行
<coolcode>
my $dbh = DBI->connect(”dbi:mysql:$dsn;mysql_read_default_group=mysqlhotcopy”,
                        $opt{user}, $opt{password},
{
    RaiseError => 1,
    PrintError => 0,
    AutoCommit => 1,
});
</coolcode>分析:
mysqlhotcopy时会先连上数据库,然后lock table再复制数据库文件,最后unlock table,
由于复制数据文件会占用一定时间,所以再次执行unlock table时可能已超过设置的wait timeout时间,
我这里将它再连接一次就不会报错啦。
如用到checkpoint,那492行也要插一次.

结论:
mysqlhotcopy比较适合备份小型一点(1G以下)的数据库,还需留意下table lock wait timeout参数

 

 

定时及远程备份参考 

 

 

 

使用crontab+ssh每天自动完全备份mysql数据

 

 

 

linux 维护优化 13 Aug 2008 06:10 pm

linux下最·容易的增量备份,tar增量备份

linux备份真是太方便了,其实我们常用的tar就是很好的增量备份软件

使用 tar -g 参数进行增量备份实验

完整备份:

#建立测试路径与档案
mkdir test
touch test/{a,b,c};
在test下生成三个文件

#执行完整备份
tar -g snapshot -zcf backup_full.tar.gz test

#查看 tarball 内容
tar ztf backup_full.tar.gz
test/
test/a
test/b
test/c

增量备份:

#新增一个档案
touch test/d

#执行第一次的增量备份 (注意 tarball 档名)
tar -g snapshot -zcf backup_incremental_1.tar.gz test

#查看 tarball 内容
tar ztf backup_incremental_1.tar.gz
test/
test/d

#新增一个档案, 并异动一个档案内容
touch test/e
echo 123 > test/a

#执行第二次的增量备份 (注意 tarball 档名)
tar -g snapshot -zcf backup_incremental_2.tar.gz test

#查看 tarball 内容
tar ztf backup_incremental_2.tar.gz
test/
test/a
test/e

还原备份资料:

#清空测试资料
rm -rf test

#开始进行资料还原
tar zxf backup_full.tar.gz
tar zxf backup_incremental_1.tar.gz
tar zxf backup_incremental_2.tar.gz

#查看测试资料
ls test
a b c d e

使用 tar -u 参数进行增量备份

第一次备份:

#建立测试路径与档案
mkdir test
touch test/a test/b test/c

#备份资料
tar zcf backup.tar.gz test

#查看 tarball 内容
tar ztf backup.tar.gz
test/
test/a
test/b
test/c

增量备份:

#新增一个档案, 并异动一个档案内容
touch test/d
echo 123 > test/a

#执行增量备份 (-u 参数只能执行於未压缩的 tarball)
gunzip backup.tar.gz
tar uf backup.tar test
gzip backup.tar

#查看 tarball 内容
tar ztf backup.tar.gz
test/
test/a
test/b
test/c
test/
test/a
test/d

还原备份资料:

#清除测试资料
rm -rf test

#解包 tarball
tar zxf backup.tar.gz

#查看测试资料
ls test
a b c d

Others & 技术 08 Aug 2008 11:44 am

用php控制word的打印边距

将生成的word文件另存为htm,用文本比较工具(如svn的diff)差看差异,就可以找着关键点了。

<style>
<!–
@page Section1
 {size:595.3pt 841.9pt;
 margin:33.0pt 33.15pt 33.0pt 33.15pt;
}
div.Section1
 {page:Section1;}
……
</style>

<body>

<div  class=Section1>
…….
</div>
…….