Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2224107
  • 博文数量: 287
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2130
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-31 14:30
个人简介

自己慢慢积累。

文章分类

全部博文(287)

分类: Mysql/postgreSQL

2014-06-11 18:31:26

转自   作者:windychan  发表于:2006-12-08 09:09:06
有删改


根据Mysql管理手册中提到:每个Mysql的服务都可为独立的,所以它都调用一个my.cnf中各自不同的启动选项--就是下文中将提到的GNR值,使用不同的端口,生成各自的套接文件,服务的数据库都是独立的(更多可查阅mysql官方网站的英文管理手册). 


mysqld_multi是管理多个mysqld的服务进程,这些服务进程程序不同的unix socket或是监听于不同的端口。他可以启动、停止和监控当前的服务状态。 


----程序在my.cnf(或是在--config-file自定义的配置文件)中搜索[mysqld#]段,"#"可以是任意的正整数。这个正整数就是在下面提及的段序列,即GNR。段的序号做为mysqld_multi的参数,来区别不同的段,这样你就可以控制特定mysqld进程的启动、停止或得到他的报告信息。这些组里的参数就像启动一个mysqld所需要的组的参数一样。但是,如果使用多服务,必须为每个服务指定一个unix socket或端口(摘自中的使用mysqld_multi程序管理多个MySQL服务 )。 


从上述文字可看到多Mysql服务中最重要的就是my.cnf配置文件了. 
现我贴出我的my.cnf文件.----------------------- 


[mysqld_multi] 
mysqld = /usr/local/mysql/bin/mysqld_safe 
mysqladmin = /usr/local/mysql/bin/mysqladmin 
user = mysql   (用一个帐号来启动所有的mysql服务器,因为是用一相同的帐号。那个么这帐号必须都是每个mysql服务都要用的帐号,最好是管理帐号,下面的口令与相同) 
password = mypaswd 




[mysqld1] 
port      = 3306 
socket    = /tmp/mysql.sock1 
pid-file=/usr/local/mysql/data1/db-app1.pid 
log=/usr/local/mysql/data1/db-app.log 
datadir = /usr/local/mysql/data1 
user = mysql 


[mysqld2] 
port = 3307 
socket = /tmp/mysql.sock2 
pid-file = /usr/local/mysql/data2/db-app2.pid 
datadir = /usr/local/mysql/data2 
log=/usr/local/mysql/data2/db-app.log 
user = mysql 




[mysqld3] 
port            = 3308 
socket          = /tmp/mysql.sock3 
pid-file = /usr/local/mysql/data3/db-app3.pid3 
datadir = /usr/local/mysql/data3 
log=/usr/local/mysql/data3/db-app.log 
user = mysql 


[mysqld4] 
port            = 3309 
socket          = /tmp/mysql.sock4 
pid-file = /usr/local/mysql/data3/db-app4.pid 
datadir = /usr/local/mysql/data4 
log=/usr/local/mysql/data4/db-app.log 
user = mysql 


我的配置文件中有mysqld1,mysqld2,mysqld3,mysqld4。就是说我将启动4个mysql服务在同一服务器的不同端口——3306-3309,每datadir所指定的数据库文件路径都是不相同的,都有各自不同的日志文件。其它一些设置可用my.cnf 原来的内容. 


ok, 重要的my.cnf编好的,现在为配置中不同mysql 服务建立各自文件夹和初始数据库等. 
[mysqld1]是一个默认的,在我们安装mysql时已经有了,所以不用管它. 


[mysqld2]
建数据库,我们可以把默认的mysql数据库复制过来,以利用其它的mysql帐号,其它数据库根据应用再建立. 


db-app:/ # cp /usr/local/mysql/data1/mysql  /usr/local/mysql/data2 -R 
db-app:/ #  chown mysql:mysql /usr/local/mysql/data2 -R 


[mysqld3],[mysqld4], 相同. 




我们可能看看这些目录是否都存在. 
db-app:/ # ls -l /usr/local/mysql/ 


drwxr-xr-x   6 mysql mysql   4096 Apr  9 17:54 data4 
drwxr-x---   2 mysql mysql   4096 Apr  9 17:14 data1 
drwxr-xr-x   3 mysql mysql   4096 Apr  9 17:54 data2 
drwxr-xr-x   3 mysql mysql   4096 Apr  9 17:54 data3 


需要的话,重置数据库:
/usr/local/mysql/scripts/mysql_install_db  --datadir=/home/opaqdata/data3

现在可以通过mysqld_multi启动了。 


三,mysqld_multi命令. 
使用如下参数来启动mysqld_multi: (注:该命令在mysql的bin目录中,根据上面所提到./configure --prefix=/usr/local/mysql ,所以该文件应该在 /usr/local/mysq/bin, 这得根据你安装时所指定的路径 ) 
db-app:/ #  mysqld_multi [options] {start|stop|report} [GNR[,GNR]...] 


start,stop和report是指你想到执行的操作。你可以在单独的服务或是多服务上指定一个操作,区别于选项后面的GNR列表。如果没有指定GNR列表,那么mysqld_multi将在所有的服务中根据选项文件进行操作。 


每一个GNR的值是组的序列号或是一个组的序列号范围。此项的值必须是组名字最后的数字,比如说如果组名为mysqld17,那么此项的值则为17.如果指定一个范围,使用"-"(破折号)来连接二个数字。如GNR的值为10-13,则指组mysqld10到组mysqld13。多个组或是组范围可以在命令行中指定,使用","(逗号)隔开。不能有空白的字符(如空格或tab),在空白字符后面的参数将会被忽略。 (注:GNR值就是我们定义my.cnf中mysqld#中的值,我这里只有1-4). 




db-app:/ # /usr/local/mysql/bin/mysqld_multi --defaults-file=/etc/my.cnf start 1  只启动 第一个mysql服务,相关文件由my.cnf中mysql1设定. 


db-app:/ # /usr/local/mysql/bin/mysqld_multi --defaults-file=/etc/my.cnf stop 1  启止 第一个mysql服务  


db-app:/ # /usr/local/mysql/bin/mysqld_multi    start 1-4, 启动 第1至4mysql服务,其实就是我这里的全部. 


查看启动: 


db-app:/ #  ps aux  


root     10467  0.0  0.2   2712  1300 pts/0    S    18:59   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3306 --socket=/tmp/mysql.sock1 
root     10475  0.0  0.2   2712  1300 pts/0    S    18:59   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3307 --socket=/tmp/mysql.sock2  
root     10482  0.0  0.2   2716  1300 pts/0    S    18:59   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3308 --socket=/tmp/mysql.sock3 
root     10487  0.0  0.2   2716  1300 pts/0    S    18:59   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3309 --socket=/tmp/mysql.sock4 
............................................. 


四,客户端访问 
任何客户端访问都需要指定访问端口.方才能进入指定数据库服务.否则将使用到Mysql默认的端口(3306)所服务的MYSQL。 

阅读(1170) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~