Mysqld_multi在一台服务器上运行多个mysql实例及操作

一、Mysqld_multi在一台物理服务器上运行多个mysql实例

 

Mysql具有一次安装可以运行多个实例的功能,这个功能是通过mysqld_multi实现的。当一台机器上需要运行多个MySQL服务器时,mysqld_multi是管理多个mysqld的服务进程,这些服务进程程序用不同的unix socket或是监听于不同的端口,通过简单的命令,它可以启动,关闭和报告所管理的服务器的状态 。(可以用此在一台机器上做主从复制)。

1.准备

用mysql源程序安装,假设在安装时用的configura选择项如下:

/configure --prefix=/usr/bin/mysql   --datadir=/search/mysql1/data1 --sysconfdir=/etc

 

备注:--prefix将MYSQL安装到/usr/bin/mysql ,

--datadir将数据库生成/search/mysql1/data1,

--sysconfdir是指定mysql使用到的my.cnf配置文件的搜索路径为/etc

 

其他mysql安装过程略。

 

2.配置

安装完成后,就是设置配置文件,是mysql能够运行多个实例。

一下是我们机器上的配置文件my.cnf的配置

 

[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root

[mysqld1]
datadir=/search/mysql1/data1
socket=/var/lib/mysql/mysql.sock1
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
port=3306
skip-name-resolve
server_id=21
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
query_cache_size=134217728
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
#log=/search/mysql1/data1/mysql1.log
pid-file=/search/mysql1/data1/mysql.pid1
log-error=/search/mysql1/data1/log.1
log-slave-updates
slave-skip-errors=ALL


[mysqld2]
datadir=/search/mysql2/data2
socket=/var/lib/mysql/mysql.sock2
user=mysql
old_passwords=1
skip-name-resolve
server_id=2
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
#query_cache_size=134217728
query_cache_type=0
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
port=3307
#log=/search/mysql2/data2/mysql2.log
pid-file=/search/mysql2/data2/mysql.pid2
log-error=/search/mysql2/data2/log.2

 

[mysqld3]
datadir=/search/mysql3/data3
socket=/var/lib/mysql/mysql.sock3
user=mysql
old_passwords=1
port=3308
skip-name-resolve
server_id=3
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
#query_cache_size=134217728
query_cache_type=0
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
#log=/search/mysql3/data3/mysql3.log
pid-file=/search/mysql3/data3/mysql.pid3
log-error=/search/mysql3/data3/log.3

 

[mysqld4]
datadir=/search/mysql3/data4
socket=/var/lib/mysql/mysql.sock4
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
port=3309
skip-name-resolve
server_id=13
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
#query_cache_size=134217728
query_cache_type=0
delay_key_write=ALL
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
#log=/search/mysql3/data4/mysql4.log
pid-file=/search/mysql3/data4/mysql.pid4
log-error=/search/mysql3/data4/log.4

 

根据以上的配置信息,可知我们配置了mysqld1,mysqld2,mysqld3,mysqld4四个mysql实例,每个实例都指定了不同的连接端口(是3306——3309)和数据存储路径(datadir所指定的就是它们各自数据的存储路径)等等一些其他的信息。

 

最重要的配置文件my.cnf弄好了之后,现在为配置中不同mysql 服务建立各自文件夹和初始数据库等。

[mysqld1]是一个默认的,在我们安装mysql时已经有了,所以不用管它。接下来只要配置[mysqld2]、[mysqld3]、[mysqld3]既可以。

下面就已配置[mysqld2]为例:

只要根据配置就的路径为它建立一个目录就可以。将该目录改为mysql管理权,命令如下

  mkdir /search/mysql2/data2   #建立[mysqld2]实例的数据存储目录

 

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

cp -R /search/mysql1/data1/mysql  /usr/local/mysql/data2  #默认的mysql数据库复制过来

 

chown -R mysql:mysql /usr/local/mysql/data2  #该目录改为mysql管理权

 

[mysqld3],[mysqld4]的操作相同,在此省略。

至此我们的配置就结束了,接下来就是要启动我们的mysql服务了。
 

 

3.启动mysql服务

 

使用如下参数来启动mysqld_multi: (注:该命令在mysql的bin目录中,根据上面所提到./configure --prefix=/usr/bin/mysql ,所以该文件应该在 /usr/bin/mysql/bin,这得根据你安装时所指定的路径 ) 。

 

mysqld_multi [options] [GNR[,GNR]...]

 

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

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

 

 mysqld_multi --config-file=/etc/my.cnf start 1   #只启动第一个mysql服务,相关文件由my.cnf中mysql1设定

 mysqld_multi --config-file=/etc/my.cnf stop 1   #停止第一个mysql服务,相关文件由my.cnf中mysql1设定

 mysqld_multi   --config-file=/etc/my.cnf start 1-4    #启动 第1至4mysql服务,其实就是我这里的全部。

 

注意:直接用 service mysqld start 命令去启动会报错。【个人觉得这个命令是用来启动只安装了单个实例的服务器的】

 

4、客户端访问

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

 

4.1 如果是在本地机器上连接mysql服务器

 mysql -S/var/lib/mysql/mysql.sock1   #连接的是[mysql1]实例上

 如果使用 mysql -p3306 命令去连接[mysql1]实例,则会报错“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) ”【个人觉得出现这个错误是,默认会去找mysql.sock这个文件,而因为此物理机器上运行的是多个实例,所以这个文件不存在】

 

4.2如果是在远程机器上去连接此mysql服务器(当然此远程机器需要有连接的权限)

mysql -umysql -p -h10.10.2.23   #这里假设用户名是mysql,服务器iP是10.10.2.23,则连接的是[mysql1]实例,因为没有指定端口。

 

 

 

posted @ 2011-06-24 17:24  hibernate3例子  阅读(322)  评论(0编辑  收藏  举报