mysql中的主从复制slave-skip-errors参数使用方法

在主从复制中,难免会遇到一些sql语句错误的问题。这个时候我们需要手动来重新设置中继日志的起始点了,有些麻烦。今天在看“2012华东架构师大会”视频的时候,发现淘宝丁奇的ppt里有这个参数,看名字就知道是让从库跳过一些错误了。以前没有注意过这个参数,这里了解一下这个参数的用法。

----------------------------------------

环境说明:

mysql>show  slave stsatus\G;

报错信息如下:

......

Last_Errno: 1062

Last_Error: Error 'Duplicate entry '1' for key 'PRIMARY'' on query.......

......

1062的错误是指一些主键重复的错误,在my.cnf用slave-skip-erros 可以跳过去。这样就避免了由于sql出错导致的从复制失效。

----------------------------------------

Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND;

造成1032错误的根本原因是主从数据库数据不一致,导致同步操作在从库上无法执行.解决办法同上

在slave的my.cnf里面写入
slave-skip-errors = 1062
启动后它将会忽略所有类型为1062的错误.

ftp中“二进制传输模式”和“ASCII传输模式”有什么区别?

《Red Hat Linux 指南:服务器设置与程序设计篇》第2章FTP:跨越网络传送文件,这一章为您介绍实现FTP协议的服务器和客户端有很多种、以及开FTP服务器可以让用户以匿名用户身份anonymous或者ftp登录,最后为您介绍FTP提供了两种传输文件的模式:二进制模式和ASCII模式。本小节讲述的是二进制传输模式和ASCII传输模式。

2.3.6 二进制传输模式和ASCII传输模式

FTP服务器vsftpd能够(但并不总是)提供两种文件传输模式。二进制模式传输总是复制文件的精确的、字节对字节的文件映像,而绝不会改变行结束符。所有二进制文件都用二进制模式传送。除非需要转换行结束符,否则也要使用二进制模式来传输ASCII文件。 Continue reading

理解MySQL数据库覆盖索引

话说有这么一个表:

CREATE TABLE `user_group` (
`id` int(11) NOT NULL auto_increment,
`uid` int(11) NOT NULL,
`group_id` int(11) NOT NULL,
PRIMARY KEY  (`id`),
KEY `uid` (`uid`),
KEY `group_id` (`group_id`),
) ENGINE=InnoDB AUTO_INCREMENT=750366 DEFAULT CHARSET=utf8

看AUTO_INCREMENT就知道数据并不多,75万条。然后是一条简单的查询:

  SELECT SQL_NO_CACHE uid FROM user_group WHERE group_id = 245;

很简单对不对?怪异的地方在于:

如果换成MyISAM做存储引擎的时候,查询耗时只需要0.01s,用InnoDB却会是0.15s左右。 Continue reading

Ajax getjson 跨域通信 php+jquery

网站A的表单提交部分:

<script type="text/javascript" src="jquery-1.4.4.min.js" ></script>
<script type="text/javascript">

$("#myform").submit(function(){
var name = $("#name").val();
var phone = $("#phone").val();
$.getJSON("http://www.siteb.com/do.php?name=" + name + "&phone=" + phone + "&format=json&jsoncallback=?",
function(data){
if(data.status == 'ok'){
alert('操作成功!');
}else{
alert('操作失败!');
}
});
return false;
});
</script>

Continue reading

高性能JavaScript模板引擎原理解析

随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascript 被寄予了更大的期望,与此同时 javascript MVC 思想也开始流行起来。javascript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注,近一年来在开源社区中更是百花齐放,在 Twitter、淘宝网、新浪微博、腾讯QQ空间、腾讯微博等大型网站中均能看到它们的身影。

本文将用最简单的示例代码描述现有的 javascript 模板引擎的原理,包括新一代 javascript 模板引擎 artTemplate 的特性实现原理,欢迎共同探讨。 Continue reading

使用mysql来实现lbs(地理位置服务)功能

现在大型的网站实现的lbs服务基本上是用mongodb的实现定位的(gps不太清楚)。对于小的应用来说,有些大材小用了,而且还大大增加了维护成本。这里用mysql来实现lbs的功能。

以下是从“知乎”网上的一篇文章(http://www.zhihu.com/question/20059072)。

数据库设计层面,有两个方案

(1)字段主要包括 userId,lat,lng。分别代表用户ID、最近一次 Checkin 的经度、纬度。
lat/lng 建立复合索引。

然后通过手机的定位,得到自己的位置,比如记为 myLat,myLng。
代码如下,先做一个计算,算出 1km 所对应的经纬度范围:
double range = 180 / Math.PI * 1 / 6372.797;     //里面的 1 就代表搜索 1km 之内,单位km
double lngR = range / Math.cos(myLat * Math.PI / 180.0);
double maxLat = myLat + range;
double minLat = myLat - range;
double maxLng = myLng + lngR;
double minLng = myLng - lngR;

然后执行 SQL :
SELECT * FROM checkinTable WHERE ((lat BETWEEN ? AND ?) AND (lng BETWEEN ? AND ?))
这四个问号,分别代入变量
minLat、maxLat、minLng、maxLng

然后就可以查询得到结果
但是,这样得到的结果不是有序的。
如果要排序,在客户端执行。
不建议在 SQL 层上执行,因为上述的那个 SQL 是可以用到索引进行查询的,一旦引入排序后,就会影响效率。

(2)高级用法,但是有点大材小用的感觉。
就是使用 Spatial Index(空间索引)。MySQL 5.0 之上的系统,都支持该类型的索引。
数据表可以简化为 userId 和 userLocation。 userLocation 是 Point 类型,同时建立 R-TREE 索引。
SQL 语句直接使用一个非标准的 OpenGIS 函数 DISTANCE 就可以了。
这个部分可以参考 MySQL Spatial Index Manual。如果用其他数据库,应该类似。

经测试发现用这个的方法确实实现。对于小网站来说也足够了。

jquery中validate插件和form插件冲突的解决办法

如题:用jquery form提交表单,用jquery validate做数据验证 ,现在的问题是分别使用validate有作用,一起使用,则validate不起作用,谁遇到过帮忙解决下。

  1. <script type="text/javascript">
  2.   $(document).ready(function() {
  3.     $("#inputForm").validate({
  4.     ...
  5.          });
  6.   });
  7.   function onsubmit(){
  8.     var options ={
  9.        ...
  10.     };
  11.     $('#inputForm').ajaxSubmit(options); //options
  12.     return false;
  13.   }
  14. </script>

==================

补充一下,这个submitHandler:function(){}方法内可以写任何方法。但最后要有一个form.submit或form.ajaxSubmit
比如我这个

  1. $(document).ready(function(){
  2.             $("#loginForm").validate({
  3.                 rules: {
  4.                     shouJiHaoMa: {
  5.                         required: true,
  6.                         digits: true
  7.                     },
  8.                     pwd: {
  9.                         required: true
  10.                     }
  11.                 },
  12.                 messages: {
  13.                     shouJiHaoMa: {
  14.                         required: '请输入手机号码',
  15.                         digits: '请输入正确的手机号码'
  16.                     },
  17.                     pwd: {
  18.                         required: '请输入密码'
  19.                     }
  20.                 },
  21.                 // specifying a submitHandler prevents the default submit, good for the demo
  22.                 submitHandler: function() {
  23.                             login();
  24.                 return false;
  25.                 },
  26.                 errorElement: "em",
  27.                 success: function(label) {
  28.                 label.text(" ")             //清空错误提示消息
  29.                     .addClass("success");   //加上自定义的success类
  30.                 }
  31.             });

我的login()内最后提交了form

  1. login = function() {
  2.     $('#login_tmp').remove();
  3.     var options = {
  4.         type : "get",
  5.         dataType : "json",
  6.         url : "login.do",
  7.         data : {"method" : "ajaxLogin"},
  8.         cache : "false",
  9.         beforeSubmit : beforeCallBack,
  10.         success : loginCallBack,
  11.         error : errorCallBack
  12.     };
  13.     // 异步提交登陆请求
  14.     $("#loginForm").ajaxSubmit(options);
  15. }

参考:http://www.iteye.com/problems/35657

windows下node.js之 express框架+jade模板搭建

1、node.js安装

在Windows平台部署Node.js比较容易,从0.6.1开始,Node.js在Windows平台上可直接通过.mis文件安装。

下载地址http://nodejs.org/#download 目前最新版本是 node-v0.8.3-x86.msi

文件在安装过程中已经指定了默认安装路径。

验证node.js 安装是否成功

打开cmd,直接输入node -v

2.npm安装

node安装成功后npm已经默认安装,npm可以直接安装相关扩展 Continue reading