目录
MySQL 多实例
多实例概述
多实例概述
配置多实例
安装环境准备
安装提供多实例服务的软件
编辑主配置文件
管理多实例
客户端访问
什么是多实例
—— 在一台物理主机上运行多个数据库服务
为什么要使用多实例
—— 节约运维成本
—— 提高硬件利用率
多实例的应用场景
—— 资金比较紧张的公司
—— 并发访问不是特别大的业务
安装环境准备
[root@mysql50 ~]# rpm -qa | grep -i mysql
mysql-community-libs-5.7.17-1.el7.x86_64
mysql-community-client-5.7.17-1.el7.x86_64
mysql-community-server-5.7.17-1.el7.x86_64
mysql-community-common-5.7.17-1.el7.x86_64
由于mysql5.7.17版本没有多实例功能,我们需要关闭MySQL服务,然后安装别的版本。
[root@mysql50 ~]# netstat -lntup | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 1317/mysqld
[root@mysql50 ~]# systemctl stop mysqld
[root@mysql50 ~]# systemctl disable mysqld //设置开机不自启
Removed symlink /etc/systemd/system/multi-user.target.wants/mysqld.service.
[root@mysql50 ~]# mv /etc/my.cnf /root //由于提供多实例服务的软件的配置文件也是/etc/my.cnf,所以我们移走mysql5.7.17的主配置文件,以免发生冲突。
具体操作
—— 解压软件、修改目录名、修改PATH路径
安装mysql5.7.20,该版本支持多实例的配置。
mysql5.7.20的下载地址:https://downloads.mysql.com/archives/community/
1、将下载好的软件上传到主机192.168.233.50上面
[root@mysql50 ~]# ls /root
2、安装软件
[root@mysql50 ~]# tar -xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@mysql50 ~]# ls
[root@mysql50 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@mysql50 ~]# cd /usr/local/mysql
[root@mysql50 mysql]# ls
bin COPYING docs include lib man README share support-files
[root@mysql50 mysql]# ls bin //查看musql5.7.20提供的命令
主配置文件
—— 每个实例要有独立的数据库目录和端口
—— socket文件、pid文件、错误日志文件
socket文件:在数据库服务器上自己连接自己时,是通过socket文件传递数据。当数据库服务器启动时,这个文件就自动成成在数据库目录里,当数据库服务关闭时,这个文件就会自动消失。
1)修改配置文件
[root@mysql50 mysql]# pwd
/usr/local/mysql
[root@mysql50 mysql]# vim /etc/my.cnf
#定义多实例程序启动后的参数配置
[mysqld_multi] #启动多实例
mysqld = /usr/local/mysql/bin/mysqld_safe #指定进程文件路径
mysqladmin = /usr/local/mysql/bin/mysqladmin #指定管理命令路径
user = root #指定进程用户,指定root运行多实例服务
#pass = MySQL@123 #可以不指定密码,在初始化的时候也会出现密码
[mysqld1] #实例进程名称,编号是1的实例服务
datadir = /dir1 #指定数据库目录,每个服务都要有独立的数据库目录,要手动创建
port = 3307 #指定端口
log-error = /dir1/mysqld1.err #指定错误日志的位置,日志文件存储的路径和名称可以自定义
pid-file = /dir1/mysqld1.pid #指定进程文件pid号文件的位置,会将服务启动后的PID号保存到这个文件
socket = /dir1/mysqld1.sock #指定socket文件的路径和名称,数据库服务在本机是通过socket文件来访问数据库服务
[mysqld2]
datadir = /dir2
port = 3308
log-error = /dir2/mysqld2.err
pid-file = /dir2/mysqld2.pid
socket = /dir2/mysqld2.sock
2)根据配置文件的定义,创建目录文件
[root@mysql50 ~]# mkdir /dir1
[root@mysql50 ~]# mkdir /dir2
启动服务
—— ]# /usr/local/mysql/bin/mysqld_multi start 实例编号 //启动服务
//首次启动服务的时候,会做数据初始化,即创建初始的四个库,并且初始化管理员本机登录的密码会输出在屏幕上
停止服务
—— ]# /usr/local/mysql/bin/mysqld_multi --user=root --password=密码 stop 实例编号 //停止服务
1、启动服务
[root@mysql50 ~]# /usr/local/mysql/bin/mysqld_multi start 1 //启动服务
//如图所示,启动成功,红圈里面的是数据库服务的初始密码
[root@mysql50 ~]# /usr/local/mysql/bin/mysqld_multi start 2
2、查看服务状态
[root@mysql50 ~]# netstat -lntup | grep 3307
tcp6 0 0 :::3307 :::* LISTEN 8627/mysqld
[root@mysql50 ~]# netstat -lntup | grep 3308
tcp6 0 0 :::3308 :::* LISTEN 9676/mysqld
本机连接
—— 使用初始密码连接
—— 修改本机登录密码
]# mysql -uroot -p'初始密码' -S sock文件
mysql> alter user root@"localhost" identified by "新密码";
1、使用初始密码连接服务
mysqld1
[root@mysql50 ~]# /usr/local/mysql/bin/mysql -uroot -p'xqK:o<3bfo2U' -S /dir1/mysqld1.sock
mysql> show databases; //需要修改密码才能对数据库进行操作
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysqld2
[root@mysql50 ~]# /usr/local/mysql/bin/mysql -uroot -p'D5)J%Zt+vvjy' -S /dir2/mysqld2.sock
2、修改初始密码
mysqld1
mysql> alter user root@"localhost" identified by "123456";
mysql> exit
[root@mysql50 ~]# /usr/local/mysql/bin/mysql -uroot -p123456 -S /dir1/mysqld1.sock
mysql> show databases; //修改完密码后,就可以数据库进行操作了
mysqld2
mysql> alter user root@"localhost" identified by "123456";
mysql> exit
[root@mysql50 ~]# /usr/local/mysql/bin/mysql -uroot -p123456 -S /dir2/mysqld2.sock
3、停止服务
[root@mysql50 ~]# /usr/local/mysql/bin/mysqld_multi --user=root --password=123456 stop 1
[root@mysql50 ~]# /usr/local/mysql/bin/mysqld_multi --user=root --password=123456 stop 2
[root@mysql50 ~]# netstat -lntup | grep mysqld
[root@mysql50 ~]# netstat -lntup | grep 3307
[root@mysql50 ~]# netstat -lntup | grep 3308