Mysql多实例配置详解
Mysqld_multi介绍
根据Mysql管理手册中提到:每个Mysql的服务都可为独立的,所以它都调用一个my.cnf中各自不同的启动选项--就是下文中将提到的GNR值,使用不同的端口,生成各自的套接文件,服务的数据库都是独立的.
mysqld_multi是管理多个mysqld的服务进程,这些服务进程程序不同的unix socket或是监听于不同的端口。他可以启动、停止和监控当前的服务状态。
程序在my.cnf(或是在--config-file自定义的配置文件)中搜索[mysqld#]段,"#"可以是任意的正整数。这个正整数就是在下面提及的段序列,即GNR。段的序号做为mysqld_multi的参数,来区别不同的段,这样你就可以控制特定mysqld进程的启动、停止或得到他的报告信息。这些组里的参数就像启动一个mysqld所需要的组的参数一样。但是,如果使用多服务,必须为每个服务指定一个unix socket或端口
Mysqld_multi配置示例
修改数据库配置文件my.cnf:
[mysqld_multi]
mysqld =
/usr/local/mysql/bin/mysqld_safe # 按照你的实际情况来制定路径
mysqladmin =
/usr/local/mysql/bin/mysqladmin
user =
multi_admin #
这个用户不一定非要用mysql ,只要这个用户能启动和关闭mysql就够了
password = multipass
log = /usr/local/mysql/log/multi.log
[mysqld1] #
第一个mysql进程
port = 3306 # 指定端口为3306
socket =
/tmp/mysql3306.sock #
指定mysql1 的sock
pid-file =
/tmp/mysql3306.pid #
指定mysql1的pid文件
datadir =
/mnt/mysql/var1 #
为其单独指定数据存放路径
general_log =
1
general_log_file =
/mnt/mysql/mysql3306.log # 单独指定log文件
skip-name-resolve
character-set-server = utf8
back_log = 50
max_connections = 2
max_connect_errors = 32
max_allowed_packet = 16M
table_cache = 2048
binlog_cache_size = 1M
max_heap_table_size = 64M
tmp_table_size = 64M
.......
[mysqld2] #
第二个mysql进程
port =
3307 #
指定端口为3307
socket =
/tmp/mysql3307.sock #
指定mysql2 的sock
pid-file =
/tmp/mysql3307.pid # 指定mysql1的pid文件
datadir =
/mnt/mysql/var2 #
为其单独指定数据存放路径
general_log = 1
general_log_file =
/mnt/mysql/mysql3307.log #
单独指定log文件
server-id = 2
skip-name-resolve
character-set-server = utf8
back_log = 50
max_connections = 2
max_connect_errors = 32
max_allowed_packet = 16M
table_cache =
2048
binlog_cache_size = 1M
max_heap_table_size = 64M
tmp_table_size = 64M
.......
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[myisamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192
shell> /usr/local/mysql/bin/mysql_install_db
--datadir=/mnt/mysql/var1 --user=mysql
shell> /usr/local/mysql/bin/mysql_install_db
--datadir=/mnt/mysql/var2 --user=mysql
创建mysqld_multi用户
创建用于关闭数据的账号,所以只需要shutdown权限。此账号需在my.cnf里面配置(见my.cnf配置)
shell> GRANT SHUTDOWN ON *.* TO
'multi_admin'@'localhost' IDENTIFIED BY
'multipass';
Mysqld_multi启动、关闭、状态检查
要想调用mysqld_multi,使用下面的语法:
shell> mysqld_multi [options]
{start|stop|report} [GNR[,GNR] ...]
start、stop和report表示你想要执行的操作。你可以在单个服务器或多个服务器上执行指定的操作,取决于选项名后面的GNR 列。如果没有该列,mysqld_multi为选项文件中的所有服务器执行该操作。
每个GNR值代表一个选项组号或组号范围。GNR值应为选项文件中组名末尾的号。例如,组[mysqld17]的GNR为17。要想指定组号的范围,用破折号间隔开第1个和最后1个号。GNR值10-13代表组[mysqld10]到[mysqld13]。可以在命令行中指定多个组或组范围,用逗号间隔开。GNR列不能有空格字符(空格或tab);空格字符后面的内容将被忽略掉。
该命令使用选项组[mysqld1]启动单个服务器:
shell> /usr/local/mysql/bin/mysqld_multi
--defaults-extra-file=/etc/my.cnf start 1
该命令停止多个服务器,使用选项组[mysql8]和[mysqld10]至[mysqld13]:
shell>/usr/local/mysql/bin/mysqld_multi
--defaults-extra-file=/etc/my.cnf stop 8,10-13
或者一下形式关闭单个服务器
shell> mysqladmin -u root -S
/tmp/mysql3306.sock shutdown
该命令查看多个服务器,使用选项组[mysql8]和[mysqld10]至[mysqld13]:
shell>/usr/local/mysql/bin/mysqld_multi
--defaults-extra-file=/etc/my.cnf report 8,10-13
Mysql客户端访问
说明:
任何客户端访问都需要指定访问端口。方才能进入指定数据库服务.否则将使用到Mysql默认的端口(3306)所服务的MYSQL,如:
shell>mysql -uroot -p --protocol=tcp
--port=3306 -h127.0.0.1
shell>mysql -uroot -p --protocol=tcp
--port=3307 -h127.0.0.1