MySql多实例介绍与实现


一、什么是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安装)

上传多实例配置文件(一般工作中都是配置好的,本文的配置在下方附件)


[root@oserr ~]# cd /data/   #进入下载目录
[root@oserr data]# rz    #使用rz上传做好的配置文件
[root@oserr 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              
[root@oserr data]# tree ./  #查看解压的内容
./
├── 3306
│   ├── my.cnf
│   └── mysql
├── 3307
│   ├── my.cnf
│   └── mysql
├── mysqlmutil.zip

初始化数据库

修改文件属主,防止初始化数据库失败

[root@oserr data]# chown -R mysql.mysql 3306 3307
[root@oserr 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/)

初始化第一个数据库

[root@oserr 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
省略。。。。。。


初始化第二个数据库

[root@oserr 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,文件牵扯数据库的密码

[root@oserr /]# chmod 500 /data/{3306,3307}/mysql
[root@oserr /]# 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指定配置文件启动

实例一

[root@oserr /]# /data/3306/mysql start
Starting MySQL...
[root@oserr /]# netstat -lntup|grep mysql|grep -v grep
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      18504/mysqld


实例二

[root@oserr /]# /data/3307/mysql start                 
Starting MySQL...
[root@oserr /]# 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指定用户关闭

关闭数据库

[root@oserr /]# /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账户密码

[root@oserr /]# mysqladmin -uroot password '123456' -S /data/3307/mysql.sock #多实例需要指定sock

停止实例二

[root@oserr /]# /data/3307/mysql stop                                                           
Stoping MySQL...
[root@oserr /]# netstat -lntup|grep mysql|grep -v grep                                          
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      18504/mysqld



重启数据库

[root@oserr /]# /data/3307/mysql start
[root@oserr /]# /data/3307/mysql stop


mysql多实例(my.cnf,mysql)的区别

#my.cnf

区别一

MySql多实例介绍与实现_第1张图片

端口和数据目录,socket存放路径都不相同

区别二

wKiom1cg3JCA3vRQAAGC3ejX3Rc847.jpg

大致并没有什么什么变换,只是3306变为3307

区别三

MySql多实例介绍与实现_第2张图片这里和上面今本没有什么改变,唯一需要注意的就是“server-id”不能相同

#mysql

MySql多实例介绍与实现_第3张图片


至此如果说再添加一个多实例的话,就将3306改为3308,server-id=4就可以添加第三个多实例

你可能感兴趣的:(mysql,数据库,服务)