window wamp下xhprof的安装使用,Graphviz配置

       起因:本地一个网站后台登陆的时候特别卡,卡的我心烦,点击登陆要等待好久,肉眼我还真看不出哪里有毛病,祭出神器来监测下,看看到底哪里卡!最后找到原因是file_put_contents函数,因为请求了淘宝IP地址库的远程接口导致缓慢。因为是我本地缓慢,我的解决办法:判断是127.0.0.1直接return返回,不请求接口,如果线上缓慢可以把请求到的结果缓存到文件或内存,下次碰到同样的ip直接从缓存取出。

淘宝IP地址库http://ip.taobao.com/instructions.php

附上缓慢现场图:

blob.png

blob.png

- 阅读全文 -

根据两点间的经纬度计算距离

/**
 *  @desc 根据两点间的经纬度计算距离
 *  @param float $lat 纬度值
 *  @param float $lng 经度值
 */
function getDistance( $lat1, $lng1, $lat2, $lng2 )
{
    $earthRadius = 6367000; //approximate radius of earth in meters

    $lat1 = ($lat1  pi() ) / 180;
    $lng1 = ($lng1 
 pi() ) / 180;
    $lat2 = ($lat2  pi() ) / 180;
    $lng2 = ($lng2 
 pi() ) / 180;

    $calcLongitude = $lng2 - $lng1;
    $calcLatitude = $lat2 - $lat1;
    $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1)  cos($lat2)  pow(sin($calcLongitude / 2), 2);
    $stepTwo = 2  asin(min(1, sqrt($stepOne)));
    $calculatedDistance = $earthRadius 
 $stepTwo;

    return round($calculatedDistance);
}

echo getDistance( '39.976315','116.492302','39.976315','116.492302' );


在线计算两点距离网址   http://www.nhc.noaa.gov/gccalc.shtml



MySQL之Field‘***’doesn’t have a default value错误解决办法

  一个注册报错的问题,是因为字段没有默认值,我本地环境mysql5.5没有问题,外网演示环境是mysql5.6,通过查资料知道了原来是my.ini配置问题的问题。

解决方法:

打开my.ini,查找

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

修改为

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后重启MYSQL


STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。 

在STRICT_TRANS_TABLES模式下,当我们插入数据时,mysql会严格的进行数据的校验,当发现插入列值未满足要求,直接报告error错误,保证了错误数据无法插入到数据库中。


MySql不停机添加丛库小记

  拖了很长时间才开始写这篇文章,本来打算上线之后第二天立刻开始记录的,一直有很多碎片事情要做。

  基础是已经有一主一丛,或一主多从,由于业务需要增加新的丛库来分担读的压力。查看如何配置主从复制

不停机平滑加丛库主要原理是: 

1、停掉当前的丛库同步 stop slave。做这一步之前需要需要代码层的改动,将这个从库从web业务脱离,建议访问量少时候操作。

2、查看丛库状态,show slave status  记下 Relay_Master_Log_file 和 Exec_Master_Log_Pos 

3、备份丛库,Myisam直接打包文件拷贝到另一台机器就可以了。Innodb的可以用xtrabackup备份,数据量少可以直接用Navicat数据传输,或者mysqldump导出。 

4、将数据库备份拷贝到待加丛库的机器,数据怎么弄过来方法很多,一定要保证拷贝过来的数据与上一个丛库的数据一致,数据表正常可用。 

5、编辑配置文件 my.cnf  修改 server-id (不要与之前的丛库相同) replicate-do-db(同步的库)  这两个参数

6、在新丛库设置主库的连接信息

change master to
master_host='192.168.0.xxx',
master_port=3306,
master_user='userdb_slave',     
master_password='xxxxxxxxxxxxxxxxx',
master_log_file='mysql-bin.000169',     # 上面记录的
master_log_pos=824721706;               # 上面记录的

7、重启数据库,start slave 开启同步。show slave status  

看这两个参数 Slave_IO_Running    Yes   Slave_SQL_Running   Yes  那就证明主从正常了

8、不要忘了把上一个丛库开启同步 start slave,查看上一个丛库和新加丛库是否正常同步可用,最后加入到web业务代码里面。

SQL四种语言:DDL,DML,DCL,TCL

1.DDLData Definition Language数据库定义语言statements are used to define the database structure or schema.

DDL是SQL语言的四大功能之一。
用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束
DDL不需要commit.
CREATE
ALTER
DROP
TRUNCATE
COMMENT
RENAME

2.DMLData Manipulation Language数据操纵语言statements are used for managing data within schema objects.

- 阅读全文 -