首页 > 技术文章 > mysql多实例

heping0312 2020-11-28 15:23 原文

多实例概述
什么是多实例
– 在一台物理主机上运行多个数据库服务
为什么要使用多实例
– 节约运维成本
– 提高硬件利用率

配置多实例
配置步骤
配置步骤说明
– 安装支持多实例服务的软件包
– 修改主配置文件
– 根据配置文件做相应设置
– 初始化授权库
– 启动服务
– 客户端访问

安装支持多实例服务的软件包
具体配置
– 解压软件
– 修改目录名
– 修改 PATH 变量
db56虚拟机部署过mysql,停掉mysql服务
rpm -qa | grep -i mysql
systemctl stop mysqld
systemctl disable mysqld

[root@db56 ~]# tar -xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@db56 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@db56 ~]# tail -1 /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
[root@db56 ~]# source /etc/profile
[root@db56 ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

配置文件参数说明
主配置文件 /etc/my.cnf
– 每个实例要有独立的数据库目录和监听端口号
– 每个实例要有独立的实例名称和独立的 sock 文件
停止其他软件运行的mysql数据库服务,并将其对应配置文件改名备份,然后编辑一个新的/etc/my.cnf文件
[mysqld_multi] #启用多实例
mysqld = /usr/local/mysql/bin/mysqld_safe #指定进程文件的路径
mysqladmin = /usr/local/mysql/bin/mysqladmin #指定管理命令路径
user = root #指定调用进程的用户

[mysqld10] #实例进程名称 ,X 表示实例名称 , 如 [mysqld2]
port = 3310 #端口号
datadir = /data3310 #数据库目录 ,要手动创建
socket = /data3310/mysql.sock #指定 sock 文件的路径和名称
pid-file = /data3310/mysqld.pid #进程 pid 号文件位置
log-error = /data3310/mysqld.err #错误日志位置

[mysqld2] #实例进程名称 ,X 表示实例名称 , 如 [mysqld2]
port = 3308 #端口号
datadir = /data3308 #数据库目录 ,要手动创建
socket = /data3308/mysql.sock #指定 sock 文件的路径和名称
pid-file = /data3308/mysqld.pid #进程 pid 号文件位置
log-error = /data3308/mysqld.err #错误日志位置

[root@db56 ~]# mkdir /data330{7,8}

管理实例
初始化授权库:
– 会提示 root 用户登录的初始化密码
模板:./mysqld --user=mysql --basedir= 软件安装目录 --datadir= 数据库目录 – initialize #手动初始化授权库
mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3307 --initialize
启动实例进程
./mysqld_multi start 实例编号 #启动实例进程,本步骤可以自动初始化授权库,不需要进行上一步
停止实例进程
./mysqld_multi --user=root --password=密码 stop 实例编号 #停止实例进程


启动服务
[root@db56 bin]# useradd -s /sbin/nologin mysql #创建mysql用户
[root@db56 bin]# ./mysqld_multi start 1 #启动实例进程
[root@db56 bin]# ss -antupl | grep mysql
tcp LISTEN 0 80 :::3307 :::* users:(("mysqld",pid=4005,fd=16))

[root@db56 bin]# mysqld_multi start 2
[root@db56 bin]# ss -antupl | grep mysql
tcp LISTEN 0 80 :::3307 :::* users:(("mysqld",pid=4567,fd=16))
tcp LISTEN 0 80 :::3308 :::* users:(("mysqld",pid=4966,fd=16))

客户端访问
本机连接
– 使用初始密码连接
./mysql -uroot –p 初始密码 -S sock文件
– 修改本机登陆密码
mysql> alter user user() identified by "新密码";
– 连接实例
./mysql -uroot -p 新密码 -S sock文件

[root@db56 /]# /usr/local/mysql/bin/mysql -uroot -p'/Ca.P8=*rn-c' -S /data3307/mysql3307.sock #初次登陆
mysql> alter user user() identified by "123456"; #修改密码
[root@db56 /]# /usr/local/mysql/bin/mysql -uroot -p123456 -S /data3307/mysql3307.sock #使用新密码登陆

[root@db56 /]# /usr/local/mysql/bin/mysql -uroot -p'r.DCtik;Z9ta' -S /data3308/mysql3308.sock
mysql> alter user user() identified by '123456';
[root@db56 /]# /usr/local/mysql/bin/mysql -uroot -p123456 -S /data3308/mysql3308.sock #使用新密码登陆

[root@db56 bin]# ./mysqld_multi --user=root --password=123456 stop 1 #停止实例进程
[root@db56 bin]# ss -antupl | grep mysql

 

 

 

原先my.cnf  配置如下

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = root

[mysqld10]
port = 3310
datadir = /data3310
socket = /data3310/mysql.sock
pid-file = /data3310/mysqld.pid
log-error = /data3310/mysqld.err

[mysqld2]
port = 3308
datadir = /data3308
socket = /data3308/mysql.sock
pid-file = /data3308/mysqld.pid
log-error = /data3308/mysqld.err

推荐阅读