什么是mysql多实例?
在一台服务器中装有一个mysql数据库,但是现在的情况是这台服务器的配置非常的高,那么跑一个数据库是不是很浪费,那么我们可以在服务器中跑多个数据库实例,每个数据库实例相互不影响。这里还是一个mysql数据库,只是运行了多个实例,相当于你开了多个QQ一样。从而更好的利用服务器的资源,不用重新买服务器搭建mysql。
一、配置my.cnf文件
①在[mysqld] 标签下面添加
# 多实例配置 新建一个mysqld实例
[mysqld1]
port = 3307 # 端口
datadir = /mdata/data1 # 数据目录
socket = /tmp/mysql.sock1 # 设置sock
② 执行初始化mysqld1
mysqld --initialize-insecure --datadir=/mdata/data1 ###初始化mysqld --initialize-insecure 初始化且密码为空的意思
注意:当服务器里面装有多个数据库,版本不一样的话,
执行改命令时最好 加上全路径 例如我的mysql-5.7.16安装在 /usr/local/mysql-5.7.16则 执行
/usr/local/mysql-5.7.16/bin/mysqld --initialize-insecure --datadir=/mdata/data1
因为我在这里执行,跑到另外的低版本的mysql中去了,搞了半天没有通
执行完成之后,就可以看到/mdata/data1 里面有mysql的初始化数据了
③ 配置mysqld_multi
[mysqld_multi]
user=root ## 账号
pass='123456' ## 密码
mysqld = /usr/local/mysql/bin/mysqld_safe ## 启动mysql的链接
mysqladmin=/usr/local/mysql/bin/mysqladmin ## 关闭mysql的链接
log=/usr/local/mysql/mysqld_multi.log ## 日志
解析:
mysqld_multi标签下面的
有启动mysql和关闭mysql的链接, 注意关闭mysql的链接是通过mysqladmin的命令关闭的,这里必须是要在mysqld_multi里面配置账户密码,不然执行mysql_multi stop,是不能关闭运行的实例的,user和pass配置的就是 下面的mysqld1和mysql2的账户密码,也可以单独在下面配置。
命令:mysqladmin -uroot -p123456 -S /tmp/mysql.sock shutdown
这个shutdown其实就是进入mysql实例后直接执行也可以关闭,mysqladmin相当于是登录进去后关闭mysql实例。
a) 这里的坑,mysqld的配置文件默认是在 /usr/local/mysql/bin/mysqld_safe 目录,而我们的mysqld_safe 是在 /usr/local/mysql-5.7.15/bin/目录下面,所以这里需要建立2个软链接,这里是个坑,所以建议我们的mysql最好是建立到/usr/local/mysql目录下面,不要用mysql-5.7.16目录
ln -s /usr/local/mysql-5.7.15/bin/mysqld_safe /usr/local/mysql/bin/mysqld_safe
ln -s /usr/local/mysql-5.7.15/mysql/bin/mysqld /usr/local/mysql/bin/mysqld
b) 启动mysqld1 这里实例
mysqld_multi start 1 启动我们新建的mysqld1实例(我这里是有多个数据库影响了,所以必须带路径)
mysqld_multi stop 1 停止我们的实例
c) 查看我们的mysqld1实例是否启动成功
mysqld_multi report
这里显示就是mysqld1实例启动了
启动不成功,需要去看mysql的日志,对应的解决问题即可。
d) 连接mysqld1实例
mysql -S /tmp/mysql.sock1 -u root -p
/tmp/mysql.sock1 是我们配置的连接mysql的sock,这里必须写上,而远程连接的话直接连接端口3307即可 默认的初始密码为空。是因为前面初始化的时候,mysqld --initialize-insecure --datadir=/mdata/data1 ### --initialize-insecure 初始化且密码为空的意思
f) 如果还要建立多个实例的话 则my.cnf配置
然后重新初始化即可
小知识:如果单独配置实例则在对应的[mysqld_num] 下面配置参数,如果要共用则在[mysqld]下面配置
二、 配置不同版本的mysql多实例 再装一个5.6.28的版本
① 到mysql官网下载一个 mysql 5.6.28版本的数据库
② 解压到/usr/local/mysql-5.6.28目录
tar -xvf mysql-5.6.28.tar.gz
并且把目录权限给mysql
chown mysql:mysql /usr/local/mysql-5.6.28 -R
③ 初始化mysql5.6
cd /usr/local/mysql-5.6.28
scripts/mysql_install_db --user=mysql --datadir=/mdata/data56
④ 配置mysql.cnf
[mysqld56]
server-id = 56 ##每个实例不一样的 server-id
port = 3356 ##端口
basedir = /usr/local/mysql-5.6.28 ##mysql5.6.28的解压目录
datadir = /mdata/data56 ##我们的数据目录
socket = /tmp/mysql.sock56 ##本地连接的sock
⑤ 启动和关闭
mysqld_muilt start 56 或者 直接全部启动 mysqld_muilt start
查看是否启动成功 mysqld_muilt report
关闭就是stop
注意:如果批量关闭和启动有问题,那么可能需要配置密码跟其他的实例一样