服务器

Posts filed under 服务器

Nest温控器保留历史数据

Filed in php心得, 服务器

Nestgraph是一个利用本地数据库来保留温度历史数据的开源代码。
本来的代码使用的是非官方的api, nest_api。通过修改,新的代码使用了官方的REST API。这样,只需要给nestgraph只读权限,而不需要在服务器端保存用户名和密码,增强了安全性。

使用官方的API,避免了原nest_api的诸多bug,可以将读取时间间隔缩短到1分钟。

详见https://github.com/lubao515/nestgraph

Parallels Desktop 10 无法支持 Ubuntu 15的解决办法

Filed in 服务器Tags: ,

Ubuntu 15.10 发布有很长时间了,但是不知道为什么Parallel Desktop依然没有对Parallel Desktop tool做针对性的修改。

直接打开安装包中的kmods/prl_mod.tar.gz,对其中的文件作一下的修改, 或者直接下载我修改工具即可(点击这里下载):

Read the rest of this entry »

php升级5.2.17 mysql升级5.5.37 后无法连接数据库原因

Filed in php心得, 服务器

mysql升级后默认sock为/tmp/mysqld.sock 但是配置文件中指定为/tmp/mysql.sock
php升级后默认也是 /tmp/mysqld.sock,由于这个原因,就找不到sock

解决方案一:修改php.ini 中
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

修改方案二:修改my.cnf的两处
socket  = /tmp/mysqld.sock

mysql奇葩的in语句

Filed in php心得, 服务器

如果in的key有索引,然后先select完了,将结果用key in (result1,result2, …)拼接就会走索引

可以如果直接 key in (select …)就不会走索引

奇葩吧,大家引以为戒,一定要用第一种方法,不然会卡到爆的

demo:

$sql = "select result from table1 where key='key1'";
$rows = $db->get_rows($sql);
$result = array();
foreach ($rows as $row)
{
$result[] = $row[0];
}
$result = implode(",", $result);
if ($torrentid)
{
$sql = "select * from table2 where result in($result) ";
}

走索引

select * from table2 where result in (select result from table1 where key='key1')

不走索引

理论上来说,两句话应该是完全一样的,但是因为mysql莫名其妙的优化方案,导致第二句居然不走索引……所以让php多处理几句话吧

mac下使用http代理连接ssh

Filed in 服务器

打开ssh config文件
vim ~/.ssh/config
假设你要访问的服务器域名是example.com,代理是proxy.com,端口是proxy_port
那么,在config中添加如下语句
Host example.com
ProxyCommand nc -X connect -x proxy.com:proxy_port %h %p

Centos下svn服务器搭建

Filed in 服务器Tags: , , ,

一直想搭建一个svn服务器,方便代码的管理和维护,可是一直没有去专门研究这个事情,主要是因为ihipop同学比较强大,给出了svn详细的配置方法,好处是它详细,坏处是太详细了,使我对svn有了一种莫名的敬畏感。

这几天研究了一下,发现其实没有那么难。

首先 安装svn

运行
yum -y install subversion

然后创建版本库

mkdir -p /data0/svndata
svnadmin create /data0/svndata/svnserver1

编辑配置文件conf/svnserve.conf

vim /data0/svndata/svnserver1/conf/svnserve.conf

分别将
anon-access
auth-access
password-db
authz-db
realm
前面的注释符号去掉

anon-access = none意思是没有权限的禁止访问
auth-access = read作者可写
password-db 指定用户名密码的文件,可指定,不用修改
authz-db 指定用户权限配置文件位置,不用修改
realm 域名称 用于显示在同步的时候 可以设置为自己代码服务的名称 比如realm = svnserver1

conf /Passwd文件是配置用户名和密码的,源文件里给出了demo,即

user1 = user1password
user2 = user2password
user3 = user3password
.
.
.

关于权限文件conf /authz 的设置 sxj52ll的博客上给出了这样的推荐设置方法
[groups] 设置组
admin = user1
[/] 根目录权限设置(就是“svndata”这个文件夹)
user1 = rw 用户1权限是:可读写
user2 = r 用户2权限是:可读,不可写
@admin = rw 设置组权限
[svndata:/svnserver1] 设置根目录下“svnserver1”文件夹的权限
user1 = rw
user2 = r
…以此类推

但是我认为,依照组的设置方法可能更方便,大家根据自己的需要自行设置

[groups]
admin = user1,user2
read = user3
[/] 根目录权限设置(就是“svndata”这个文件夹)
@admin = rw 设置admin组权限
@read = r 设置read组权限
[svndata:/svnserver1] 设置根目录下“svnserver1”文件夹的权限

@admin = rw 设置admin组权限
@read = r 设置read组权限
…以此类推

这样的好处是显而易见的,当有很多用户,和很多工程时,我就可以根据需要,将特定的用户,加入到特定的组里,而不用逐个目录设置用户的权限

配置完成!

启动SVN服务:
svnserve -d -r /data0/svndata/
-d表示后台运行
-r 指定根目录是 /data0/svndata/

停止SVN服务:
ps -aux |grep svn
kill -9 进程杀掉

在客户端配置好svn的路径 svn://ip地址或域名:3690/svnserver1即可

当然,知道,为了安全起见,svn服务器和网站的服务器通常不放在一起的,svn同步后确定没有问题了,才会向网站服务器同步
使用
svn update 网站路径
(当然首先要把代码commit当网站上,建立svn资料)

但是,我们的服务器通常ssh起来都比较麻烦,这个提供一个比较简单的办法

建立一个php脚本

\n";
$rows = array();
$arg_file = '/var/args';
$cmd ="/usr/bin/svn update 网站路径 --username=user3 --password=user3password 2>&1 <$arg_file"; exec($cmd, $rows); foreach ($rows as $row) { echo $row."
\n";
}
echo "done!";
?>

然后在/var/下建立一个用于隧道传参的文件args,内容

no

这样,只需要刷新这个脚本,就可以同步了,是不是很方便呢?

关于wordpress静态化方法

Filed in 服务器Tags: , , ,

最近开始重新折腾自己的博客,用了一下午的时间搭建了服务器,nginx+php-fpm
奈何服务器实在太烂,php脚本不能开的太多(主要是内存太小了,用大内存的服务器用习惯的人啊……)
一个cgi进程占20M,直接死机了……减少了cgi的进程数,果断好多了
然后我就在想,如果页面是静态的,那么利用nginx的静态优势,不就能大大减少cgi占用的内存了么?
由于不怎么用wordpress的后台(最多开发个主题神马的),所以着实研究了半天

首先,要想先静态化,先要伪静态化,正所谓欲练此功,必先**

先设置好nginx,其实原理很简单,无非就是自动转换一个index.php的入口

location / {
root ****;
index index.html index.htm index.php;
if (-d $request_filename) {
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
if (-f $request_filename/index.html)
{
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php)
{
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}

reload一下。

然后,在后台设置一下固定连接的形式,考虑到一个月发的日志不会太多,但是全放在根目录下,以后可能会超过linux的文件数限制,故使用了依照年月分目录
/archives/%year%/%monthnum%/%day%/%post_id%.html

尝试一下,网站能正常访问,OK

最后,安装一个生成缓存的插件,看了一下网上的评论,公认cos-html-cache比较不错
下载地址:cos-html-cache 2.7.3官网下载

下载,安装,启用,最后检查一下相应的路径下是否已经生成了文件

done

使用nginx进行大图等比例缩小并缓存

Filed in 服务器Tags: ,

1、需要image_filter模块,没有的话重新编译nginx,编译参数加上
--with-http_image_filter_module
2、配置文件1(需要使用缩略图的虚拟主机)
location ^~ /images/ {
autoindex off;
alias /path/to/image/file/;
expires 30d;
location ~ ^/images/thumb(100|150|346)/(.*)\.(jpg|png|gif)$
{
alias /path/to/image/cache/thumb$1/$2.$3;
set $image_uri /images/$2.$3?width=$1&height=$1;
set $image_filename thumb$1/$2.$3;
if (!-f $request_filename) {
proxy_pass http://127.0.0.1/$image_uri;
break;
}
proxy_store /path/to/image/cache/$image_filename;
proxy_store_access user:rw group:rw all:r;
proxy_set_header Host 127.0.0.1;
}
}

3、配置文件2(进行缩略图处理的虚拟主机)
server
{
listen 80;
listen [::]:80;
server_name 127.0.0.1;
charset utf-8;

location ~ ^/images/(.*)\.(jpg|png|gif)$
{
alias /path/to/image/file/$1.$2;
set $img_width $arg_width;
set $img_height $arg_height;
image_filter test;
image_filter resize $img_width -;
image_filter_buffer 1M;
image_filter_jpeg_quality 80;
# image_filter_sharpen 50; 0.7.45无该参数
allow 127.0.0.0/8;
deny all;
}
access_log off;
}

4、本例中限定缩小后的宽度为100、150、346之一。

从数据库的原理及备份方案

Filed in 服务器Tags:

主从服务器技术,又叫数据库复制,是一种从一个服务器到多个服务器的异步同步技术,同步延时视主服务器的负载而定
数据库复制的技术细节如下:

1、主服务器把数据更新记录到二进制日志中
2、从服务器把主服务器的二进制日志拷贝到自己的中继日志中
3、从服务器重做中继日志的时间,把更新应用到自己的数据库上。

复制不光可以复制,由于他的短延时的特性(通常几秒钟)还可以做数据库负载均衡
通常网上使用的方法是DNS轮询,即通过DNS服务器返回不同的ip,已达到负载均衡的目的
但是,介于咱们学校的DNS服务器实在是不给力,和外部的DNS通信太慢,所以,改方式不适用与极速
第二个方案是做主从服务器读写分离,当然也有多种办法,有些插件变可以实现这项功能,但是由于极速特殊情况的存在,不利于控制
于是,选用使用php代码的方式,来控制读写分离,这样,易于控制和合理的调整

关于备份我的想法:
从刚才的分析可以看出,复制基本上可以解决服务器的备份问题,但是存在一种较为特殊的情况
那就是,当对主服务器误操作的时候,复制会立刻将修改更新的从服务器上,这样就比较麻烦
所以,即使有了主从服务器,还是需要对数据库进行定期的备份
备份的方式据我了解有以下四种

1、冷备份:
通过对frm文件、共享表空间文件、ibd文件、重做日志文件进行直接拷贝即可。由于mylisam只需要对frm和ibd进行拷贝即可,所以一般人会忽视共享表空间文件和重做日志文件,导致其余类型的数据库无法启动(而且说实在话,我还真不知道这两种文件在什么地方……)
而且该方法必须停止数据库进程,否则极易出现数据表损坏的情况,所以叫冷备份。(某个开着数据库备份的大大自弹小鸡鸡谢罪吧)
2、逻辑备份
即使用mysqlddump命令,
个人比较推崇这种方法产生,该方法不需要停掉数据库(停掉数据库这个语句也执行不起来……)
生产的是sql文件,跨平台性强,易于导入,
但是有个小小的问题,由于该语句相当于selet语句的原理,所以在出现update的语句是可能会造成排队现象
比较适合在深夜执行
3、热备份
顾名思义,和冷备份相对,可以在不停止数据库的情况下进行备份,而且不会影响到sql语句,是一种非常优秀的备份方式
但是有个比较大的问题,官方提供的ibbackup插件是收费的,啦啦啦啦啦啦……
当然有一种叫做XtraBackup的替代方案,还可以实现增量备份,不过没有实验过,可以考虑试试~
4、硬盘镜像
改方案必须使用LVM的硬盘模式,使用写时复制的技术,不会对原硬盘数据的读写造成任何的影响,是一种非常值得考虑的技术
当然,由于是全盘镜像,会对硬盘造成极大的压力,只一点不得不考虑

先写这么多吧,其实这个假期主要是对innodb进行了大量的研究,结果发现这个技术只有当内存超过数据库大小是才能体现出最高的效率
内存太贵了,so,放弃了……
还是主从数据库吧……

极速架设全过程(续)

Filed in 服务器Tags: , , ,

上接幽大的帖子

http://bitpt.cn/uc/home/space.php?uid=25&do=blog&id=386

配置好服务器后,需要配置教育网的源,然后yum update。

安装好apache,php,mysql。php升级为5.2以上的版本,因为极速中的部分函数php5.3不支持,所以不要往5.3升。

因为我的专长在php编程上,所以很多东西写得不是很详细,希望幽冥大大来补充一下

配置好php后,开始安装极速所需要php扩展

1.eaccelerator(自己没装过,幽大来一下补充)

2.memcache

在终端命令行内以root权限运行一下命令

wget http://pecl.php.net/get/memcache-3.0.4.tgz
tar zxvf memcache-3.0.4.tgz
cd memcache-3.0.4
/usr/bin/phpize
./configure –with-php-config=/usr/bin/php-config
make
make install

完成!

这里有个小技巧,如果你不知道某条命令的位置可以用 locate命令查询,如果是文件则用whereis查询。由于Linux是文件系统,所以通常所用的东西都能用whereis查出

例如:whereis phpize

3.magicwand

wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz

tar xvfz ImageMagick.tar.gz

cd ImageMagick-6.6.0

./configure

make

makeinstall

wget http://www.magickwand.org/download/php/MagickWandForPHP-1.0.8.tar.gz
tar xvfz MagickWandForPHP-1.0.8.tar.gz
cd MagickWandForPHP-1.0.8
/usr/phpize
./configure –with-php-config=/usr/bin/php-config
make
make install

完成!

把之前备份的httpd.conf和php.ini文件拷到该在的位置,详见幽大的帖子

在网站路径下建一个test.php文件,输入

<?php

phpinfo();

?>

关闭保存。

在地址栏中打开,查看是否安装了一下扩展
eAccelerator
short_open_tag
gd
iconv
magickwand
mbstring
memcache
mysql
mysqli

如果是从源上直接update的php,可能会缺少mbtring库

我的解决办法是

先下载和你的php同版本的php的gz包

这里以php5.2.10为例

tar xvfz php5.2.10.tar.gz

cd php5.2.10/ext/mbstring
usr/bin/phpize
./configure –with-php-config=/usr/bin/php-config
make
make install

完成!

下面安装memcached,就是memcache的服务端

wget http://monkey.org/~provos/libevent-1.4.10-stable.tar.gz

tar xvfz libevent-1.4.10-stable.tar.gz
cd libevent-1.4.10-stable.tar.gz

./configure

make
make install

wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz

tar xvfz memcached-1.4.4.tar.gz

cd memcached-1.4.4.tar.gz

./configure –with-libevent=/usr/local/lib/

make

make test

如果提示缺少某个文件(忘了文件名了用*.*表示吧)

cp /usr/local/lib/*.* /usr/lib/
make install

完成!

以root权限运行

/usr/local/bin/memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid

此时注意看SELinux的报错,里面有一个11211的,按照它上面的提示,键入一段话,把httpd访问除80以外的其他端口的权限打开。

然后再运行上面那行命令开启memcached。

插件终于装完了,太不容易了!

在/dev/shm文件夹下建立三个文件分别为

cgbtcache、session、tmp建立权限为777

因为之前配置文件中的配置,这样就把缓存移入到内存中了

然后设置网站访问权限

chown -R apache:apache 网站物理路径

chmod -R 700 网站物理路径

最后,访问一下网站试试吧!在聊天室里随便输入点什么,看看是否显示,如果不显示,则去检查memcached是否开启,memcache是否安装

 

最近评论
Click to view/hide
 
Click to view/hide
2019年十月
« 8月    
 123456
78910111213
14151617181920
21222324252627
28293031  
站点功能
Click to view/hide