virtualbox下 共享目录权限导致:npm ERR! ETXTBSY, rename ‘/home/vagrant/.npm/….
解决办法:
npm config set cache /var/.npm
or
直接修改缓存目录
npm config edit
virtualbox下 共享目录权限导致:npm ERR! ETXTBSY, rename ‘/home/vagrant/.npm/….
解决办法:
npm config set cache /var/.npm
or
直接修改缓存目录
npm config edit
运行yum命令查看MongoDB的包信息
um info mongo-10gen
(提示没有相关匹配的信息,) 说明你的centos系统中的yum源不包含MongoDB的相关资源,所以要在使用yum命令安装MongoDB前需要增加yum源,也就是在 /etc/yum.repos.d/目录中增加 *.repo yum源配置文件
vi /etc/yum.repos.d/10gen.repo,输入下面的语句:
[10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0
做好yum源的配置后,如果配置正确执行下面的命令便可以查询MongoDB相关的信息:
查看mongoDB的服务器包的信息
yum info mongo-10gen-server
安装MongoDB的服务器端和客户端工具
yum install mongo-10gen-server yum install mongo-10gen
centos6.4 默认源,163源都不给力
安装Atomic源
wget -q -O – http://www.atomicorp.com/installers/atomic | sh
地理位置索引支持是MongoDB的一大亮点,这也是全球最流行的LBS服务foursquare 选择MongoDB的原因之一。我们知道,通常的数据库索引结构是B+ Tree,如何将地理位置转化为可建立B+Tree的形式,下文将为你描述。
首先假设我们将需要索引的整个地图分成16×16的方格,如下图(左下角为坐标0,0 右上角为坐标16,16):
单纯的[x,y]的数据是无法建立索引的,所以MongoDB在建立索引的时候,会根据相应字段的坐标计算一个可以用来做索引的hash值,这个值叫做geohash,下面我们以地图上坐标为[4,6]的点(图中红叉位置)为例。
我们第一步将整个地图分成等大小的四块,如下图:
划分成四块后我们可以定义这四块的值,如下(左下为00,左上为01,右下为10,右上为11):
01 | 11 |
00 | 10 |
这样[4,6]点的geohash值目前为 00
然后再将四个小块每一块进行切割,如下:
这时[4,6]点位于右上区域,右上的值为11,这样[4,6]点的geohash值变为:0011
继续往下做两次切分:
最终得到[4,6]点的geohash值为:00110100
这样我们用这个值来做索引,则地图上点相近的点就可以转化成有相同前缀的geohash值了。
我们可以看到,这个geohash值的精确度是与划分地图的次数成正比的,上例对地图划分了四次。而MongoDB默认是进行26次划分,这个值在建立索引时是可控的。具体建立二维地理位置索引的命令如下:
db.map.ensureIndex({point : "2d"}, {min : 0, max : 16, bits : 4})
其中的bits参数就是划分几次,默认为26次。
同步之前做个笔记
centos下yum方式安装最新版本的mongodb
vi /etc/yum.repos.d/10gen.repo,输入下面的语句:
[10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0
查看最新版本信息:
yum info mongo-10gen-server
安装:
yum install mongo-10gen-server
升级:
yum update mongo-10gen mongo-10gen-server
启动:service mongod start
主从服务器各自安装好带连接认证的mongodb
use admin db.addUser('sa','sa')
1.首先我们备份好数据库
备份数据库foo
mongodump -uroot -p -d foo -o /data/backup/database/
附带一个还原命令:
(mongorestore -uroot -p -d foo –drop /data/backup/database/)
2.主从加同步认证账号:
主服务器和从服务器必须开启安全认证:–auth, 主服务器和从服务器的admin数据库中必须有全局用户, 然后主服务器的local数据库和从服务器的local数据均有名为repl且密码相同的用户名。
use local db.addUser('repl','repl')
主服务器:
vi /etc/mongo.conf
master = true source = 172.16.1.22,172.16.1.23(从库ip)
从服务器:
vi /etc/mongo.conf< slave = true source =172.16.1.11:27017
各自重启服务器:
3.查看数据是否全部同步过来了
附上:mongodb的备份脚本
#!/bin/sh today=$(date +"%Y%m%d") old7day=$(date -d "7 days ago" +"%Y%m%d") cd /data/backup/database/ /usr/local/mongodb/bin/mongodump -uroot -ppassword -o /data/backup/database/ zip -rP 888888 /data/backup/database/xz_ad_db_${today}.zip foo zip -rP 888888 /data/backup/database/admin_db_${today}.zip admin rm -rf /data/backup/database/foo rm -rf /data/backup/database/admin
Bucardo 是一个用 Perl 语言编写的 PostgreSQL的多Master节点复制系统
它支持任意方式的同步,以下是同步到mongodb的说明
参考:http://blog.endpoint.com/2011/06/mongodb-replication-from-postgres-using.html
Slave机器的IO和SQL状态都必须为YES,才是同步状态;
#!/bin/bash #Check MySQL Slave's Runnning Status #Crontab time 00:10 MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'` MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'` STATUS=$(/usr/bin/mysql -uroot -p123qwe -S /var/lib/mysql/mysql.sock -e "show slave status\G" | grep -i "running") IO_env=`echo $STATUS | grep IO | awk ' {print $2}'` SQL_env=`echo $STATUS | grep SQL | awk '{print $2}'` DATA=`date +"%y-%m-%d %H:%M:%S"` function checkMysqlStatus(){ if [ "$MYSQLPORT" == "3306" ] then /usr/bin/mysql -uroot -p123qwe --connect_timeout=5 -e "show databases;" &>/dev/null 2>&1 if [ $? -ne 0 ] then echo "Server: $MYSQLIP mysql is down, please try to restart mysql by manual!" > /var/log/mysqlerr mail -s "WARN! server: $MYSQLIP mysql is down." xxxx@126.com < /var/log/mysqlerr else echo "mysql is running..." fi else mail -s "WARN!Server: $MYSQLIP mysql is down." mailcity@126.com fi } checkMysqlStatus if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ] then echo "MySQL Slave is running!" else echo "####### $DATA #########">> /var/log/mysql/mysql_slave_status.log echo "MySQL Slave is not running!" >> /var/log/mysql/mysql_slave_status.log echo "MySQL Slave is not running!" | mail -s "WARN! $MYSQLIP MySQL Slave is not running." xxxx@126.com fi
siege下载地址:http://www.joedog.org/pub/siege/siege-3.0.3.tar.gz
centos 下编译安装
./configure
make
make install
创建.siegec.config配置文件到当前用户的家目录下 /roor/.siegerc
/usr/local/bin/siege.config
使用
50个用户(每次并发量,注意不是每秒并发量) 重复100次 共产生 50 * 100 = 5000个请求
/usr/local/siege/bin/siege -c 50 -r 100 https://www.abc.com/a.php
50个用户 重复100次 发送GET参数
/usr/local/siege/bin/siege -c 50 -r 100 https://www.abc.com/a.php?name=zhangsan
50个用户 重复100次 发送POST参数 (注意引号)
/usr/local/siege/bin/siege -c 50 -r 100 “https://www.abc.com/a.php POST name=zhangsan”
50个用户 重复100次 发送POST参数(从文件中读取)
/usr/local/siege/bin/siege -c 50 -r 100 “https://www.abc.com/a.php POST < /root/ab_test/post.xml”
另外还有发送时间参数等
详情请man 或 siege -h
参考链接:http://www.joedog.org/siege-home/
昨晚帮一个美女装无线路由,折腾完都12点了,
走的时候她竟然跟我说晚上骑车不好,不安全,要不留下住一晚吧。
真是可笑,哥的车技如同行云流水,怎么会不安全!?
20分钟就到家啦!
今天在十字路口碰到俩打架得,周围很多人看热闹,
警察也来了,一打听才得知,
原来这俩人是到十字路口烧纸的,
其中一个烧纸的时候说:爸,你生前没花到多少钱,现在给你多烧点,弄个飞机开。
另一个烧纸的听到后,边烧纸边嘟囔:操、真JB能吹,爸,我也给你多烧点,买个大炮,专门轰飞机。
然后就打起来了!
某村搞计划生育,成年男子一律结扎。一个老光棍坐不住了,到计生办要求结扎。
工作人员火了:你凑什么热闹,人家结扎的都是有老婆的,你一个人扎啥子?
老光棍也火了,愤愤地说:全村的男人都结扎了,那以后村里哪个女人怀孕了,
不都要赖在我头上吗?老子没那么傻!
牙疼到医院拔牙,前面有一个四五岁小男孩不愿意治疗,哭闹,怎么哄都不行。
男孩儿妈妈就说:“不疼的,乖,要不让后面的叔叔先来,你看看叔叔疼不疼”
男孩儿点头答应。于是我坐在治疗椅上治疗,医生很麻利地打麻药,拿钳子拔牙。
尼玛拔断了有没有,然后各种拽拉,终于拔掉了,弄的老子满嘴是血。
疼的我啊啊大叫,眼泪都出来了。然后之前的那男孩吓傻了,哭着跑了……
我只想说:姐,我真不是装的,是真他妈疼啊!你原谅我吧!
有两种方式构建软件设计:一种是把软件做得很简单以至于明显找不到缺陷;另一种是把它做得很复杂以至于找不到明显的缺陷。
一个人,一定要想清楚自己五年后要做什么,不要只看着眼前。