Mysql 多实例即一台服务器上运行多个 Mysql 服务进程 ,开启不同的服务端口,通过不同的 socket 监听不同的服务端口来提供各自的服务。
1、 有效利用服务器资源:通过多实例地配置,可以将服务器剩余的资源充分利用起来。
2、 资源互相抢占问题:资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘 IO 资源,导致服务器上的其他实例提供服务的质量下降。
3、 节约资源。
1 安装前准备
服务器配置参数:
服务器版本:CentOS 7
数据库版本:mysql-5.7.35 https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
//将/etc/selinux/config 里的 SELINUX 设置成:disabled
// 安装必要组件
$> yum -y install make gcc-c++ cmake bison-devel ncurses-devellibaio libaio-devel
// 更新程序
$> yum -y update
复制代码
2 安装 MYSQL
2.1 解压 Mysql 安装文件
// 解压安装文件
$> tar -zxvf mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
// 复制/移动安装文件到指定目录
$> mv mysql-5.7.19-linux-glibc2.12-x86_64 /usr/local/mysql
复制代码
2.2 创建 mysql 实例用户及文件
// 创建用户
$> useradd mysql -r -s /sbin/nologin
// 数据导入导出目录
$> mkdir -p /usr/local/mysql/mysql_files
// 创建多实例数据目录:
$> mkdir -p /data/mysql_data{1..3}
// 修改mysql目录的属组及用户:
$> chown root.mysql -R /usr/local/mysql
// 修改专用目录的属主及属组:
$> chown mysql.mysql -R /usr/local/mysql/mysql_files /data/mysql_data{1..3}
复制代码
2.3 配置 Mysql 的配置文件
使用 VIM 创建并编辑文件: /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /tmp/mysql_multi.log
[mysqld1]
datadir = /data/mysql_data1 #设置数据目录
socket = /tmp/mysql.sock1 #设置sock文件存放路径
port = 3306 #设置监听开放端口
user = mysql #设置运行用户
performance_schema = off #关闭监控
innodb_buffer_pool_size = 32M #设置innodb 缓存大小
bind_address = 0.0.0.0 #设置监听IP地址
skip-name-resolve = 0 #关闭DNS反向解析
[mysqld2]
datadir = /data/mysql_data2
socket = /tmp/mysql.sock2
port = 3307
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
bind_address = 0.0.0.0
skip-name-resolve = 0
[mysqld3]
datadir = /data/mysql_data3
socket = /tmp/mysql.sock3
port = 3308
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
bind_address = 0.0.0.0
skip-name-resolve = 0
复制代码
2.4 初始化各个数据库实例
特别注意:初始化完后会在日志中生成密码,记得保存,一会要用。
// 实例1
$> /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data1
// 实例2
$> /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data2
// 实例3
$> /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data3
复制代码
2.5 开启各实例的 SSL 连接
$> /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data1
$> /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data2
$> /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data3
复制代码
2.6 复制多实例脚本到服务管理目录下
$> cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi
复制代码
2.7 给予脚本可执行权限:
$> chmod +x /etc/init.d/mysqld_multi
复制代码
2.8 加入 service 服务管理:
$> chkconfig --add mysqld_multi
复制代码
2.9 添加环境变量
在文件最后面添加内容:sudo vim /etc/profile
## SETUP MYSQL’S PATH
export MYSQL_HOME=/usr/local/mysql
export PATH=PATH
复制代码
完成后,使修改的配置文件生效:source /etc/profile
3 测试 MYSQL
3.1 查看实例状态
查看多个实例状态:mysqld_multi report
[root@localhost tmp]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
复制代码
3.2 启动实例
3.3 查看实例监听
$> ss -tulpn|grep mysqld
[root@localhost tmp]# ss -tulpn|grep mysqld
tcp LISTEN 0 80 *:3306 *:* users:(("mysqld",pid=5437,fd=20))
tcp LISTEN 0 80 *:3307 *:* users:(("mysqld",pid=5440,fd=20))
tcp LISTEN 0 80 *:3308 *:* users:(("mysqld",pid=5443,fd=20))
复制代码
3.4 查看实例监听
//
$> mysql -S /tmp/mysql.sock1 -p前面生成的密码
// 进去后修改root密码:
$> set password=password('123456');
// 使修改生效
$> flush privileges;
//设置远程连接
$> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
$> flush privileges;
复制代码
其他注意事项:
打开防火墙,开放 mysql 相关端口
4 开机自动启动
4.1 编写启动脚本
编写启动脚本,执行命令:vi /etc/rc.d/mysqld_multi_start.sh
#!/bin/bash
export PATH="$PATH":/usr/local/mysql/bin
mysqld_multi start
复制代码
修改权限:
该脚本标记为可执行文件(添加可执行的权限);
chmod +x /etc/rc.d/mysqld_multi_start.sh
然后将/etc/rc.d/rc.local 文件标记为可执行的文件;
chmod +x /etc/rc.d/rc.local
4.2 修改/etc/rc.d/rc.local 文件
修改 rc.local
,增加启动脚本:vi /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/etc/rc.d/mysqld_multi_start.sh
复制代码
4.3 重启服务器,验证状态
执行reboot
命令,重启服务器,然后执行 mysqld_multi report
查看服务状态。
[root@localhost ~]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
复制代码
评论