1.实例
实例结构组成:Mysqld守护进程 + Master thread + worker thread(IO\SQL\Purge…) + 预分配内存结构
2.多实例
在一台机器上开启多个不同的MySQL服务端口(3306,3307…),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务。
同版本多实例共用一套MySQL安装程序,配置文件每个实例对应一个(可以用同一个),启动程序用同一个,数据文件是不同的;不同版本多实例各有一套MySQL安装程序,配置文件每个实例对应一个,启动程序每个实例对应一个,数据文件是不同的;
3.手撕同版本多实例
下载软件地址:https://downloads.mysql.com/archives/community/
本文同版本以 8.0.24 为例
3.1 上传软件到指定目录
cd /opt/soft
上传软件包 mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz
3.2 检验MD5值
md5sum mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz
ded5c24afd07a4a529e02d110c44b2ac mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz
对比官方MD5: ded5c24afd07a4a529e02d110c44b2ac
3.3 解压并创建软连
tar xf mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz
ln -s mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz mysql80
3.4 修改环境变量
echo 'export PATH=/opt/soft/mysql80/bin:$PATH' >>/etc/profile
source /etc/profile
mysql -V
mysql Ver 8.0.24 for Linux on x86_64 (MySQL Community Server - GPL)
3.5 清理遗留环境
rpm -qa|grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
用yum清理
yum remove mariadb-libs-5.5.60-1.el7_5.x86_64
删掉/etc/my.cnf已有文件
rm -rf /etc/my.cnf
3.6 依赖包
yum install -y libaio-devel
3.7 创建相关目录并授权
mkdir /data/330{7..9}/data -p -- 存放数据库数据
useradd -M -s /sbin/nologin mysql -- 创建管理用户
chown -R mysql.mysql /data/*
3.8 准备配置文件
cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/opt/soft/mysql80/
datadir=/data/3307/data
user=mysql
server_id=7
port=3307
socket=/tmp/mysql_3307.sock
[mysql]
socket=/tmp/mysql_3307.sock
default-character-set=utf8
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/opt/soft/mysql80/
datadir=/data/3308/data
user=mysql
server_id=8
port=3308
socket=/tmp/mysql_3308.sock
[mysql]
socket=/tmp/mysql_3308.sock
default-character-set=utf8
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/opt/soft/mysql80/
datadir=/data/3309/data
user=mysql
server_id=9
port=3309
socket=/tmp/mysql_3309.sock
[mysql]
socket=/tmp/mysql_3309.sock
default-character-set=utf8
EOF
3.9 数据初始化
mysqld --defaults-file=/data/3307/my.cnf --initialize-insecure
mysqld --defaults-file=/data/3308/my.cnf --initialize-insecure
mysqld --defaults-file=/data/3309/my.cnf --initialize-insecure
3.10 启动&验证
mysqld_safe --defaults-file=/data/3307/my.cnf &
mysqld_safe --defaults-file=/data/3308/my.cnf &
mysqld_safe --defaults-file=/data/3309/my.cnf &
netstat -lnutp|grep mysqld
tcp6 0 0 :::33060 :::* LISTEN 11776/mysqld
tcp6 0 0 :::3307 :::* LISTEN 11776/mysqld
tcp6 0 0 :::3308 :::* LISTEN 11962/mysqld
tcp6 0 0 :::3309 :::* LISTEN 12199/mysqld
mysql -S /tmp/mysql_3307.sock
mysql -S /tmp/mysql_3308.sock
mysql -S /tmp/mysql_3309.sock
4.手撕不同版本多实例
本文不同版本以 5.6.50、5.7.32、 8.0.24 为例
由于同版本和不同版本多实例,3.6之前的步骤都是大同小异的,我们从下面步骤开始。
4.1 创建相关目录并授权
mkdir /data/335{6..7}/data /data/3380/data -p -- 存放数据库数据
# useradd -M -s /sbin/nologin mysql -- 上面已经创建管理用户,省略
chown -R mysql.mysql /data/*
4.2 准备配置文件
cat > /data/3356/my.cnf <<EOF
[mysqld]
basedir=/opt/soft/mysql80/
datadir=/data/3356/data
user=mysql
server_id=56
port=3356
socket=/tmp/mysql_3356.sock
[mysql]
socket=/tmp/mysql_3356.sock
default-character-set=utf8
EOF
cat > /data/3357/my.cnf <<EOF
[mysqld]
basedir=/opt/soft/mysql57/
datadir=/data/3357/data
user=mysql
server_id=57
port=3357
socket=/tmp/mysql_3357.sock
[mysql]
socket=/tmp/mysql_3357.sock
default-character-set=utf8
EOF
cat > /data/3380/my.cnf <<EOF
[mysqld]
basedir=/opt/soft/mysql80/
datadir=/data/3380/data
user=mysql
server_id=80
port=3380
socket=/tmp/mysql_3380.sock
[mysql]
socket=/tmp/mysql_3380.sock
default-character-set=utf8
EOF
4.3 数据初始化
5.6.50 版本初始化:
/opt/soft/mysql56/scripts/mysql_install_db --user=mysql --basedir=/opt/soft/mysql56 --datadir=/data/3356/data
5.7.32 版本初始化:
/opt/soft/mysql57/bin/mysqld --defaults-file=/data/3357/my.cnf --initialize-insecure
8.0.24 版本初始化:
/opt/soft/mysql80/bin/mysqld --defaults-file=/data/3380/my.cnf --initialize-insecure
4.4 启动&验证
/opt/soft/mysql56/bin/mysqld_safe --defaults-file=/data/3356/my.cnf &
/opt/soft/mysql57/bin/mysqld_safe --defaults-file=/data/3357/my.cnf &
/opt/soft/mysql80/bin/mysqld_safe --defaults-file=/data/3380/my.cnf &
netstat -lnutp|grep mysqld
tcp6 0 0 :::33060 :::* LISTEN 11776/mysqld
tcp6 0 0 :::3307 :::* LISTEN 11776/mysqld
tcp6 0 0 :::3308 :::* LISTEN 11962/mysqld
tcp6 0 0 :::3309 :::* LISTEN 12199/mysqld
tcp6 0 0 :::3380 :::* LISTEN 17451/mysqld
tcp6 0 0 :::3356 :::* LISTEN 17888/mysqld
tcp6 0 0 :::3357 :::* LISTEN 17692/mysqld
mysql -S /tmp/mysql_3356.sock
mysql -S /tmp/mysql_3357.sock
mysql -S /tmp/mysql_3380.sock
更多精彩内容欢迎关注微信公众号