1、什么是MySQL多实例
随着目前大部分服务器资源充盈,我们当然也要勤俭持家了,所以MySQL多实例就是可以将多个MySQL服务运行在一台机器上(不限于版本),当然了这也跟合租一样,如果有一个服务有小脾气那整个服务器上的服务可能都要闹小脾气了,哈哈。
2、配置MySQL多实例先决条件
在配置MySQL多实例之前我希望已经理解了MySQL单实例的部署形式,因为这里不会教你怎么部署MySQL。
统计信息如下:
- MySQL的版本类型,以及BASEDIR;
- 统计数据库的DATADIR;
- 统计服务端口;
有了上面的条件你就完全可以搞事情了,哈哈
3、多实例的隔离
多实例我们需要隔离的内容有:端口、DATADIR;当然在个别情况下你是可以隔离BASEDIR的。
4、实战MySQL多实例
第一步首先找一个当前最高版本的MySQL(你运行中的),获取里面的mysqld_multi.server
这个就在MySQL的安装包里面的support-files目录下。
为什么找一个当前运行的最新版本呢?因为兼容性更好
第二步,我们就需要配置我们的服务了
示例配置文件如下:
# This is an example of a my.cnf file for mysqld_multi.
# Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/data2/hostname.pid2
datadir = /usr/local/mysql/data2
language = /usr/local/mysql/share/mysql/english
user = unix_user1
[mysqld3]
mysqld = /path/to/mysqld_safe
ledir = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/data3/hostname.pid3
datadir = /usr/local/mysql/data3
language = /usr/local/mysql/share/mysql/swedish
user = unix_user2
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/data4/hostname.pid4
datadir = /usr/local/mysql/data4
language = /usr/local/mysql/share/mysql/estonia
user = unix_user3
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/data6/hostname.pid6
datadir = /usr/local/mysql/data6
language = /usr/local/mysql/share/mysql/japanese
user = unix_user4
大家根据自己配置加上即可了,多实例的原理呢也非常简单,通过参数运行mysqld_safe启动服务,通过mysqladmin发送shutdown来关闭服务器,所以呢这里需要提供一个具有shutdown权限的MySQL用户
授权指令如下:
GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'password'
查看支持的数据组
/etc/init.d/mysqld_multi report
mysqld_multi 是一个可以通过chkconfig管理的服务。
启动服务的形式如下:
/etc/init.d/mysqld_multi start ID
/etc/init.d/mysqld_multi start
后者是全部启动,前者指定配置文件里面的ID启动服务,mysqld3306 这里3306就是实力ID。
停止服务也是如此,不过停止服务可能会有问题,我的MySQL5.7就不可以使用,原因是里面的组件my_print_defaults在解析密码时隐藏了,所以这里我们简单修改一下启动脚本。
旧代码:
my $com= join ' ', 'my_print_defaults', @defaults_options, $group;
新代码:
my $com= join ' ', 'my_print_defaults -s', @defaults_options, $group;
my_print_defaults -s 的作用是明文显示密码,这样就可以了。
5、小结
多实例在同一台服务器上,有一台出现问题其他的也会有影响,另外密码存放在配置文件中不安全,可以在关闭时手工指定密码,或者给配置文件600的权限。