在一台服务器上安装MySQL多实例(详解)

一,安装
    因为我使用的是ubuntu系统,所以一开始用apt-get install mysql-server安装,但是配置起来一直不得成功,也许是我各方面的配置有错误。所以干脆就按照原始的方法下载源码包编译安装。
1、下载:wget -c ftp://ftp.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-5.1/mysql-5.1.65.tar.gz

2、解压编译安装
./configure --prefix=/usr/local/mysql (如果就这样编译完成,安装好的数据库将不支持InnoDB数据引擎,所以添加上  --with-plugins=innobase 还可以加上更多的选项,详情参见--help
在这一步编译过程中,如果在最后出现了如下错误:
编译错误1
表示我的系统里因为之前自动安装的mysql-server没有卸载干净,之需要执行一次
make clean,然后在进行configure编译就可以了。
********************************************
如果在编译或者make的过程中出现了如下错误:
编译错误2
表示我的系统里没有安装ncurses软件包,可以通过下面的命令查找并安装(Ubuntu系统):

apt-cache search ncurses

apt-get install libncurses5-dev

至此,接下来的make && make install 都没有出现错误。


二,配置多实例

    这个过程折腾了好长的时间,其实主要还是各个配置文件的问题,如果权限,路径等一些基本的配置信息准确无误的话,应该是比较快的一个过程。

1、安装完成后,首先运行mysql看看是否可以正常使用数据库。

mysql>


2、配置访问用户和组

 

groupadd mysql #添加mysql用户组

useradd -g mysql mysql #创建mysql用户并把它放到mysql组下

chown -R mysql:mysql /usr/local/mysql #修改mysql文件属性

说明:这个地方有的时候我不好区分到底哪个是用户名,哪个是组名,于是我改成了别的名字,后来发现这样改掉之后在mysql的执行脚本里,用户默认是mysql,所以不建议在这里改用其他的用户和组的名称。
为了方便使用下面的多个mysql程序,可以先将mysql的程序路径加入到环境变量里:
#临时添加:export PATH=$PATH:/usr/local/mysql/bin  #注销登录就没有了
#永久添加:修改/root/.bashrc
    在文件最末添加命令:
    PATH=$PATH:/usr/local/mysql/bin

3、初始化数据目录,修改文件夹属性
#初始化数据目录  
mysql_install_db --datadir=/usr/local/mysql/var/data1 --user=mysql  
mysql_install_db --datadir=/usr/local/mysql/var/data2 --user=mysql
说明: 这个过程中如果出现了无法创建的错误,一般来讲是权限问题,参考下面的权限错误链接
 
#修改属性  
chown -R mysql /usr/local/mysql/var/data1   
chown -R mysql /usr/local/mysql/var/data2  

4、多实例的启动脚本(不知道是不是必须)得从安装文件源码中复制
cp /usr/local/src/mysql-5.1.65/support-files/mysqld_multi.server /etc/init.d/mysqld_multi.server
#修改basedir和bindir为安装路径
basedir=/usr/local/mysql/var    #如果数据目录的路径跟默认的不一样就得在这里更改
bindir=/usr/local/mysql/bin    #程序路径

5、启动脚本准备好之后,就是多实例的配置文件,配置文件可以用参数自由指定,
查看mysqld_multi --example可以知道配置文件的格式。网上一大把,就不多说了。下面给出我完整的配置文件信息mysqld_muliti.cnf(内容很少很简单):
[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log        = /usr/local/mysql/mysqld_multi.err
#user       = mysql
#password   = my_password

[mysqld2]
port     = 3307
socket   = /tmp/mysql.sock1
pid-file = /usr/local/mysql/var/data1/ubuntu2.pid1
datadir  = /usr/local/mysql/var/data1
log      = /usr/local/mysql/var/data1/mysql_1.log
user     = mysql

[mysqld3]
port       = 3308
socket     = /tmp/mysql.sock2
pid-file   = /usr/local/mysql/var/data2/ubuntu2.pid2
datadir    = /usr/local/mysql/var/data2
log        = /usr/local/mysql/var/data1/mysql_2.log
user       = mysql

是的,就这么点,你没有看错!因为我就起了2个实例。

6、执行
mysqld_multi --defaults-extra-file=/usr/local/mysql/etc/mysqld_multi.cnf report
#report 参数不仅仅是用来报告目前的数据库运行状态,而且还可以用来检查配置文件的格式,参数是否正确,配合/usr/local/mysql/mysqld_multi.err错误日志可以很容易的发现配置中的一些基本错误。

启动:mysqld_multi --defaults-extra-file=/usr/local/mysql/etc/mysqld_multi.cnf start

#查看是否有活动进程  
ps -aux|grep mysql 
 
#查看相应端口是否已经被监听  
netstat -tunlp  

通过sock文件登录  
mysql -u root -p -S /tmp/mysql1.sock  

********************************************************

参考文章:
完整过程: http://chenzehe.iteye.com/blog/1266260
重装错误(不支持InnoDB错误): http://www.stou.info/skill/190.html
编译错误: http://blog.csdn.net/zccst/article/details/4493074
权限问题: http://forum.ubuntu.org.cn/viewtopic.php?p=926560

 

你可能感兴趣的:(mysql,多实例,多个数据库,不同端口)