- 在一些情况下,我们会在一台服务器上安装多个MySQL,同时对外提供应用服务。这样我们可以更加充分利用现有的资源,控制企业成本。比如,一台SUN T5120机器,8核64个线程,这么充足的资源事实上MySQL并不能充分利用,我们都知道Oracle对多线程的利用要远远高于MySQL(这里我们多少也可以理解一点为什么oracle和sun结合了),尽管在5.4以后MySQL对线程的利用上有了很大改善,将线程的最优利用数从以前的4到8提升到了现在的16个。如果你就安装一个MySQL,那么多数资源就白白浪费了,同时也不能达到理想的状态,那么,我们完全可以在上面同时安装多个MySQL让它为不同的应用提供服务,同一台服务器上管理起来也相对比较方便些。下面我们就来看看如何实现,这里我只介绍两台的安装,再多也是一样的方法。
- 实验环境:一台普通PC,CentOS 5.2,mysql-5.1.32-linux-i686-glibc23.tar.gz
- 实验说明:MySQL 采用二进制包安装。我们将在Linux系统下安装两个MySQL数据库,这里指的是MySQL这个数据库软件本身,而不是它里面的应用数据库,我们很多时候见到的都是一个MySQL下面创建了多个数据库,也就是show databases的时候你看到的,我们要注意这些差别。
- 具体操作:
- 安装MySQL。
- MySQL1
- # groupadd mysql
- # useradd -g mysql mysql
- # tar -xzf /opt/software/mysql-5.1.32-linux-i686-glibc23.tar.gz -C /opt
- # mv mysql-5.1.32-linux-i686-glibc23 mysql1
- # cd /opt/mysql1
- # ./scripts/mysql_install_db –user=mysql
- # chown -R root.mysql .
- # chown -R mysql.mysql data
- MySQL2
- # groupadd mysql
- # useradd -g mysql mysql
- # tar -xzf /opt/software/mysql-5.1.32-linux-i686-glibc23.tar.gz -C /opt
- # mv mysql-5.1.32-linux-i686-glibc23 mysql2
- # cd /opt/mysql2
- # ./scripts/mysql_install_db –user=mysql
- # chown -R root.mysql .
- # chown -R mysql.mysql data
- 两个MySQL数据库已经安装完成,进入data目录下你会看到MySQL已经好默认安装好了3个数据库。接下来我们要做的是启动数据库前的一些准备工作,既然我要在同一台服务器上安装两个MySQL,那么如何区分它们是不同的个体呢,这就需要我们作进一步细化,不同的MYSQL_HOME,不同的 PORT,不同的SOCKET,我们通过这些关键值来对它们进行区别。
- MySQL1:
- # cp /opt/mysql1/support-files/my-medium.cnf /opt/mysql1/my.cnf
- # vi /opt/mysql1/my.cnf
- [client]
- port = 3306
- socket = /opt/mysql1/data/mysql.sock
- [mysqld]
- port = 3306
- socket = /opt/mysql1/data/mysql.sock
- MySQL2:
- # cp /opt/mysql2/support-files/my-medium.cnf /opt/mysql2/my.cnf
- # vi /opt/mysql2/my.cnf
- [client]
- port = 3307
- socket = /opt/mysql2/data/mysql.sock
- [mysqld]
- port = 3307
- socket = /opt/mysql2/data/mysql.sock
- 准备就绪,开始启动。
- MySQL1:
- # export MYSQL_HOME=/opt/mysql1
- # ./bin/mysqld_safe –defaults-file=/opt/mysql1/my.cnf &
- MySQL2:
- # export MYSQL_HOME=/opt/mysql2
- # ./bin/mysqld_safe –defaults-file=/opt/mysql2/my.cnf &
- 检查是否正常,程序是否已经运行,端口是否打开。
- # ps -ef |grep mysql
- # netstat -an | grep ‘3306 | 3307′
- 连接数据库。
- [root@node1 mysql1]# ./bin/mysql –protocol=tcp -P3306 -uroot -e ’show databases’
- +——————–+
- | Database |
- +——————–+
- | information_schema |
- | a |
- | mysql |
- | test |
- +——————–+
- [root@node1 mysql2]# ./bin/mysql –protocol=tcp -P3307 -uroot -e ’show databases’
- +——————–+
- | Database |
- +——————–+
- | information_schema |
- | mysql |
- | test |
- +——————–+
- Note: 使用mysql工具连接数据库,不特别指定protocol选项的话,默认是socket方式连接,这也就是通常我们连接的时候会为什么有时会遇到 mysql.sock找不到,客户端会去服务器找到相应的socket文件,其实,我们可以指定–protocol=tcp来避免这样的连接问题。 protocol选项有4种方式:socket、tcp、pipe和memory,我在MySQL安全中也提到过,如果通过unix socket连接这样可以减少安全问题。
- 一个MySQL下面可以创建多个不同应用的数据库,我们只要开启MySQL数据库服务,那么我们通过use database_name便可以很方便的操作各个数据库。