Archive for 虚拟服务器技术

安装Directadmin遇到错误

安装Directadmin遇到

*** Cannot find /usr/include/et/com_err.h. (yum install libcom_err-devel) ***
Installation didn’t pass, halting install.
Once requirements are met, run the following to continue the install:
cd /usr/local/directadmin/scripts
./install.sh
Common pre-install commands:

http://help.directadmin.com/item.php?id=354

==================
yum install libcom_err-devel
==================
Total 972 kB/s | 116 MB 02:02
Running rpm_check_debug
ERROR with rpm_check_debug vs depsolve:
keyutils-libs-devel is needed by krb5-devel-1.10.3-10.el6_4.1.i686
libselinux-devel is needed by krb5-devel-1.10.3-10.el6_4.1.i686
zlib-devel is needed by openssl-devel-1.0.0-27.el6_4.2.i686
** Found 7 pre-existing rpmdb problem(S), ‘yum check’ output follows:
e2fsprogs-devel-1.41.12-3.el6.i686 has missing requires of e2fsprogs-libs = (’0′, ’1.41.12′, ’3.el6′)
e2fsprogs-devel-1.41.12-3.el6.i686 has missing requires of libcom_err-devel
e2fsprogs-devel-1.41.12-3.el6.i686 has missing requires of pkgconfig(com_err)
krb5-devel-1.8.2-3.el6.i686 has missing requires of keyutils-libs-devel
krb5-devel-1.8.2-3.el6.i686 has missing requires of libcom_err-devel
krb5-devel-1.8.2-3.el6.i686 has missing requires of libselinux-devel
openssl-devel-1.0.0-4.el6.i686 has missing requires of zlib-devel

执行

yum -y install zlib-devel
yum -y install e2fsprogs*

即可解决

Bemerkungen

Linux建立Swap分区文件并自动mount

Zweck:建立一个2G大小的swap分区并在系统启动时自动mount
系统环境RedHat53

1. dd if=/dev/zero of=/swapfile bs=1k count=2048000
2. mkswap /swapfile
3. swapon /swapfile
4. 修改/etc/fstab使其启动时自动mount
在/etc/fstab中增加如下语句
/swapfile swap swap defaults 0 0
5. 搞定!

Bemerkungen

ifto[ 安装教程

 

直接省略上面的步骤

CentOS系统

yum install flex byacc libpcap ncurses ncurses-devel

wget ftp://fr2.rpmfind.net/linux/dag/redhat/el5/en/i386/dag/RPMS/iftop-0.17-1.el5.rf.i386.rpm

rpm -ivh iftop-0.17-1.el5.rf.i386.rpm

Bemerkungen

三款免费的PHP加速器APCeAcceleratorXCache比较

一直想找一些关于PHP加速的文章偶然看到杀客的这篇文章感觉不错分享给大家再此感谢杀客

A、PHP加速器介绍

PHP加速器是一个为了提高PHP执行效率从而缓存起PHP的操作码这样PHP后面执行就不用解析转换了可以直接调用PHP操作码这样速度上就提高了不少

Apache中使用mod_php的请求响应执行流程

1、Apache接收请求
2、Apache传递请求给mod_php
3、mod_php定位磁盘文件并加载到内存中
4、mod_php编译源代码成为opcode树
5、mod_php执行opcode树

PHP加速器相应的就是第四步它的目的就是防止PHP每次请求都重复编译PHP代码因为在高访问量的网站上大量的编译往往没有执行速度快呢?所以这里面有个瓶颈就是PHP的重复编译既影响了速度又加载了服务器负载为了解决此问题PHP加速器就这样诞生了

zwei、PHP加速器安装与配置

1、安装配置APC

APC全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”,它是PHP PECL中的一个扩展好像是facebook在使用它下面开始安装(ubuntu环境)
$wget http://pecl.php.net/get/APC-3.0.19.tgz
$tar xvzf APC-3.0.19.tgz
$cd APC-3.0.19/APC-3.0.19
$/usr/local/php/bin/phpize
$./configure –enable-apc –enable-apc-mmap –with-php-config=/usr/local/php/bin/php-config
$machen
$sudo make install

下面我们再配置APC,因为我的PECL扩展路径改变了所以我得移动下编译好的文件
$sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/apc.so /usr/local/php/lib/php/extensions/PECL

然后我们再编辑php.ini文件进行配置请把下面的代码加入到php.ini中即可
extension_dir = “/usr/local/php/lib/php/extensions/PECL
extension = apc.so
; APC
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64
apc.optimization = 1
apc.num_files_hint = 0
apc.ttl = 0
apc.gc_ttl = 3600
apc.cache_by_default = on

这样重启apache就会在phpinfo()信息中显示

2、安装配置eAccelerator

eAccelerator的前身其实是truck-mmcache因为开发truk-mmcache的人被Zend给招安了所以开发eAccelerator的人继承了truk-mmcache的一些特性设计出eAccelerator加速器安装如下
$wget http://jaist.dl.sourceforge.net/sourceforge/eaccelerator/eaccelerator-0.9.5.tar.bz2
$tar -jxf eaccelerator-0.9.5.tar.bz2
$cd eaccelerator-0.9.5
$/usr/local/php/bin/phpize
$./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config
$machen
$sudo make install
$sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so /usr/local/php/lib/php/extensions/PECL

将下面代码加入php.ini文件中
extension = eaccelerator.so
; eAccelerator
eaccelerator.shm_size = “16”
eaccelerator.cache_dir = “/tmp/eaccelerator
eaccelerator.enable = “1”
eaccelerator.optimizer = “1”
eaccelerator.check_mtime = “1”
eaccelerator.debug = “0”
eaccelerator.filter = “”
eaccelerator.shm_max = “0”
eaccelerator.shm_ttl = “0”
eaccelerator.prune_period = “0”
eaccelerator.shm_only = “0”
eaccelerator.compress = “1”
eaccelerator.compress_level = “9”

创建缓存目录,重启apache

$sudo mkdir /tmp/eaccelerator
$sudo chmod 777 /tmp/eaccelerator
$sudo /usr/local/apache/apachectl restart

在phpinfo()检查是否安装成功.

3、安装配置XCache

XCache作为国人自己开发的东西做小菜鸟的我也感到骄傲而且XCache无论在速度还是性能上都做的不错下面就赶紧让我们品尝它吧!

$wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
$tar xvzf xcache-1.2.2.tar.gz
$cd xcache-1.2.2
$/usr/local/php/bin/phpize
$./configure –enable-xcache –enable-xcache-coverager –with-php-config=/usr/local/php/php-config
$machen
$sudo make install
$sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so /usr/local/php/lib/php/extensions/PECL

在php.ini添加配置信息

extension = xcache.so
; xcache
xcache.admin.user =admin
xcache.admin.pass = “(执行) echo ’(你的密码)|md5sum(得出的密文)”
;
xcache.size = 24M
xcache.shm_scheme =mmap
xcache.count = 2
xcache.slots = 8k
xcache.ttl = 0
xcache.gc_interval = 0

xcache.var_size = 8M
xcache.var_count = 1
xcache.var_slots = 8k
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.test = Off
xcache.readonly_protection = On
xcache.mmap_path = “/tmp/xcache
xcache.coredump_directory = “”
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off
;
xcache.coverager = On
xcache.coveragedump_directory = “”

创建缓存目录重启apache

$sudo mkdir /tmp/xcache
$sudo chmod 777 /tmp/xcache
$sudo /usr/local/apache/bin/apachectl restart

去查看phpinfo()信息吧!

drei、PHP加速器测试

1、测试环境

硬件: AMD Athlon 64 X2 Dual Core Processor 4400+ @ 2.2GHz CPU, 2GB 内存. 160GB SATA 硬盘

软件: Linux Ubuntu server Gutsy 7.10, Apache 2.2.4, MySQL 5.0.45 和 PHP 5.2.3

测试指令: ab -c5 -n3000 http://example.com/ (我们使用的是Apache Benchmark (ab) 工具并发连接为5,3000次请求)

2、测试结果

无任何加速器:

Document Path: /
Document Length: 21757 Bytes
Concurrency Level: 5
Time taken for tests: 288.255212 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 66777000 Bytes
HTML transferred: 65271000 Bytes
Requests per second: 10.41 [#/sec] (mean)
Time per request: 480.425 [Frau] (mean)
Time per request: 96.085 [Frau] (mean, across all concurrent requests)
Transfer rate: 226.23 [Kbytes/sec] received
Connection Times (Frau)
min mean[+/-sd] median max
Connect: 0 0 0.5 0 19
Processing: 181 479 186.0 444 1822
Waiting: 166 461 184.7 427 1708
Total: 181 479 186.0 444 1822
Percentage of the requests served within a certain time (Frau)
50% 444
66% 525
75% 577
80% 619
90% 732
95% 819
98% 946
99% 1012
100% 1822 (longest request)

APC加速器:

Document Path: /
Document Length: 21757 Bytes
Concurrency Level: 5
Time taken for tests: 98.530068 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 66777000 Bytes
HTML transferred: 65271000 Bytes
Requests per second: 30.45 [#/sec] (mean)
Time per request: 164.217 [Frau] (mean)
Time per request: 32.843 [Frau] (mean, across all concurrent requests)
Transfer rate: 661.84 [Kbytes/sec] received
Connection Times (Frau)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 2
Processing: 58 163 71.2 155 2452
Waiting: 53 158 69.6 150 2329
Total: 58 163 71.2 155 2452
Percentage of the requests served within a certain time (Frau)
50% 155
66% 178
75% 193
80% 204
90% 235
95% 258
98% 285
99% 302
100% 2452 (longest request)

eAccelerator加速器:

Document Path: /
Document Length: 21757 Bytes
Concurrency Level: 5
Time taken for tests: 95.983986 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 66777000 Bytes
HTML transferred: 65271000 Bytes
Requests per second: 31.26 [#/sec] (mean)
Time per request: 159.973 [Frau] (mean)
Time per request: 31.995 [Frau] (mean, across all concurrent requests)
Transfer rate: 679.39 [Kbytes/sec] received
Connection Times (Frau)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 57 159 91.3 148 3830
Waiting: 50 152 89.8 142 3704
Total: 57 159 91.3 148 3830
Percentage of the requests served within a certain time (Frau)
50% 148
66% 174
75% 193
80% 205
90% 239
95% 263
98% 289
99% 309
100% 3830 (longest request)

XCache加速器:

Document Path: /
Document Length: 21757 Bytes
Concurrency Level: 5
Time taken for tests: 99.76300 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 66777000 Bytes
HTML transferred: 65271000 Bytes
Requests per second: 30.28 [#/sec] (mean)
Time per request: 165.127 [Frau] (mean)
Time per request: 33.025 [Frau] (mean, across all concurrent requests)
Transfer rate: 658.19 [Kbytes/sec] received
Connection Times (Frau)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 2
Processing: 59 164 83.4 155 3367
Waiting: 52 156 66.4 148 1802
Total: 59 164 83.4 155 3367
Percentage of the requests served within a certain time (Frau)
50% 155
66% 178
75% 196
80% 206
90% 237
95% 263
98% 287
99% 305
100% 3367 (longest request)

3、结果摘要

请求时间()单次请求时间(毫秒)最大内存占用(MB)最小内存占用(MB)
None10.4196.082424
APC30.4532.842121
eAccelerator31.2631.992318
XCache30.2833.022919

PHP加速器比较结果总结

1、通过测试得出eAccelerator在请求时间和内存占用综合方面是最好的

2、通过测试得出使用加速器比无加速器在请求时间快了3倍左右

3、通过各个官方观察XCache是更新最快的这也说明最有发展的

以上是总结结果你也许会问我到底用那个加速器好呢?我只能告诉你,erste,用一定比不用好其次每个加速器还有一些可以调优的参数所以要根据你的系统环境而定,dann,我个人觉得你可以详细研究下eAccelerator和XCache这两款潜力还是很大的最后我从比较专业的测试网站搞了一张结果图

cache

Bemerkungen

linux下如何实时查看mysql当前连接数??命令是啥?

mysqadmin -uroot -p processlist
可以看出连接的详细资料.

如果只是想看连接数.
直接打mysqladmin status
Threads就是连接数

Bemerkungen

服务器安全计划

To ensure that my CentOS machines run as efficiently and securely as possible, I disable a number of services after each installation. The end result is a system that accepts ssh connections on TCP port 22, and on one or more service ports that are in use by the applications hosted on the platform. To get to this state, I go through and disable numerous services that come enabled by default. Here is the default list of services that are enabled after a CentOS 4.4 installation:

$ chkconfig –list | grep on

atd             0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
messagebus      0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
smartd          0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
portmap         0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
sendmail        0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
netfs           0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
cups            0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
irqbalance      0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
rpcgssd         0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
xfs             0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
isdn            0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
autofs          0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
gpm             0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
apmd            0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
crond           0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
acpid           0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
microcode_ctl   0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
pcmcia          0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
cpuspeed        0:off   1:auf    2:auf    3:auf    4:auf    5:auf    6:off
xinetd          0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
rpcidmapd       0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
readahead_early 0:off   1:off   2:off   3:off   4:off   5:auf    6:off
readahead       0:off   1:off   2:off   3:off   4:off   5:auf    6:off
sshd            0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
anacron         0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
network         0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
kudzu           0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
syslog          0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
nfslock         0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
rawdevices      0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off
mdmonitor       0:off   1:off   2:auf    3:auf    4:auf    5:auf    6:off
haldaemon       0:off   1:off   2:off   3:auf    4:auf    5:auf    6:off

Several of these services are required, but several others serve no purpose in my environment, and use CPU and memory resources that would be better allocated to my applications. Since I don’t use RPC services, autofs or NFS, those are the first to get disabled:

$ /sbin/chkconfig –level 0123456 portmap off
$ /sbin/chkconfig –level 0123456 nfslock off
$ /sbin/chkconfig –level 0123456 netfs off
$ /sbin/chkconfig –level 0123456 rpcgssd off
$ /sbin/chkconfig –level 0123456 rpcidmapd off
$ /sbin/chkconfig –level 0123456 autofs off

I also don’t allow individual hosts to receive mail from the outside world, so sendmail gets nixed next:

$ /sbin/chkconfig –level 0123456 sendmail off

On server platforms, who needs printing?:

$ /sbin/chkconfig –level 0123456 cups off

Now we get to the font server, isdn capabilities, console mouse and pcmcia support. I don’t use these services on my servers, so they get disabled as well:

$ /sbin/chkconfig –level 0123456 xfs off
$ /sbin/chkconfig –level 0123456 isdn off
$ /sbin/chkconfig –level 0123456 gpm off
$ /sbin/chkconfig –level 0123456 pcmcia off

Once these services are disabled (and optionally stopped with the service command or a reboot), my netstat output looks nice and clean:

$ netstat –tcp –udp –listening

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:ssh                       *:*                         LISTEN

This has served me well over the years, since it reduces boot time (less rc scripts to run), and frees up additional resources for my applications (while this isn’t substantial, every page of memory helps!).

Bemerkungen

CentOS 5 中OpenSSL和OpenSSH升级

CentOS 5 中OpenSSL和OpenSSH升级

2010-10-24 23:44

把OpenSSL和OpenSSH升级了CentOS 5.2所带的OpenSSL是0.9.8bOpenSSH是4.0p1升级方法如下:

 

openssh 最新版本(http://www.openssh.com/portable.html)

 

wget http://www.openssl.org/source/openssl-0.9.8j.tar.gz

 

tar zxvf openssl-0.9.8j.tar.gz

 

cd openssl-0.9.8j

 

./configprefix=/usr

 

machen

 

make test

 

make install

 

wget http://openbsd.noc.jgm.gov.ar/pub/OpenBSD/OpenSSH/portable/openssh-5.2p1.tar.gz

 

tar zxvf openssh-5.2p1.tar.gz

 

cd openssh-5.2p1

 

./konfigurieren –prefix=/usrwith-pamwith-zlibsysconfdir=/etc/sshwith-ssl-dir=/usrwith-md5-passwords

 

machen

 

make install

Bemerkungen

管理OpenVZ资源-CPU share篇

 

继续昨天的内容今日描述的是OpenVZ中如何控制VE可使用的CPU资源OpenVZ资源管理器允许通过保证VE可使用的CPU time来实现QoS

 

没有设定cpulimit以及没有其他VE竞争CPU资源的情况下VE在获得设置的最小设定保证值外还可以超过该值以充分利用HW的CPU资源

 

A、可设定参数
OpenVZ使用特定的运算规则计算CPU time而设定值的单位就是CPU time这就能避免单CPU和多CPU负载不平均不能充分利用资源的问题
可设定参数有

引用
ve0cpuunits该参数在全局配置文件中设置定义VPS 0可使用的最少CPU time也就是HW可获得保证的最少资源值建议设置为HW CPU time总值的5~10%
cpuunitsVE可获得保证的最少CPU time资源
cpulimit该VE不允许超过的CPU time百分比

正如开头提到的cpuunits不是固定值只要资源许可在没有超过cpulimit百分比的情况下VE可充分获取CPU资源

zwei、设置CPU share
1、计算HW总的CPU time
Erster Schritt,当然是需要计算当前VPS 0(HW)有多少CPU time可以支配

引用
# vzcpucheck
Current CPU utilization: 1000 #已由HW和启动的VE占用的CPU time
Power of the node: 85105 #HW的CPU time总数

2、HW可用CPU time

引用
# grep ‘VE0CPUUNITS=1000’ /etc/vz/vz.conf
VE0CPUUNITS=1000

这是默认值也等于没启动VE前运行vzcpucheck得到的结果

3、设置VE的CPU time

# vzctl set 115 –cpuunits 2500 –cpulimit 5 –save

oder

引用
# vi /etc/vz/conf/115.conf
CPUUNITS=”2500″
CPULIMIT=”5″

意思就是

引用
1)即使在HW的CPU满负荷或者讲the current CPU utilization等于the power of the Node的情况下,115 VE都可以得到约3%(2500/85105)的CPU time资源
2)但在CPU空闲的情况下,115 VE并不能得到超过5%的CPU time资源
3)也就是讲,Unter normalen Umständen,115 VE可用的CPU time资源在3%~5%之间
4)若不设置cpulimit那么115 VE在没有其他VE竞争而资源又允许的情况下就可以超过3%但只要不超过HW的负荷就可以了

启动VE结果

引用
# vzctl start 115
# vzcpucheck
Current CPU utilization: 3500
Power of the node: 85105

该设置还是动态有效的

引用
# vzctl set 115 –cpuunits 4000 –cpulimit 5 –save
Setting CPU limit: 5
Setting CPU units: 4000
Configure meminfo: 49152
Saved parameters for VE 115
# vzcpucheck
Current CPU utilization: 5000
Power of the node: 85105

4、问题
从上面的描述可以知道OpenVZ通常用最少保证值来让VE可充分的利用系统资源这是其设计原理之一但由此会带来一个问题就是

引用
# vzctl set 112 –cpuunits 85000 –cpulimit 5 –save
# vzctl start 112
# vzcpucheck
Current CPU utilization: 105000
Power of the node: 85105
Warnung: hardware node is overcommited

万一你为所有VE设定的其最少保证可用CPU time资源总值大于HW实际的CPU time那么就可能会发生CPU过载的问题当真正发生此情况的时候,115 VE就不能获得其原来保证可获得的3%的CPU time资源由此可能会导致整个虚拟系统出错
当然这只会发生在112 VE完全使用CPU timeHW超负荷的情况下而大部分情况下VE占用CPU的高峰并非同时的根据OpenVZ的动态分配原则CPU time都可以获得比较充分的利用所以仅是Warning而不是Error但为了避免问题建议还是让current CPU utilization等于power of the Node比较好


Bemerkungen

Xen server 挂接本地新硬盘

1、进入XenCenter服务器端的控制台
2、[root@szwj-xenvm01 ~]# fdisk -l 查找新硬盘的设备号(如:/dev/sdb)
3、[root@szwj-xenvm01 ~]# xe sr-create name-label=新硬盘的设备名shared=false device-config-device=/dev/sdb type=lvm (/dev/sdb是新硬盘的设备号)

Bemerkungen

HyperVM安装手记(OpenVZ篇)

首先要说一说OpenVZ的安装
cd /etc/yum.repos.d
wget http://download.openvz.org/openvz.repo
yum install ovzkernel

即可完成安装重启后http://download.lxlabs.com/?software=hypervm选择下载需要的安装脚本

(master的地址为http://download.lxlabs.com/download/hypervm/production/hypervm-install-master.sh),在服务器上

运行sh ./hypervm-install-master.sh –-virtualization-type=openvz
安装过程是会自动完成的安装完HyperVM后init 6重启然后通过浏览器访问http://<server address>:8888就能操作虚拟机了

Bemerkungen

Nach WHMCS zu einer Verzerrung restaurierten

$mysql_charset=utf8″;

Bemerkungen

空间通过SSH导入数据库

空间支持SSH通过SSH可以很容易的导入数据库

1. 将数据库导出为.sql格式的文件不要压缩成.zip或者.tar.gz文件

2. 用FTP上传.sql文件到服务器上

3. 创建数据库如果数据库不存在的话

4. 通过SSH登录服务器

5. 在SSH终端进入.sql文件所在的目录

6. 运行如下的命令
# mysql -u Benutzername -p database_name < file.sql7. 然后,会提示输入数据库的密码,输入密码后就开始导入数据库的过程。在SSH中,使用命令行的方式,只能导入.sql文件

Bemerkungen

mysql Master-Slave-Synchronisation Prinzip

Replication 线程

   Mysql的 Replication 是一个异步的复制过程从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成其中两个线程(Sql线程和IO线程)在 Slave 端另外一个线程(IO线程)在 Master 端

  要实现 MySQL 的 Replication首先必须打开 Master 端的Binary Log(mysql-bin.xxxxxx)功能否则无法实现因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全 顺序的执行日志中所记录的各种操作打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用 “—log-bin” 参数选项或者在 my.cnf 配置文件中的 mysqld 参数组([mysqld]标识后的参数部分)增加 “log-bin” 参数项

  MySQL 复制的基本过程如下

  1. Slave 上面的IO线程连接上 Master并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

   2. Master 接收到来自 Slave 的 IO 线程的请求后通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息返回给 Slave 端的 IO 线程返回信息中除了日志所包含的信息之外还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置;

  3. Slave 的 IO 线程接收到信息后将接收到的日志内容依次写入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端并将读取到的Master端的bin-log的文件名和位置记录到master- info文件中以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容请发给我”

   4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句并在自身执行这些 Query这样实际上就是在 Master 端和 Slave 端执行了同样的 Query所以两端的数据是完全一样的

  实际上在老版本中MySQL 的复制实现在 Slave 端并不是由 SQL 线程和 IO 线程这两个线程共同协作而完成的而是由单独的一个线程来完成所有的工作但是 MySQL 的工程师们很快发现这样做存在很大的风险和性能问题主要如下

   首先如果通过一个单一的线程来独立实现这个工作的话就使复制 Master 端的Binary Log日志以及解析这些日志然后再在自身执行的这个过程成为一个串行的过程性能自然会受到较大的限制这种架构下的 Replication 的延迟自然就比较长了

   其次Slave 端的这个复制线程从 Master 端获取 Binary Log 过来之后需要接着解析这些内容还原成 Master 端所执行的原始 Query然后在自身执行在这个过程中Master端很可能又已经产生了大量的变化并生成了大量的 Binary Log 信息如果在这个阶段 Master 端的存储系统出现了无法修复的故障那么在这个阶段所产生的所有变更都将永远的丢失无法再找回来这种潜在风险在Slave 端压力比较大的时候尤其突出因为如果 Slave 压力比较大解析日志以及应用这些日志所花费的时间自然就会更长一些可能丢失的数据也就会更多

   所以在后期的改造中新版本的 MySQL 为了尽量减小这个风险并提高复制的性能将 Slave 端的复制改为两个线程来完成也就是前面所提到的 SQL 线程和 IO 线程最早提出这个改进方案的是Yahoo!的一位工程师“Jeremy Zawodny”通过这样的改造这样既在很大程度上解决了性能问题缩短了异步的延时时间同时也减少了潜在的数据丢失量

  当然即使是换成了现在这样两个线程来协作处理之后同样也还是存在 Slave 数据延时以及数据丢失的可能性的毕竟这个复制是异步的只要数据的更改不是在一个事务中这些问题都是存在的

  如果要完全避免这些问题就只能用 MySQL 的 Cluster 来解决了不过 MySQL的 Cluster 知道笔者写这部分内容的时候仍然还是一个内存数 据库的解决方案也就是需要将所有数据包括索引全部都 Load 到内存中这样就对内存的要求就非常大的大对于一般的大众化应用来说可实施性并不是太大当然在之前与 MySQL 的 CTO David 交流的时候得知MySQL 现在正在不断改进其 Cluster 的实现其中非常大的一个改动就是允许数据不用全部 Load 到内存中而仅仅只是索引全部 Load 到内存中我想信在完成该项改造之后的 MySQL Cluster 将会更加受人欢迎可实施性也会更大

Bemerkungen

mysql 数学函数不求人

所有的数学函数在一个出错的情况下返回NULL


单目减改变参数的符号
mysql> select – 2;

achten,如果这个操作符与一个BIGINT使用返回值是一个BIGINT!这意味着你应该避免在整数上使用-那可能有值-2^63!
ABS(X)
返回X的绝对值
mysql> select ABS(2);
-> 2
mysql> select ABS(-32);
-> 32

该功能可安全用于BIGINT值

SIGN(X)
返回参数的符号为-1、0或1取决于X是否是负数零或正数
mysql> select SIGN(-32);
-> -1
mysql> select SIGN(0);
-> 0
mysql> select SIGN(234);
-> 1

MOD(N,M)
 
%
(类似C中的%操作符)。返回N被M除的余数
mysql> select MOD(234, 10);
-> 4
mysql> select 253 % 7;
-> 1
mysql> select MOD(29,9);
-> 2

这个函数可安全用于BIGINT值
FLOOR(X)
返回不大于X的最大整数值

mysql> select FLOOR(1.23);
-> 1
mysql> select FLOOR(-1.23);
-> -2

注意返回值被变换为一个BIGINT!
CEILING(X)
返回不小于X的最小整数值
mysql> select CEILING(1.23);
-> 2
mysql> select CEILING(-1.23);
-> -1

注意返回值被变换为一个BIGINT!

ROUND(X)
返回参数X的四舍五入的一个整数
mysql> select ROUND(-1.23);
-> -1
mysql> select ROUND(-1.58);
-> -2
mysql> select ROUND(1.58);
-> 2

注意返回值被变换为一个BIGINT!

ROUND(X,D)
返回参数X的四舍五入的有D为小数的一个数字如果D为0结果将没有小数点或小数部分
mysql> select ROUND(1.298, 1);
-> 1.3
mysql> select ROUND(1.298, 0);
-> 1

注意返回值被变换为一个BIGINT!

EXP(X)
返回值e(自然对数的底)的X次方
mysql> select EXP(2);
-> 7.389056
mysql> select EXP(-2);
-> 0.135335

LOG(X)
返回X的自然对数
mysql> select LOG(2);
-> 0.693147
mysql> select LOG(-2);
-> NULL

如果你想要一个数字X的任意底B的对数使用公式LOG(X)/LOG(B)。

LOG10(X)
返回X的以10为底的对数
mysql> select LOG10(2);
-> 0.301030
mysql> select LOG10(100);
-> 2.000000
mysql> select LOG10(-100);
-> NULL

POW(X,Y)
 
POWER(X,Y)
返回值X的Y次幂
mysql> select POW(2,2);
-> 4.000000
mysql> select POW(2,-2);
-> 0.250000
SQRT(X)
返回非负数X的平方根
mysql> select SQRT(4);
-> 2.000000
mysql> select SQRT(20);
-> 4.472136

PI()
返回PI的值(圆周率)
mysql> select PI();
-> 3.141593

COS(X)
返回X的余弦, 在这里X以弧度给出
mysql> select COS(PI());
-> -1.000000

SIN(X)
返回X的正弦值在此X以弧度给出
mysql> select SIN(PI());
-> 0.000000

TAN(X)
返回X的正切值在此X以弧度给出
mysql> select TAN(PI()+1);
-> 1.557408

ACOS(X)
返回X反余弦即其余弦值是X如果X不在-1到1的范围返回NULL
mysql> select ACOS(1);
-> 0.000000
mysql> select ACOS(1.0001);
-> NULL
mysql> select ACOS(0);
-> 1.570796

ASIN(X)
返回X反正弦值即其正弦值是XL如果X不在-1到1的范围返回NULL
mysql> select ASIN(0.2);
-> 0.201358
mysql> select ASIN(‘foo’);
-> 0.000000

ATAN(X)
返回X的反正切值即其正切值是X
mysql> select ATAN(2);
-> 1.107149
mysql> select ATAN(-2);
-> -1.107149
ATAN2(X,Y)
返回2个变量X和Y的反正切它类似于计算Y/X的反正切除了两个参数的符号被用来决定结果的象限
mysql> select ATAN(-2,2);
-> -0.785398
mysql> select ATAN(PI(),0);
-> 1.570796
COT(X)
返回X的余切
mysql> select COT(12);
-> -1.57267341
mysql> select COT(0);
-> NULL

RAND()
 
RAND(N)
返回在范围0到1.0内的随机浮点值如果一个整数参数N被指定它被用作种子值
mysql> select RAND();
-> 0.5925
mysql> select RAND(20);
-> 0.1811
mysql> select RAND(20);
-> 0.1811
mysql> select RAND();
-> 0.2079
mysql> select RAND();
-> 0.7888

你不能在一个ORDER BY子句用RAND()值使用列因为ORDER BY将重复计算列多次然而在MySQL3.23中你可以做SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c
LEAST(X,Y,…)
有2和2个以上的参数返回最小(最小值)的参数参数使用下列规则进行比较
如果返回值被使用在一个INTEGER上下文或所有的参数都是整数值他们作为整数比较
如果返回值被使用在一个REAL上下文或所有的参数是实数值他们作为实数比较
如果任何参数是一个大小敏感的字符串参数作为大小写敏感的字符串被比较
在其他的情况下参数作为大小写无关的字符串被比较
mysql> select LEAST(2,0);
-> 0
mysql> select LEAST(34.0,3.0,5.0,767.0);
-> 3.0
mysql> select LEAST(“B”,”A”,”C”);
->A

在MySQL 3.22.5以前的版本你可以使用MIN()而不是LEAST

GREATEST(X,Y,…)
返回最大(最大值)的参数参数使用与LEAST一样的规则进行比较
mysql> select GREATEST(2,0);
-> 2
mysql> select GREATEST(34.0,3.0,5.0,767.0);
-> 767.0
mysql> select GREATEST(“B”,”A”,”C”);
->C

在MySQL在 3.22.5 以前的版本, 你能使用MAX()而不是GREATEST.
DEGREES(X)
返回参数X从弧度变换为角度
mysql> select DEGREES(PI());
-> 180.000000
RADIANS(X)
返回参数X从角度变换为弧度
mysql> select RADIANS(90);
-> 1.570796

TRUNCATE(X,D)
返回数字X截断为D位小数如果D为0结果将没有小数点或小数部分
mysql> select TRUNCATE(1.223,1);
-> 1.2
mysql> select TRUNCATE(1.999,1);
-> 1.9
mysql> select TRUNCATE(1.999,0);
-> 1

Bemerkungen

CentOS 5 中OpenSSL和OpenSSH升级

把OpenSSL和OpenSSH升级了CentOS 5.2所带的OpenSSL是0.9.8bOpenSSH是4.0p1升级方法如下:

openssh 最新版本(http://www.openssh.com/portable.html)

wget http://www.openssl.org/source/openssl-0.9.8j.tar.gz

tar zxvf openssl-0.9.8j.tar.gz

cd openssl-0.9.8j

./configprefix=/usr

machen

make test

make install

wget http://openbsd.noc.jgm.gov.ar/pub/OpenBSD/OpenSSH/portable/openssh-5.2p1.tar.gz

tar zxvf openssh-5.2p1.tar.gz

cd openssh-5.2p1

./konfigurieren –prefix=/usrwith-pamwith-zlibsysconfdir=/etc/sshwith-ssl-dir=/usrwith-md5-passwords

machen

make install

Bemerkungen

« Vorherige Einträge Nächste Seite » Nächste Seite »