MySQL多实例配置

发表于:2016-12-13 15:47:51,已有2354次阅读

使用一独立的服务器运行一个MySQL实列,住住会发现,MySQL服务器的硬件利用率很低;因此有时候会考虑在一台独立的服务器上,运行多个MySQL实例,以不同的端口号运行,实现服务器利用的最大化;下面就个人在实际开发中,配置多MySQL实例的的过程做一个简单的讲解(本人开发环境 为CentOS 6.4)。


第一步,使用yum包管理工具安装mysql server:

sudo yum install mysql-server mysql-client


第二步,创建两个mysql实例的数据存放目录,并赋给对应的mysql用户:

sudo mkdir /var/lib/mysql1
sudo mkdir /var/lib/mysql2
sudo chown mysql:mysql /var/lib/mysql1
sudo chown mysql:mysql /var/lib/mysql2

第三步修改默认的mysql配置文件my.cnf,位于/etc/my.cnf或~/my.cnf:

默认的/etc/my.cnf如下:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
修正为:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
port=3306
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
pid-file=/var/run/mysqld/mysqld.pid
log-error=/var/log/mysqld.log

[mysqld1]
datadir=/var/lib/mysql1
socket=/var/lib/mysql/mysql1.sock
user=mysql
port=3307
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld1.log
pid-file=/var/run/mysqld/mysqld1.pid

[mysqld2]
datadir=/var/lib/mysql2
socket=/var/lib/mysql/mysql2.sockmysqld_multi
user=mysql
port=3308
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld2.log
pid-file=/var/run/mysqld/mysqld2.pid

# [mysqld_safe]
# log-error=/var/log/mysqld.log
# pid-file=/var/run/mysqld/mysqld.pid

这里主要是添加了两个组,mysqld1与mysqld2,并分别按照默认的mysqld组构建指定了对应的运行端口号,进程目录和数据存放目录,如此这般设置是为了方使下面使用mysqld_multi工具来统一管理mysql的多实例。


第四步,初始化对应mysqld1与mysqld2组对应的mysql实例的数据库文件,如下运行:

sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql1
sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql2
mysql_install_db工具随mysql-server而安装,默认存放在/usr/bin/目录下。


运行结果如下:


第五步,配置使用mysqld_multi工具来统计管理启动mysql实例:

sudo vim /etc/my.cnf
添加mysqld_multi组分的配置:
[mysqld_multi]
mysqld=/usr/bin/mysqld_safe    # 管理mysqld进程的启动
mysqladmin=/usr/bin/mysqladmin # 管理mysqld进程的关闭和设置
user=root             # 登录用于关闭数据库,数据库用户
password=123456       # 登录用于关闭数据库,两台数据库密码设置一样


第六步,使用mysqld_multi工具启动mysqld1与mysqld2实例:

sudo mysqld_multi start
启动3307与3308这两个端口的实例,通过如下命令进行检查
sudo mysqld_multi report
sudo netstat -antp |grep mysql


第七步,由于前面使用的mysql_install_db工具初始化的mysqld1与mysqld2的root密码为空,故与现在my.cnf mysqld_multi组中的密码不一致,因此需要修改他们两的密码,不然mysqld_multi不能统一停止mysqld进程:

sudo mysqladmin -S /var/lib/mysql/mysql1.sock -uroot -p password '123456'
sudo mysqladmin -S /var/lib/mysql/mysql2.sock -uroot -p password '123456'
接着,重启一下这两个实例:

sudo mysqladmin -S /var/lib/mysql/mysql1.sock -uroot -p123456 shutdown
sudo mysqladmin -S /var/lib/mysql/mysql2.sock -uroot -p123465 shutdown
sudo mysqld_multi start
接下来再试下sudo mysqld_multi stop可以统一停止这两个实例。

对应命令还有sudo mysqld_multi reload。详情可以参考mysql官方文档:http://dev.mysql.com/doc/refman/5.7/en/mysqld-multi.html


注:如果不想用mysqld_multi工具,可以单独配置多个实例配置文件,自己启动或关闭,如下:

sudo mysqld_safe mysqld_safe --defaults-file=/etc/my2.cnf &
sudo mysqladmin -uroot -p123456 -S/var/lib/mysql/mysql2.sock shutdown

详情,参见:http://sharadchhetri.com/2013/12/02/create-multiple-mysql-instance-centos-6-4-red-hat-6-4/


最后,使用mysqld命连接运行SQL命令:

mysql -h127.0.0.1 -P3307 -uroot -p
mysql -h127.0.0.1 -P3308 -uroot -p

注意这里h与P选项要成队出现才有效,省略h单独P设置端口不行。

如上配置后,就是实现了一台物理机运行运行两个实例的功能,实际上,我们还可以执行service mysqld start来运行系统默认安装的3306端口的mysql实例,因为在我们之前mysqld组的配置并没有改变,只是他的命令不是[mysqldN]的形式,不受mysqld_multi工具的管理。


参考:

http://lizhenliang.blog.51cto.com/7876557/1636016

http://nolinux.blog.51cto.com/4824967/1441490

https://www.percona.com/blog/2014/08/26/mysqld_multi-how-to-run-multiple-instances-of-mysql/

评论

暂无评论

您还可输入120个字