您的位置:首页 > 数据库 > MySQL

Mysql之一台服务器上装多个mysql-yellowcong

2018-01-19 11:03 169 查看
在生产和学习的过程中,我们可能遇到只有一台物理机器,但是想安装多个实例在一个机器上,这样不仅充分利用了资源,而且也简化了自己的操作,通常我们的解决方案就是通过
mysqld_multi
,让一台机器上,跑多个mysql实例,大致步骤是:1、规划好目录和端口,2、配置my.cnf文件,3、初始化每一个节点,4、启动每个节点,5、修改密码,6、测试数据库登录。

安装准备

我设置了将多个mysql的实例开机启动,而且搭建的时候,是基于mysql解压的方式,而不是直接通过yum install的方式安装的mysql。这点需要注意一下

Centos之添加开机启动-yellowcong

Censos之Mysql解压安装-yellowcong

系统架构

节点ip
/mysql/data/log日志节点
/home/data/mysql3306127.0.0.1:3306
/home/data/mysql3307127.0.0.1:3307
/home/data/mysql3308127.0.0.1:3308
/home/data/mysql3309127.0.0.1:3309
/home/data/mysql3310127.0.0.1:3310

创建目录

#创建4个节点文件夹
mkdir -p /mysql/data/{mysql3306,mysql3307,mysql3308,mysql3309,mysql3310}

#创建每个子文件夹的目录
#存放日志信息
mkdir -p  /mysql/data/log

#子节点信息
mkdir -p /mysql/data/mysql3306/{data,binlog,relay_log}
mkdir -p /mysql/data/mysql3307/{data,binlog,relay_log}
mkdir -p /mysql/data/mysql3308/{data,binlog,relay_log}
mkdir -p /mysql/data/mysql3309/{data,binlog,relay_log}
mkdir -p /mysql/data/mysql3310/{data,binlog,relay_log}

#添加权限
chown -R mysql.mysql /mysql/data/


建立好的目录结构



添加mysql的用户权限,不然又会报错了。



2、修改my.cnf配置文件

my.cnf目录,直接在mysql的安装目录就有,默认是直接走这个的。

配置之前,需要将目录建立好,设置好权限关系,我们开发中,之需要更改目录位置即可。

#编辑mysql的配置文件
vim /usr/local/mysql/my.cnf

#添加下面配置
[mysqld_multi]

mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin =/usr/local/mysql/bin/mysqladmin
#日志地址
log =/mysql/data/log/mysqld_multi.log

[mysqld3306]
#锁
socket = /mysql/data/mysql3306/mysql.sock
port = 3306
##pid文件
pid-file = /mysql/data/mysql3306/mysqld.pid
##数据存放地址
datadir = /mysql/data/mysql3306/data
## lob bin存放地址
log_bin=/mysql/data/mysql3306/binlog
#server的id,一个mysql集群里面或多个mysql,只能有一个为一个的id
#一般是ip最后位数+端口号
##server的id
server-id = 3306
##relay 日志地址
relay_log =/mysql/data/mysql3306/relay_log/mysql-relay-bin
log_slave_updates = 1
read_only = 0
innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 0

[mysqld3307]
socket = /mysql/data/mysql3307/mysql.sock
port = 3307
pid-file = /mysql/data/mysql3307/mysqld.pid
datadir = /mysql/data/mysql3307/data
log_bin=/mysql/data/mysql3307/binlog
server-id = 3307
relay_log =/mysql/data/mysql3307/relay_log/mysql-relay-bin
log_slave_updates = 1
read_only = 0
innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 0

[mysqld3308]
socket = /mysql/data/mysql3308/mysql.sock
port = 3308
pid-file = /mysql/data/mysql3308/mysqld.pid
datadir = /mysql/data/mysql3308/data
log_bin=/mysql/data/mysql3308/binlog
server-id = 3308
relay_log =/mysql/data/mysql3308/relay_log/mysql-relay-bin
log_slave_updates = 1
read_only = 0
innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 0

[mysqld3309]
socket = /mysql/data/mysql3309/mysql.sock
port = 3309
pid-file = /mysql/data/mysql3309/mysqld.pid
datadir = /mysql/data/mysql3309/data
log_bin=/mysql/data/mysql3309/binlog
server-id = 3309
relay_log =/mysql/data/mysql3309/relay_log/mysql-relay-bin
log_slave_updates = 1
read_only = 0
innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 0

[mysqld3310]
socket = /mysql/data/mysql3310/mysql.sock
port = 3310
pid-file = /mysql/data/mysql3310/mysqld.pid
datadir = /mysql/data/mysql3310/data
log_bin=/mysql/data/mysql3310/binlog
server-id = 3310
relay_log =/mysql/data/mysql3310/relay_log/mysql-relay-bin
log_slave_updates = 1
read_only = 0
innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 0


3、初始化数据库

#初始化3306 - 3310节点
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/data/mysql3306/data
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/data/mysql3307/data
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/data/mysql3308/data
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/data/mysql3309/data
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/data/mysql33010/data

#启动数据库
#efaults-extra-file 配置文件地址
#start 1 表示启动mysql1
#start 1,2,3 表示启动mysqld1,mysqld2,mysqld3
#启动所有节点
mysqld_multi --defaults-extra-file=/usr/local/mysql/my.cnf start 3306,3307,3308,3309,3310

#关闭数据库3306 节点
mysqld_multi --defaults-extra-file=/usr/local/mysql/my.cnf stop 3306,3307,3308,3309,3310

#查看运行情况
mysqld_multi --defaults-extra-file=/usr/local/mysql/my.cnf report

#设置密码
./bin/mysqladmin -h 127.0.0.1 -P 3306 -u root password 'root'
./bin/mysqladmin -h 127.0.0.1 -P 3307 -u root password 'root'
./bin/mysqladmin -h 127.0.0.1 -P 3308 -u root password 'root'
./bin/mysqladmin -h 127.0.0.1 -P 3309 -u root password 'root'
./bin/mysqladmin -h 127.0.0.1 -P 3310 -u root password 'root'

#登录节点3007(第一种登录方式)
#通过mysql客户端连接
mysql -h 127.0.0.1 -P 3306 -u root -proot
mysql -h 127.0.0.1 -P 3307 -u root -proot
mysql -h 127.0.0.1 -P 3308 -u root -proot
mysql -h 127.0.0.1 -P 3309 -u root -proot
mysql -h 127.0.0.1 -P 3310 -u root -proot

#登录到实例(第二种登录方式)
#-proot root是密码
mysql --socket=/mysql/data/mysql3307/mysql.sock -proot


初始化3307 节点



启动服务



查看运行情况



设置密码



登录数据库



添加到开机启动

#编辑rc.local
vim /etc/rc.local

#添加下面配置
su - root -c 'mysqld_multi --defaults-extra-file=/usr/local/mysql/my.cnf start 3306,3307,3308,3309,3310'

#删除默认的mysql 3306启动的配置
systemctl disable mysqld




重启服务后,就自动运行了,美滋滋啊。



问题集合

只有部分服务启动的情况

#查看运行情况
mysqld_multi --defaults-extra-file=/usr/local/mysql/my.cnf report

#结果发现,就启动了三台服务器
netstat -anp |grep 3307
netstat -anp |grep 3306

#杀死进程, 根据查询的进程id,来杀,肯定不同时候,启动的时候 不一样
kill 62118

#重启启动3306和3307两个点的服务
mysqld_multi --defaults-extra-file=/usr/local/mysql/my.cnf start 3306,3307

#查看运行情况
mysqld_multi --defaults-extra-file=/usr/local/mysql/my.cnf report




查看一下3306和3307端口,发现是两个端口被占用了,导致起不来



杀死进程号



查看运行情况



参考文章

http://blog.csdn.net/mchdba/article/details/45798139
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: