本篇记录如何在一台机器上安装多个mysql instance(这样做的好处暂不讨论,可以google)
1.安装mysql
1)创建必要的用户,用户组(涉及到安全,不要用root安装,且mysql不允许直接sudo启动mysqld,必须指定--user=mysql)
sudo groupadd mysql
sudo useradd -r -g mysql mysql
2)拷贝tar文件到某个目录,例如/opt下,并解压缩
cd /opt
sudo tar zxvf ~/download/mysql-5.x-linux-glibc2.5-x86_
3)建立链接
cd /usr/local
sudo ln -s /opt/mysql-5.x-linux-glibc2.5-x86_64 mysql
#同时建立到bin目录的链接
sudo ln -s /usr/local/mysql/bin/* /usr/local/bin/cd mysql
sudo chown -R mysql .
sudo chgrp -R mysql .
4)安装db instance
sudo mkdir -p /data/mysql/mysql01 #存放第一个instance的pid,sock,data,依次类推,可以创建mysql02,03,...
sudo chown mysql:mysql /data/mysql -R #保证mysql用户对/data/mysql以及其子目录的完全访问权限
#执行下面的脚本会初始化第一个instance的数据库
#在此之前,有可能需要安装libaio1,运行命令sudo apt-get install libaio1 libaio-dev
sudo scripts/mysql_install_db --user=mysql --datadir=/data/mysql/mysql01
#为了安全起见,将全部目录的owner改回为root,除了data目录
sudo chown -R root .
sudo chown -R mysql data
#配置myf,需要修改datadir,pid,socket等配置
sudo cp support-files/my-mediumf /etc/mysql/myf
#配置服务
sudo cp support-files/mysql.server /etc/init.d/mysql
#启动mysqlsudo service mysql start
#执行下面的命令,可以验证该端口是否在监听
sudo netstat -nltp | grep mysql
2. 安装第二个db instance
1)准备数据文件目录
sudo mkdir -p /data/mysql/mysql02
sudo chown mysql:mysql /data/mysql/mysql02
2)初始化数据文件
sudo scripts/mysql_install_db --user=mysql --datadir=/data/mysql/mysql02
#配置第二个myf,修改port=3307,以及对应的datadir,pid以及socket!!!
3)配置cnf并启动
sudo cp /etc/mysql/myf /etc/mysql/my2f
#指定myf启动instance
sudo mysqld --defaults-file=/etc/mysql/my2f --user=mysql
4)修改root密码
#执行下面的命令,可以验证该端口是否在监听
sudo netstat -nltp | grep mysql
#也可以通过ps -ef | grep mysql可以看到有两个instance在运行
#通过mysqladmin指定root的初始密码
sudo mysqladmin -uroot password 'passwd' --socket=/data/mysql/mysql02.sock
5)验证刚刚安装的2个instance
#不指定参数,默认端口3306,访问的是第一个instance
mysql -uroot -p
#访问第二个instance需要指定socket
mysql -uroot -p -S/data/mysql/mysql02.sock#或者mysql -uroot -p --socket=/data/mysql/mysql02.sock
至此,单机安装多个mysql实例就差不多了,使用起来跟单机安装多个mysql数据库差别不大
3. 使用mysqld_multi完善安装
1)创建新的myf
运行mysqld_multi --example可以获得一个多实例环境下的myf样本,稍作修改如下:
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
#此处的用户名密码应该可以访问全部的instance,并具有shutdown的权限,这里简单起见直接用root了(部署时应该给每个instance创建一个该账户)
user = root
password = passwd
[mysqld1]
pid-file = /data/mysql/mysql01.pid
socket = /data/mysql/mysql01.sock
port = 3306datadir = /data/mysql/mysql01
user = mysql
mysql帮助文档log = /var/log/mysql/mysql01.log
[mysqld2]
[mysqld2]
pid-file = /data/mysql/mysql02.pid
socket = /data/mysql/mysql02.sock
port = 3307
datadir = /data/mysql/mysql02
user = mysql
log = /var/log/mysql/mysql02.log
将该文件放在/etc/mysql/下,覆盖即可(原先的myf和my2f分别针对两个instance的,已经不需要了)
2)启动多实例
运行sudo mysqld_multi start 1,2可以同时启动mysqld1和mysqld2,可以支持 start 1, 3-4这样的表达式
运行sudo mysqld_multi start 1,2可以同时启动mysqld1和mysqld2,可以支持 start 1, 3-4这样的表达式
3)验证安装结果
同2.5的步骤
4. 继续添加第3个乃至第N个 instance
1)停止全部的mysqld:
sudo mysqld_multi stop (如果stop 1则只停止mysqld1这个instance,不加参数表示停止全部的instance)
2)准备数据文件的目录
sudo mkdir -p /data/mysql/mysql03
sudo chown mysql:mysql /data/mysql/mysql03
3)初始化(安装数据文件)
sudo scripts/mysql_install_db --user=mysql --datadir=/data/mysql/mysql03
#启动mysqld(与上面不同的时,这次直接指定参数,而不再配置my3f,效果是一样的)
sudo mysqld --port=3308 --datadir=/data/mysql/mysql03 --socket=/data/mysql/mysql03.sock --user=mysql
#修改密码,保持与第1个和第2个instance相同的密码,以便mysqld_multi能启动/关闭
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论