目录

一.概述

二.第一种

1.配置

2.启动服务

3.停止服务

4.加入mysql命令路径到PATH变量

三.第二种

1.解压MySQL安装包

2.在mysql目录下创建data目录

3.在data目录下创建二个实例的主目录

4.添加mysql组和mysql组用户

5.初始化四个实例,分别执行

6.为四个实例创建主配置文件my.cnf

7.启动实例

8.修改数据库密码和赋予远程登录权限

四.第三种


一.概述

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

  • 节约运维成本

  • 提高硬件利用率

  • 多实例配置,需要专用的、支持多实例的Mysql软件。这里对应的软件包是mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

二.第一种

1.配置

  • 配置一台为多实例数据库服务器,如果已安装mysql,则停止其服务,或将其卸载

# 卸载方法
~]# yum list installed | grep mysql
~]# yum remove -y mysql-community-server
  • 不能存在/etc/my.cnf文件,如果有此文件则移走它

  • 直接解压多实例Mysql软件包

~]# tar -xf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz 
~]# mv mysql-5.7.34-linux-glibc2.12-x86_64  /usr/local/mysql
  • 编写配置文件

~]# vim /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = root
​
[mysqld1]
datadir = /mysqlmul/mysqld1
port = 3306
log-error = /mysqlmul/mysqld1/mysqld1.err
pid-file = /mysqlmul/mysqld1/mysqld1.pid
socket = /mysqlmul/mysqld1/mysqld1.sock
​
[mysqld2]
datadir = /mysqlmul/mysqld2
port = 3307
log-error = /mysqlmul/mysqld2/mysqld2.err
pid-file = /mysqlmul/mysqld2/mysqld2.pid
socket = /mysqlmul/mysqld2/mysqld2.sock
  • 创建工作目录

[root@mysql1 ~]# mkdir -p /mysqlmul/mysqld{1,2}

2.启动服务

  • 启动第1个实例

~]# export PATH=/usr/local/mysql/bin:$PAT
~]# /usr/local/mysql/bin/mysqld_multi start 1
# 静候启动完成,记录最后一行产生的密码
2021-04-10T03:17:28.637290Z 1 [Note] A temporary password is generated for root@localhost: ,N1j!G1(M/L.
​
# 通过本机socket连接数据库并修改密码
[root@mysql1 ~]# mysql -uroot -p',N1j!G1(M/L.' -S /mysqlmul/mysqld1/mysqld1.sock
mysql> alter user root@'localhost' identified by 'mysql_P@s5';
Query OK, 0 rows affected (0.00 sec)
​
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
  • 启动第2个实例

[root@mysql1 ~]# /usr/local/mysql/bin/mysqld_multi start 2
# 静候启动完成,记录最后一行产生的密码
2021-04-10T03:28:42.084264Z 1 [Note] A temporary password is generated for root@localhost: &c/ag7j()41A
​
# 通过socket连接并修改密码
[root@mysql1 ~]# mysqladmin -uroot -p'&c/ag7j()41A' -S /mysqlmul/mysqld2/mysqld2.sock password 'mysql_P@s5'
​
# 通过网络连接
[root@mysql1 ~]# mysql -h127.0.0.1 -uroot -pmysql_P@s5 -P3307

3.停止服务

[root@mysql1 ~]# /usr/local/mysql/bin/mysqld_multi --user root --password mysql_P@s5 stop 1

4.加入mysql命令路径到PATH变量

# 临时增加
[root@mysql1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@mysql1 ~]# export PATH=$PATH:/usr/local/mysql/bin
[root@mysql1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin
​
# 永久修改PATH环境变量
[root@mysql1 ~]# vim .bash_profile   # 在下方添加
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
export PATH
[root@mysql1 ~]# source .bash_profile
​
# 停止实例2
[root@mysql1 ~]# mysqld_multi --user root --password mysql_P@s5 stop 2

三.第二种

安装部署 我这里以创建四个MySQL实例为例,监听的端口分别是3307,3308,3309,3310

1.解压MySQL安装包

地址:MySQL :: Download MySQL Community Server (Archived Versions)

~]# tar -zxvf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
# 移动并重命名
~]# mv mysql-5.7.34-linux-glibc2.12-x86_64 /usr/local/mysql

2.在mysql目录下创建data目录

~]# cd /usr/local/mysql
~]# mkdir data

3.在data目录下创建二个实例的主目录

~]# cd /usr/local/mysql/data/
~]# mkdir {3306,3307}

4.添加mysql组和mysql组用户

~]# groupadd mysql
~]# useradd -r -g mysql mysql

5.初始化四个实例,分别执行

~]# cd /usr/local/mysql/bin/
~]# ./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3306/ --user=mysql
~]# ./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3307/ --user=mysql

6.为四个实例创建主配置文件my.cnf

~]# cd /usr/local/mysql/data/3307
~]# vim my.cnf
# 主配置文件内容
​
[client]
port=3306
socket=/usr/local/mysql/data/3307/mysql.sock
default_character_set=utf8
​
[mysqld]
port=3306
socket=/usr/local/mysql/data/3307/mysql.sock
datadir=/usr/local/mysql/data/3307
log-error=/usr/local/mysql/data/3307/error.log
pid-file=/usr/local/mysql/data/3307/mysql.pid
character_set_server=utf8
lower_case_table_names=1
autocommit=1

替换不同实例配置文件中的目录名

只要在vi或vim编辑器中执行命令:%s/被替换的目录名/要替换的目录名/g 如:

注意:要在每个实例的主目录中为每个实例都创建主配置文件,且目录名要和实例端口号对应

7.启动实例

~]# cd /usr/local/mysql/bin/
~]# ./mysqld_safe --defaults-file=/usr/local/mysql/data/3306/my.cnf &
~]# ./mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf &

查看两个实例进程状态

~]# ps -ef | grep mysql

可以看到,端口的MySQL实例都启动成功

8.修改数据库密码和赋予远程登录权限

这里我以端口号为3307的实例为例,其他实例只需修改命令中的端口号就可以了

~]# cd /usr/local/mysql/bin/
~]# ./mysql -u用户名 -p -P端口 -h地址
​
~]# ./mysql -uroot -p -P3307 -h127.0.0.1
# 没有密码直接回车
​
# 执行命令修改密码
> alter user 'root'@'localhost' identified by '密码';
​
# 授予远程登录权限
> grant all privileges on *.* to root@'%' identified by '密码';

四.第三种

搭好的服务器添加多实例

注:这里是根据我的情况添加的多实例,最基本的就是直接创建一个数据目录--->初始化--->拷贝my.cnf文件--->修改内容--->启动放入后台,访问的时候要看自己的数据库是否有远程权限密码等,我这里配置文件有密码的但是没有远程权限,(如果没有在配置文件中写密码,可以远程就直接输入如:./mysql -usystem -p -P3307 -h127.0.0.1-->直接回车-->修改密码)

# 先创建一个存放示例的地方
~]# mkdir -p /data/mysql2/data/
~]# chown mysql:mysql /data/mysql2
# 初始化数据目录
~]# cd /usr/local/mysql/bin/
~]# ./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/data/mysql2/data --user=mysql
# 复制主配置文件内容
~]# cp /etc/my.cnf /etc/my2.cnf
# 修改里面的端口,id,数据目录等等,对应刚刚创建的目录的
# 启动放入后台
~]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my2.cnf --basedir=/usr/local/mysql --datadir=/data/mysql2/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql2/error.log --open-files-limit=65535 --pid-file=mysqldb2.pid --socket=/data/mysql2/mysql.sock --port=3307 &
# 查看与关闭
~]# ps -ef | grep mysql | grep -E '3306|3307'
~]# kill [id号]
# 测试登录
~]# cd /usr/local/mysql/bin/
# 登录
~]# mysql -uroot -p -S /data/mysql2/mysql.sock
# 先登录数据库,然后先创建好用户
# 打上链接不然会报错

~]# ln -s  /data/mysql2/mysql.sock /tmp/mysql.sock

注:测试的时候-P选项一定要带上-h否则你就会发现-P任意数都可以

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐