Monthly Archives: December 2008

mysqld_multi—-管理多实例数据库

mysqld_multi是用来管理在同一台机器上监听着不同的端口和不同的socket连接的多个mysqld进程。它可以用来启动或者停止这些服务,也可以报告他们当前的状态。

要使用这个服务,我们首先得建立一个多实例对象的配置文件,格式如下:

[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root
[mysqld1]
socket = /tmp/mysql.sock1
port = 3307
pid-file = /var/lib/mysql1/hostname.pid1
datadir = /var/lib/mysql1
log = /var/lib/mysql1/log-file.log
log-error = /var/lib/mysql1/log-error.err
[mysqld2]
socket = /tmp/mysql.sock2
port = 3308
pid-file = /var/lib/mysql2/hostname.pid2
datadir = /var/lib/mysql2
log = /var/lib/mysql2/log-file.log
log-error = /var/lib/mysql2/log-error.err

跟普通的配置文件相比,这里首先多了一个[mysqld_multi]的配置
这个里面要配置的参数一般就是四个参数
mysqld与mysqladmin,填写你的mysqld_safe与mysqladmin的全路径就可以了。
user与password,管理帐号的用户名写密码,也就是说你需要在所有的实例中设置一个相同的用户名(密码也要相同)。

然后就是[mysqldN],N可以是任意整数,但是不能重复,代表的是实例ID(官方叫GNR)
这里面的参数就跟普通配置文件[mysqld]一样了。
我不多说了。

启动与停止指定的实例

mysqld_multi --config-file=/etc/my_multi.cnf start 1,2
mysqld_multi stop 1,2

这里的1,2就是我们前面写的N(GNR)
一般在启动的时候,我们需要指定配置文件,停止的时候不要

报告实例的状态:

mysql_multi report 1,2

如何Linux下修改系统时间

首先,可以直接利用date命令来显示当前的系统时间

# date
Mon Dec 22 22:35:58 IST 2008

如果你想把系统时间改为2008年圣诞节的下午一点四十五的话,你可以利用下面的命令:

# date -s “25 DEC 2008 13:45:00″
Thu Dec 25 13:45:02 IST 2008

尽量上面这个命令的格式已经很形象了,我这里还是做一下说明。最前面的当然就是date命令了,后面跟着的“-s”选项,表示你要修改时间。最后面跟的就是你要设置的时间 了,时间必须参照这个格式 “日 月 年 小时:分钟:秒 ”。回车之后,系统时间就会被修改了。你可以再次输入date命令检查一下。

还有许多方法可以达到这个目的,你可以参考一下date命令的man page。比如下面这个命令,可以把系统日期调整到2008年12月25日:

#date +%Y%m%d -s “20081225″

我们还可以实时地从NTP(Netwokr Time Protocol,网络时间协议)服务器上同步我们的系统时间。大多数的linux系统都可以运行NTPd这个守护进程,我们只要正确的配置好NTPd,就可以通过网络(LAN鴶Internet)在时间服务器上同步我们的时间。这种方式在生产机器上用得非常广泛。

通常来说,现在的Linux系统默认都安装了NTP。如果没有的话,我们可以用下面的方式来安装:
Ubuntu用户

# sudo apt-get install ntpdate

Fedora用户

# yum install ntp

安装好NTP之后,我们要配置一下这个文件
/etc/ntp.conf
找这个文件中含有Server参数的一行,将其改为:

server pool.ntp.org

在中国也可以用下面几行代替

server 1.cn.pool.ntp.org
   server 0.asia.pool.ntp.org
   server 2.asia.pool.ntp.org

保存文件,然后重启NTP服务

# /etc/init.d/ntpd restart

当然,也可以用下面的命令手动进行时间同步:

# ntpdate pool.ntp.org
22 Dec 23:07:00 ntpdate[24328]: step time server 123.108.39.80 offset 172868.246157 sec

如果你要将系统时间保存到硬件上面,使其重启时仍然有然,可以使用下列命令:

# hwclock --systohc

如果你使用的是linux与windows双系统的时候出现了时间差的问题(windows时间与linux时间不一致),可以看我以前写过的一篇文章:
ubuntu系统时间设置问题

参考:http://www.simplehelp.net/2008/12/23/setting-the-date-on-your-linux-machine

使用SSH证书(不要密码)登陆远程服务器

参考:http://www.simplehelp.net/2008/12/17/how-to-ssh-to-your-remote-server-without-entering-a-password-every-time/

由于工作关系,我经常需要在非常不同的Linux服务器上转上转去,原来每次登陆,系统都会提示你输入密码,这的确是一件很烦的事情,特别是你在需要对好几台机器工作的时候。后来,我学会了用SSH证书认证来取代普通的密码认证,这样子我就不用每次都输入密码了。OpenSSH允许远程执行命令,如果再加上证书使用,那就我就可以运行一些远程控制的脚本去控制许多许多机器,这个对我的工作非常有用。比如说,在需要在100台机器上添加许多相同的用户。。。

闲话少说,下面我们正式来创建证书:
首先,我们要给远程服务器创建一个公钥(public key)。在你的Linux系统上打开一个命令终端,运行如下命令:

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/calvin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/calvin/.ssh/id_rsa.
Your public key has been saved in /home/calvin/.ssh/id_rsa.pub.

在这一步里,系统将自动生成一个公钥(public key)并保存在/home/calvin/.ssh/id_rsa/.pub这个文件里面。在上面的命令执行过程中,我们只需要一直敲回车直接使用默认值就好了(如果你想具体了解,可以去看man page,也可以私下跟我讨论)。

接下来,我们要将这个公钥(public key)复制到远程机器上面去,以前这是一个比较麻烦的事,但是,现在我们只要一个命令就可以搞定:

# ssh-copy-id -i /home/calvin/.ssh/id_rsa.pub username@@remoteserver.com

用自己实际的用户名与服务器地址取代username和remoteserver.com(下同)。
在这里,你可以再试下ssh到远程服务器,应该是不会再提示要密码而直接登陆进去了。

当然,如果你的机器没有ssh-copy-id这个命令,我们也可以使用传统的方法:

# scp ~/.ssh/id_rsa.pub username@remoteserver.com:/home/username

然后,登陆到远程机器上进行下一步的操作:

# ssh username@remoteserver.com
# cat ~/id_rsa.pub >> ~/.ssh/authorized_keys2

接下来,我们要给~/.ssh/authorized_keys2 correctly这个文件设置正确的权限(权限不对,证书会被拒绝)

# chmod 644 ~/.ssh/authorized_keys2

关于Mysql主从数据库的设置[转]

来源:http://caiying0504.javaeye.com/blog/176432

一般使用MySQL的时候,如果数据量不大,我们都使用一台MySQL服务器,备份的时候使用mysqldump工具就可以了,但是随着业务不断发展,问题出现了:
首先:数据量往往直线上升,单独一台数据库服务器开始出现性能的瓶颈,数据访问越来越慢。
其次:备份也变得困难了,因为mysqldump是导出一份文本文件,而数据量特别大的时候,这样的备份往往需要很长时间,可能有人会说,我们可以直接通过拷贝数据文件来备份数据库,这样很方便,快捷,不错,这样是比mysqldump方便快捷,但是,直接拷贝数据文件备份的方式要求我们必须先关闭mysql服务,然后再拷贝数据文件,否则,你拷贝的文件很可能是坏的。而实际运行的mysql服务往往要求在任何时候都不可以停止服务,所以这样的备份方式在此情况下不可行。
如果你遇到了类似上面的问题,你就可以使用建立MySQL主从服务器的方式来解决,下面先来看看主从服务器的设置:
前提:MySQL主从服务器最好使用相同的软件版本,以避免不不可预期的故障。

Read More »

Linux系统下实现SCSI硬盘在线识别[转]

  在向服务器添加SCSI硬盘时,可以在服务器不停机的情况下,让系统识别出新插入的硬盘,具体步骤如下:
  第一步:将新硬盘插到机器上;
  第二步:以root用户运行命令:
  

echo "scsi add-single-device x y z u" > /proc/scsi/scsi

  其中:
  x是硬盘所在SCSI控制器号(一般机器就一个SCSI控制器,所以就是0);
  y是硬盘所在SCSI通道的编号(一般单通道的就是0,多通道的要看是哪个通道了);
  z是硬盘的SCSI ID号(可以通过具体插入的硬盘插槽来判断);
  u是硬盘的lun号(默认情况都是0)
  由于我是插入第三块硬盘,所以我运行的命令是:
  

echo "scsi add-single-device 0 0 2 0" > /proc/scsi/scsi

  如果x y z参数不正确,系统是不能识别添加的硬盘的,可以通过查看/proc/scsi/scsi文件的内容来判断是否添加成功。添加好之后,这个文件中会多出一个设备。这个文件中包含系统识别到的所有SCSI设备的详细信息,包括厂商、型号、介质访问类型等。

  如果要移除硬盘,那么可以这样操作:
  第一步:以root用户运行命令:
  

echo "scsi remove-single-device x y z u" > /proc/scsi/scsi

  x y z u的定义同上
  第二步:物理上断开硬盘的连接。

Thinkpad的小红帽(trackpoint)在Ubuntu810中的配置

来源:http://www.thinkwiki.org/wiki/How_to_configure_the_TrackPoint#TrackPoint_under_Ubuntu_8.10_using_HAL
今天把系统从804升级到了810,发现原来的小红帽不能正常使用,按照原来配置804的办法已经不行了,一查资料,原来在ubuntu810中对一些硬件的支持已经完全由HAL来做了,鼠标就是其中之一。

解决办法如下:

以root身份用下面的内容创建这个文件:/etc/hal/fdi/policy/mouse-wheel.fdi

<match key="info.product" string="TPPS/2 IBM TrackPoint">
<merge key="input.x11_options.EmulateWheel" type="string">true</merge>
<merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
<merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
<merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
<merge key="input.x11_options.EmulateWheelTimeout" type="string">200</merge>
</match>

之后保存重启(估计重启hal服务应该也可以生效,不过,我没试过)

效果很棒,原来我的配置还不能支持左右拖,现在也可以完美支持了。