3. 配置参数文件
经过上面两次编译并创建系统数据库,安装、搭建了两个MySQL实例,接下来分别为其配置参数文件。
――查看参数文件缺省位置
# /usr/local/mysqla/bin/mysql --help|grep '/my.cnf'
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysqla/my.cnf ~/.my.cnf
# /usr/local/mysqlb/bin/mysql --help|grep '/my.cnf'
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysqlb/my.cnf ~/.my.cnf
从中可以看出,两个MySQL实例的4个缺省参数文件中有3个是相同的,所以不能采用,否则就无法区分了;当然,多个实例间相同的参数部分可如此配置,只不过不便于管理。
为了使每个MySQL实例拥有一个独立的参数文件,只能采用第3个缺省参数文件,即将参数文件存放到各实例自己的安装目录下(basedir)。另外,还需保证不存在第4个参数文件,因为它的优先级别较高,若存在则会覆盖前面的参数文件设置。
关于参数文件的详细配置此处不做说明了,假设已为两个MySQL实例配置好了各自的参数文件,并分别存放在各自的安装目录下,即/usr/local/mysqla|mysqlb目录下。
4. 启动实例
启动MySQL实例,需要为datadir目录设置正确的权限,否则实例启动失败;这一步缺省应该已经设置,检查一下,若未设置,则通过如下命令设置。
# chown -R mysql.mysql mysql/
――启动两个MySQL实例
# /usr/local/mysqla/bin/mysqld_safe --user=mysql &
# /usr/local/mysqlb/bin/mysqld_safe --user=mysql &
――查看进程
# ps -ef|grep mysql
root 1694 26876 0 13:04 pts/2 00:00:00 more/usr/local/mysqla/support-files/mysql.server
root 2270 13474 0 13:13 pts/1 00:00:00 /bin/sh/usr/local/mysqla/bin/mysqld_safe --user=mysql
mysql 2805 2270 113:13 pts/1 00:00:00 /usr/local/mysqla/bin/mysqld--basedir=/usr/local/mysqla --datadir=/data/lib/mysqla--plugin-dir=/usr/local/mysqla/lib/plugin --user=mysql--log-error=/data/lib/mysqla/mysql.err --pid-file=/data/lib/mysqla/mysql.pid--socket=/data/lib/mysqla/mysql.sock --port=3306
root 2828 13474 0 13:13 pts/1 00:00:00 /bin/sh/usr/local/mysqlb/bin/mysqld_safe --user=mysql
mysql 3361 2828 25 13:13 pts/1 00:00:00 /usr/local/mysqlb/bin/mysqld--basedir=/usr/local/mysqlb --datadir=/data/lib/mysqlb --plugin-dir=/usr/local/mysqlb/lib/plugin--user=mysql --log-error=/data/lib/mysqlb/mysql.err--pid-file=/data/lib/mysqlb/mysql.pid --socket=/data/lib/mysqlb/mysql.sock--port=3307
root 3381 13474 0 13:13 pts/1 00:00:00 grep mysql
可以看出,成功启动了两个MySQL实例(进程)
――若要关闭服务,可执行如下命令
# /usr/local/mysqla/bin/mysqladmin shutdown
# /usr/local/mysqlb/bin/mysqladmin shutdown
5. 修改为服务管理方式
为了方便管理,将其修改为服务管理方式,如下:
――拷贝服务文件
# cp /usr/local/mysqla/support-files/mysql.server/etc/rc.d/init.d/mysqla
# cp /usr/local/mysqlb/support-files/mysql.server/etc/rc.d/init.d/mysqlb
――添加服务
# chkconfig --add mysqla
# chkconfig --list mysqla
mysqla 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# chkconfig --add mysqlb
# chkconfig --list mysqlb
mysqlb 0:off 1:off 2:on 3:on 4:on 5:on 6:off
――启动服务
# service mysqla start
Starting MySQL.. [ OK ]
[root@db ~]# service mysqlb start
Starting MySQL.. [ OK ]
至此,我们通过源码包成功搭建了两个MySQL实例,它们拥有独立的端口、参数文件及数据库。
二. 采用二进制包安装MySQL实现多实例
二进制包其实就是已经过编译的源码包,不能再通过定制参数文件缺省路径的方法来隔离各个实例的参数文件了;但有一点需要说明的是:第3个参数文件的缺省路径指的是basedir(安装目录),可通过它来隔离各实例的参数文件,因此一台服务器也就可搭建多个MySQL实例了。
同样安装两个MySQL实例,步骤如下:
1. 准备工作
――创建mysql系统组及用户
# groupadd -g 497 mysql
# useradd -u 499 -g mysql mysql
――解压安装包
将二进制安装包解压到/usr/local/目录中,并改名为mysql,这是二进制包编译时basedir参数的缺省目录。
# tar zxvf mysql-5.5.17-linux2.6-x86_64.tar.gz -C /usr/local/
# cd /usr/local/
# mv mysql-5.5.17-linux2.6-x86_64 mysql
――拷贝解压后的mysql,生成如下两个文件夹,以用作两个实例的安装目录
# cd /usr/local/
# cp -R mysql mysqla
# cp -R mysql mysqlb
# ll
drwxr-xr-x 12 root root 4096 Sep 27 14:33 mysql
drwxr-xr-x 12 root root 4096 Sep 27 14:36 mysqla
drwxr-xr-x 12 root root 4096 Sep 27 14:37 mysqlb
备注:此处保留mysql这个目录,是为了配置硬连接,以便在任何目录下,都可以访问mysql客户端程序。
2. 创建系统数据库
为两个MySQL实例创建系统数据库,basedir分别为/usr/loca/mysqla|mysqlb,datadir分别为/data/lib/mysqla|mysqlb,如下:
# cd /usr/local/mysql/
# scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysqla --datadir=/data/lib/mysqla
# scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysqlb --datadir=/data/lib/mysqlb
3. 配置参数文件
为了使每个MySQL实例拥有独立的参数文件,将其存放在各自的安装目录下(basedir),且需保证缺省路径下不存在参数文件,以防读取错误。
假设参数文件已配置好,端口分别为3306、3307,basedir分别为/usr/local/mysqla、/usr/local/mysqlb,datadir分别为/data/lib/mysqla、/data/lib/mysqlb。
4. 启动实例
这种情况下,可在启动实例时通过--defaults-file为其指定一个参数文件,如下:
# /usr/local/mysql/bin/mysqld_safe--defaults-file=/usr/local/mysqla/my.cnf &
# /usr/local/mysql/bin/mysqld_safe--defaults-file=/usr/local/mysqlb/my.cnf &
关闭实例时,同样需要指定其参数文件,否则会失败。
# /usr/local/mysql/bin/mysqladmin--defaults-file=/usr/local/mysqla/my.cnf shutdown
# /usr/local/mysql/bin/mysqladmin--defaults-file=/usr/local/mysqlb/my.cnf shutdown
5. 修改为服务管理方式
二进制包没有采用缺省参数文件,所以修改为服务管理方式稍微有点复杂,需要修改服务启动文件中的basedir、datadir参数,如下:
――拷贝服务文件
# cp /usr/local/mysql/support-files/mysql.server/etc/rc.d/init.d/mysqla
# cp /usr/local/mysql/support-files/mysql.server/etc/rc.d/init.d/mysqlb
――添加服务
# chkconfig --add mysqla
# chkconfig --add mysqlb
――修改服务启动文件
编辑两个服务启动文件,修改basedir、datadir参为合适的路径,如下:
# vi /etc/rc.d/init.d/mysqla
basedir=/usr/local/mysqla
datadir=/data/lib/mysqla
# vi /etc/rc.d/init.d/mysqlb
basedir=/usr/local/mysqlb
datadir=/data/lib/mysqlb
备注:通过显式设置basedir,以使每个MySQL实例拥有独立的参数文件。
――启动服务
# service mysqla start
Starting MySQL.. [ OK ]
# service mysqlb start
Starting MySQL.. [ OK ]
# service mysqlb status
MySQL running (30326) [ OK ]
# service mysqla status
MySQL running (29755) [ OK ]
修改为服务管理方式后,启动、关闭服务方便了,但在本地登录数据库,还需指定socket文件,因为缺省的/tmp/mysql.sock并不存在,如:
# mysql --socket=/data/lib/mysqla/mysql.sock
# mysql --socket=/data/lib/mysqlb/mysql.sock