MySQL多实例(一台物理主机上运行多个数据库服务)

一、多实例概述

1.1、什么是多实例

  • 再一台物理主机上运行多个数据库服务

1.2、多实例优点

  • 节约运维成本
  • 提高硬件利用率

二、配置多实例

2.1、软件环境

  1. 解压软件
[root@host58 ~]# rpm -q libaio
libaio-0.3.109-13.el7.x86_64

[root@host58 ~]# ls
mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@host58 ~]# tar -zxf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

[root@host58 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64   /usr/local/mysql
[root@host58 ~]# ls /usr/local/mysql
  1. 修改PATH路径
[root@host58 ~]# PATH=/usr/local/mysql/bin:$PATH

[root@host58 ~]# vim /etc/bashrc
export  PATH=/usr/local/mysql/bin:$PATH
[root@host58 ~]# source /etc/bashrc

2.2、配置文件

  • /etc/my.cnf
    • 每个实例要有独立的数据库目录、端口
    • socket文件、pid文件、错误日志文件
[root@host58 ~]#vim  /etc/my.cnf    //把旧的删除或移走,重新创建一个空文件
[mysqld_multi]			//启用多实例
mysqld=/usr/local/mysql/bin/mysqld_safe		//指定进程文件路径
mysqladmin=/usr/local/mysql/bin/mysqladmin	//指定管理命令路径	
user=root									//指定进程用户

[mysqld1]					//实例进程名称,1表示示例编号
datadir=/dir1				//数据库目录,需要手动创建
port=3307					//端口号
log-error=/dir1/mysqld1.error		//错误日志
pid-file=/dir1/mysqld1.pid			//进程pid文件
socket=/dir1/mysqld1.sock			//指定scok文件的路径和名称

[mysqld2]
datadir=/dir2
port=3308
log-error=/dir2/mysqld2.error
pid-file=/dir2/mysqld2.pid
socket=/dir2/mysqld2.sock

2.3、管理多实例

  1. 先创建一个mysql用户
[root@host58 ~]# useradd mysql
  1. 启动MySQL数据库1、2
    可以获取到数据库初始密码
[root@host58 ~]# mysqld_multi start 1
root@localhost: pXPUu9ufMx,f
[root@host58 ~]# mysqld_multi start 2
root@localhost:K)UDhR8fqtwt
  1. 查看端口
[root@host58 ~]# netstat -utnlp | grep mysql
tcp6       0      0 :::3307                 :::*                    LISTEN      6576/mysqld         
tcp6       0      0 :::3308                 :::*                    LISTEN      6762/mysqld     
  1. 登录数据库1
[root@host58 ~]# mysql -uroot -p'pXPUu9ufMx,f' -S /dir1/mysqld1.sock

mysql> alter user  root@"localhost" identified by "123456";
Query OK, 0 rows affected (0.04 sec)

mysql> show databases;
mysql> create database bbsdb;//创建库
  1. 登录数据库2
[root@host58 ~]# mysql -uroot -p'K)UDhR8fqtwt' -S /dir2/mysqld2.sock

mysql> alter user  root@"localhost" identified by "123456";
Query OK, 0 rows affected (0.00 sec)

mysql> create database gamedb;//创建库
  1. 停止数据库2
[root@host58 ~]# mysqld_multi  --user=root --password=123456 stop 2
[root@host58 ~]# netstat  -utnlp | grep  mysqld
tcp6       0      0 :::3307                 :::*                    LISTEN      6576/mysqld 

三、客户端访问

  1. 分别再实例1和实例2上做用户授权
实例1
mysql> grant  all on  bbsdb.*  to  sql1@"%" identified by  "123456";

实例2
mysql> grant  all on  gamedb.*  to sql2@"%" identified by "123456";
  1. 客户端登录实例2
[root@client ~]# mysql -h192.168.4.58 -P3308 -usql2 -p123456

mysql> show databases;

猜你喜欢

转载自blog.csdn.net/weixin_40136446/article/details/105115654