一、什么是mysql多实例
mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进程。这些服务进程通过不同的socket监听不同的服务端口,来提供各自的服务。
这些mysql实例共用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、数据文件。在提供服务时,mysql多实例在逻辑上看来是各自独立的,各个实例之间根据配置文件的设定值,来取得服务器的相关硬件资源。
二、mysql多实例优劣势
优
1.有效的利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的服务器资源来提供更多的服务。
2.节约服务器资源当公司资金紧张,但是数据库需要各自提供独立服务,而且需要主从同步等技术时,使用多实例就最好了。
劣
1.出现资源互相抢占问题
当某个实例服务并发很高或者有慢查询时,会消耗服务器更多的内存、CPU、磁盘IO等资源,这时就会导致服务器上的其它实例提供访问的质量下降,出现服务器资源互相抢占的现象。
三、mysql多实例应用场景
1.资金紧张型公司的选择
当公司业务访问量不太大,又舍不得花钱,但同时又希望不同业务的数据库服务各自独立,而且需要主从同步进行等技术提供备份或读写分离服务时,使用多实例是最好不过的。
2.并发访问不是特别大的业务
当公司业务访问量不太大,服务器资源基本闲置的比较多,这是就很适合多实例的应用。如果对SQL语句优化的好,多实例是一个很值得使用的技术。即使并发很大,只要合理分配好系统资源,也不会有太大问题。
四、mysql多实例的实现方法
mysql的多实例有两种方式可以实现,两种方式各有利弊。
第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便。
第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理。
五、使用第一种方法实现多实例
安装步骤
(本文已经安装好MySql程序,可以参照http://iywdd.blog.51cto.com/11177578/1768135安装)
上传多实例配置文件(一般工作中都是配置好的,本文的配置在下方附件)
[[email protected] ~]# cd /data/ #进入下载目录 [[email protected] data]# rz #使用rz上传做好的配置文件 [[email protected] data]# unzip mysqlmutil.zip #解压上传的配置文件 Archive: mysqlmutil.zip creating: 3306/ inflating: 3306/my.cnf inflating: 3306/mysql creating: 3307/ inflating: 3307/my.cnf inflating: 3307/mysql [[email protected] data]# tree ./ #查看解压的内容 ./ ├── 3306 │ ├── my.cnf │ └── mysql ├── 3307 │ ├── my.cnf │ └── mysql ├── mysqlmutil.zip
初始化数据库
修改文件属主,防止初始化数据库失败
[[email protected] data]# chown -R mysql.mysql 3306 3307 [[email protected] data]# ll -d 3306 3307 drwxr-xr-x 2 mysql mysql 4096 4月 17 13:39 3306 drwxr-xr-x 2 mysql mysql 4096 4月 17 13:39 3307
初始数据库
MySql安装路径(/application/mysql/)
初始化第一个数据库
[[email protected] data]# /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql/ --datadir=/data/3306/data Installing MySQL system tables... OK #出现OK表示成功 Filling help tables... OK #出现OK表示成功 To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system 省略。。。。。。
初始化第二个数据库
[[email protected] data]# /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql/ --datadir=/data/3307/data Installing MySQL system tables... OK #出现OK表示成功 Filling help tables... OK #出现OK表示成功 To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system
--user=mysql#my.cnf的[mysqld]下"user = mysql"
--basedir=/application/mysql/#表示mysql软件的目录
--datadir=/data/3307/data #表示数据存放的目录
启动测试
更改权限为500,文件牵扯数据库的密码
[[email protected] /]# chmod 500 /data/{3306,3307}/mysql [[email protected] /]# ll /data/{3306,3307}/mysql -r-x------ 1 mysql mysql 1016 4月 7 07:17 /data/3306/mysql -r-x------ 1 mysql mysql 1016 4月 7 07:18 /data/3307/mysql
启动
启动使用mysqld_safe指定配置文件启动
实例一
[[email protected] /]# /data/3306/mysql start Starting MySQL... [[email protected] /]# netstat -lntup|grep mysql|grep -v grep tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 18504/mysqld
实例二
[[email protected] /]# /data/3307/mysql start Starting MySQL... [[email protected] /]# netstat -lntup|grep mysql|grep -v grep tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 19225/mysqld tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 18504/mysqld
关闭使用mysqladmin指定用户关闭
关闭数据库
[[email protected] /]# /data/3307/mysql stop Stoping MySQL... /application/mysql/bin/mysqladmin: connect to server at ‘localhost‘ failed error: ‘Access denied for user ‘root‘@‘localhost‘ (using password: YES)‘
无法关闭,提示mysql账户密码不对
#配置文件my.cnf#############################
mysql_user="root" #用户是root
mysql_pwd="123456" #密码123456
#配置文件my.cnf#############################
配置mysqladmin账户密码
[[email protected] /]# mysqladmin -uroot password ‘123456‘ -S /data/3307/mysql.sock #多实例需要指定sock
停止实例二
[[email protected] /]# /data/3307/mysql stop Stoping MySQL... [[email protected] /]# netstat -lntup|grep mysql|grep -v grep tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 18504/mysqld
重启数据库
[[email protected] /]# /data/3307/mysql start [[email protected] /]# /data/3307/mysql stop
mysql多实例(my.cnf,mysql)的区别
#my.cnf
区别一
端口和数据目录,socket存放路径都不相同
区别二
大致并没有什么什么变换,只是3306变为3307
区别三
这里和上面今本没有什么改变,唯一需要注意的就是“server-id”不能相同
#mysql
至此如果说再添加一个多实例的话,就将3306改为3308,server-id=4就可以添加第三个多实例