sqlite来了

面对胃口越来越大的MySQL,为了节约咱VPS可怜的内存shuai,全站改用SQLite。瞬间30多MB回来了。cool

 

非实时网站同步的实现

现状:
现有两个站点,分别称为SiteR和SiteF,两者都可以通过FTP管理,且SiteR有Shell权限并支持perl

目的:
将SiteF作为主站,定时将SiteF上的WEB内容和数据库数据同步到SiteR,同步是非实时且单向的

实现方法:
1、在SiteR上使用FTPSync.pl脚本实现通过FTP方式的SiteF到SiteR的文件同步(下载地址http://ossw.ibcl.at/FTPSync/

2、在SiteF上编写一个php页面,作用是定时将数据库数据导出成文本格式并压缩,核心代码如下,原理是使用system方法执行MySQL的备份命令mysqldump,同时使用find命令删除过期备份文件
[quote]$command = "mysqldump -h数据库地址 -u用户名 -p密码 --default-character-set=utf8 数据库名|gzip>生成的文本备份文件路径及名称";
system($command, $retval);

$command = "find 备份路径/*.gz -mtime +10 -exec rm {} \\;";
system($command, $retval);[/quote]

3、在SiteR上编写Shell脚本,核心代码如下
[quote]//远程调用SiteF备份页面,生成数据库备份
wget http://xxx.xxx/xxx/xxx.php

//同步远程文件到本地
ftpsync.pl ftpuser=FTP帐号 ftppasswd=FTP密码 本地目的路径 ftp://远程FTP源地址//[/quote]
如果源FTP地址是从根目录开始,最后要写两个/,这个貌似是FTPSync的一个BUG,我使用的是1.3.01

4、在cron中定时调用第3步的Shell脚本
[quote]#每天凌晨0点
0 0 * * * /xxx/xxx[/quote]

此方法的必备条件:
1、各个站点可通过FTP获取源文件
2、其中一个站点有Shell权限,且支持perl,且可以使用cron

数据库出错

刚才上来发现进入bo-blog出错,提示:
Bo-Blog Database System Tips: MySQL Query Error

Time: 2007-7-20 3:47pm
Script:

SQL: SELECT COUNT(blogid) FROM `***blogs` WHERE `property`<>'2' AND `property`<>'3'
Error: Table './wjinfo-bo-blog/***blogs' is marked as crashed and should be repaired
Errno.: 145



进入phpmyadmin后发现对应的***blogs只能看到结构,不能看到数据。尝试mysqldump备份数据库提示:
mysqldump: Got error: 145: Table './wjinfo-bo-blog/boblog_blogs' is marked as crashed and should be repaired when using LOCK TABLES


最后找到MySQL对应表的MYI数据文件,执行myisamchk -c -r boblog_blogs.MYI
- recovering (with sort) MyISAM-table 'boblog_blogs.MYI'
Data records: 359
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4


再次进入发现数据恢复。