原 MySQL多实例配置
使用一独立的服务器运行一个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/mysql2mysql_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/
暂无评论