Written by 正冰 on 2011, April 4, 2:29 PM
今天一个朋友问我是如何备份VPS数据的,索性撰文一篇,方便有需要的朋友。
首先,需要约定一下,本文主要是针对在国外,特别是VPS在美国的用户,国内VPS用户可以看本文前半部分即可,呵呵。
目前我所使用的VPS为centos linux系统,直接ssh登陆后将需要备份的数据进行tar命令打包(注意对mysql这类数据正被进程所使用中的服务要先进行关闭服务操作,否则数据损坏就不好了)。
将is36.com文件夹进行打包操作:#tar xvf is36.tar is36.com/
打包完成后使用mv命令将它移动到可访问的网站目录下,用迅雷工具直接下载,经测试,在夜里下载基本可以达到带宽的峰值,我所测试的是100M光纤,夜间下载数据包达到了3-5M/S。
好了,国内VPS用户看到这里就行了,下面讲的就是针对国外VPS用户二次备份数据:
根据我的经验,下载VPS上的数据包是非常快的,而要把数据直接从本地上传到服务器上,那是非常吃力的,即便是我测试100M光纤的上传速度也是不给力的。而我实际操作过程中是采用将数据先通过FTP上传到我国内的服务器上,然后在VPS上执行wget将数据包下载到VPS上,这中间的时间差,是我不想的。如果说下载数据到本地备份算是一次备份,那么将同样的数据包传到国外的服务器上就算是二次备份了。选择国外服务器有几点考虑:
- 国外宽带足,网速快
- 方便数据恢复(特别是重装VPS可以快速上传与下载)
经测试,从VPS上上传数据包到美国的付费FTP空间,平均速度达到1.8M/S,非常强势。
那么我们开始进行linux下ftp上传数据操作,centos默认是没有安装ftp客户端工具的,可以用yum命令安装:#yum install ftp
安装完成后我们就可以进行FTP上传备份数据:
- cd /back/ --转入数据备份目录
- ftp demo.is36.com --ftp到主机
- g --输入用户名
- is36 --输入密码
- put is36.tar --上传数据包
- bye --上传完毕退出ftp
下次需要数据包只要ftp上去get is36.tar即可。当然,如果你没有其他国外空间而且仅仅是为了临时保存一下数据,你可以咨询你的VPS提供商,一般情况下他们会提供一个临时的FTP或者帮你先保存下数据,我所选择的VPS服务商就很友好地帮我解决过这种问题。
网上有看到利用godaddy免费空间进行VPS数据定时备份到godaddy空间的,有需要的可以自行搜索一下。
最后,推荐一下本人使用的VPS提供商RASHOST 瑞豪开源 http://rashost.com 推荐他们的原因有3:我的VPS已经在上面稳定运行近2年;VPS不限流量;客服反应速度不错!具体可以看我的文章《使用RASHOST(瑞豪开源)vps一年之感》
另外,本文中我所使用的FTP空间是著名的老鹰主机“Hawk Host” 详情请浏览:http://www.hawkhost.com/ (目前已经支持支付宝付款,4月份优惠码“April2011”在购买Shared Hosting型号主机可以获得首次50%优惠,也就是说最便宜的basic主机原价需要$39.48,折后折换成RMB就是130元左右,适合做外贸网站,3G的空间也适合备份数据。具体优惠码见:http://hawkhost.is36.com/)
Filed under: 技术归总
0 Comments
24979 Views
Written by 正冰 on 2011, April 1, 4:38 PM
今天在迁移网站的过程中遇到了数据表只读的情况:table '[Table]stats' is read only
经过分析尝试,得出一些经验,分享一下:
1、这个问题一般出现在迁移mysql数据库,一般来说需要先检查用户与权限的问题,比如有某一个mysql数据库为is36,我们的mysql管理用户与组均为mysql,那么我们通过命令设置它的所有者为mysql:#chown mysql.mysql is36/*
2、再设置数据库中的所有表信息为660权限,也就是所有者mysql与所在的mysql用户组可读可写:#chmod 660 is36/*
3、以上操作完成后数据库表访问权限问题应该是没有了,但是依旧会显示这个错误,那么进入phpmyadmin,尝试对这个数据表进行repair(修复)操作,如果提示修复成功,那么这个read only的问题应该是解决了,回到页面上刷新一下即可。但是在我测试的过程中,也有一些数据表提示read only,但却修复失败,那么继续往下走。
4、进入mysql的bin工具目录,执行如下命令:#./mysqladmin -u<username> -p flush-tables 其中<username>是你的mysql管理员用户,一般为root。执行完成这条命令,再去刷新页面,应该是正常了。
Filed under: 技术归总
0 Comments
23575 Views
Written by 正冰 on 2011, March 31, 7:56 PM
Filed under: 技术归总
0 Comments
12133 Views
Written by 正冰 on 2011, March 31, 12:22 AM
注:本代码从某网站提取出来的,分析并分享一下,正冰仅作技术探讨,请勿用于影响广大用户正常浏览内容的页面中。
此JS代码使用方法:
1、在你需要弹出新页面的页面中加入脚本代码如下<script src="ad.js"></script>,其中ad.js来自压缩包(见文末)。
2、修改ad.js中的广告代码如下(举例):
ad[0] = 'http://www.is36.com';
ad[1] = 'http://blog.is36.com';
你可以自行增加ad[2]或者更多,这里的广告是作为一个轮询使用,避免用户一直只看到同一个广告影响体验效果。另外var cookie_time = 12*60*60;代码段为定义cookie过期时间,这表示定义12小时后cookie过期,用户如果12小时后访问网站,网站会重新弹出广告页面,否则在cookie过期前,网站将不再弹出页面。
3、在ad.js代码中引用了pop.js代码,该代码实则为弹出广告的精华所在,囊括了各类浏览器的弹出处理方式。
此JS代码的优点:
- 可以成功穿越IE6/7/8,firefox3.6,360安全浏览器3.7,搜狗浏览器,腾讯TT浏览器,google chrome浏览器10.0,基本上秒杀了市场上主流的浏览器了。
- 适合中大型多页面网站,js代码中加入cookie功能可设定cookie的时效,可以让用户不会每访问一个页面就弹出一次。
下载代码:不被浏览器拦截的弹出窗口js代码.rar
Filed under: 技术归总
2 Comments
42192 Views
Written by 正冰 on 2011, March 24, 12:05 AM
之前的ecshop项目中客户要求某篇文章需要相应用户登录之后方能查看,那么根据这个需求,我们只需要在文章页面增加权限判断。
作为新时代的懒人,自然先简单搜索了一下google,得到一篇《限制某等级访问某栏目的文章》
具体代码可以到上面那篇文章中得到,我的需求与参考资料不同之处是:
- 只需要限制某篇文章的权限
- 提示信息中引导用户去注册登录
那么最终我修改的代码如下:
/*------------------------------------------------------ */
//-- 判断权限才能访问某栏目or某文章
/*------------------------------------------------------ */
$cat_id = $db->getOne("SELECT cat_id FROM " . $ecs->table('article') . " WHERE article_id = '".intval($_REQUEST['id'])."' ");
if (($article_id == 36) && $_SESSION['user_rank'] <= 1)
{
show_message("对不起,您无权限浏览,请登录后下载数据包!", "点击登录", 'user.php');
}
如果你需要修改栏目的权限,那只要把$article_id改为$cat_id并增加具体的栏目id值。当然,你也可以双重判断,无非就是$article_id与$cat_id之间多个&&或者or而已。具体请自行发挥……
网上看到有人将这个功能更加完善化了,后台操作文章的页面里就有权限设置。本项目中不需要,下次有空完善地写一下好了。
Filed under: 技术归总
0 Comments
14094 Views
Written by 正冰 on 2011, March 17, 10:46 PM
在某项目中客户要求实现右侧漂浮的客服内的信息能够自动更新(后台更新此处也更新),从网上下载的代码,具体见:http://bbs.ecshop.com/thread-92214-1-1.html
然而这个代码有个致命的缺点,因为悬浮代码是调用JS文件,不适用ecshop里的php-dwt-lbi模式,只能手工修改客服代码,这对于普通用户是非常不便的。
我参考了代码,发现其实可以变通解决这个问题,下面以“客服2_UTF_GBK版本”为例:
1、打开ServiceQQ.js文件将document.write输出的语句全部删除保存
2、打开page_footer.lbi,在最末位加入如下代码:
<link href="QQkefu/images/qq.css" rel="stylesheet" type="text/css" />
<div class='QQbox' id='divQQbox' >
<div class='Qlist' id='divOnline' onmouseout='hideMsgBox(event);' style='display : none;'>
<div class='t'></div>
<div class='con'>
<h2>在线客服</h2>
<ul>
<!-- QQ 号码 {foreach from=$qq item=im} -->
<li class=odd><!-- {if $im} -->
<a href="http://wpa.qq.com/msgrd?V=1&Uin={$im}&Site={$shop_name}&Menu=yes" target="_blank"> <img src="http://wpa.qq.com/pa?p=1:{$im}:4" height="16" border="0" alt="QQ" /> {$im}</a></li>
<!-- {/if} -->
<!-- {/foreach} 结束QQ号码 -->
<!-- 淘宝旺旺 {foreach from=$ww item=im} -->
<!-- {if $im} -->
<li><a href="http://amos1.taobao.com/msg.ww?v=2&uid={$im|escape:u8_url}&s=2" target="_blank"> <img src="http://amos1.taobao.com/online.ww?v=2&uid={$im|escape:u8_url}&s=2" width="16" height="16"
border="0" alt="淘宝旺旺" />{$im}</a></li>
<!-- {/if} -->
<!--{/foreach} 结束淘宝旺旺 -->
<!-- 客服电话{if $service_phone} -->
<li style="color:red;font-size:12px;">Tel:{$service_phone}</li>
<!-- 结束客服电话{/if} -->
</ul>
</div>
<div class='b'></div>
</div>
<div id='divMenu' onmouseover='OnlineOver();'><img src='/QQkefu/images/qq_1.png' class='press' alt='QQ客服热线'></div>
</div>
<script language='javascript' src='/QQkefu/ServiceQQ.js' type='text/javascript' charset='gbk'></script>
也就是把原来需要贴在page_footer.lbi末尾的调用代码中的客服信息直接写入lbi
3、搞定。
Filed under: 技术归总
0 Comments
55175 Views
Written by 正冰 on 2011, March 12, 9:28 PM
今天将本地已经制作好的ecshop系统上传到空间上,并且通过之前phpmysql导出的数据库文件用服务器上的phpmysql导入,结果发现首页乱码,其他网页正常显示。
解决方法:进入网站后台,点击“清除缓存”即可。如果出现其它错误提示,一般可能会提示某个表不存在,那么只要用phpmysql建立该表即可。
附加ecshop的网站迁移过程:
- 先打包本地的程序,然后传到空间上解压
- 用phpmysql备份数据库为sql文件,然后用网站上的phpmysql导入
- 修改ecshop的数据库配置文件信息
- 进入网站调试
Filed under: 技术归总
0 Comments
11790 Views
Written by 正冰 on 2011, March 8, 2:28 PM