您的位置:首页 > 数据库 > MySQL

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

2011-09-27 11:23 731 查看
一、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

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服务,其实就是我这里的全部。

注意:5.6 版本已下的用" --defaults-extra-file=/etc/my.cnf "

注意:直接用 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]实例,因为没有指定端口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: