MySQL多实例安装

MySQL多实例安装

本文使用多配置文件(单独管理)和单配置文件(MySQL自带的多实例管理方式)的多实例安装,系统是CentOS7,数据库版本是MySQL5.7,本文为安装三个实例

实例规划:

实例 port server_id datadir路径 log_bin路径
3307实例 3307 7 /data/3307/data /data/3307/binlog
3308实例 3308 8 /data/3308/data /data/3308/binlog
3309实例 3309 9 /data/3309/data /data/3309/binlog

多配置文件方式

1.配置本地YUM仓库

搭建yum 仓库安装依赖包,MySQL依赖于该libaio库

[root@mysql /]# df -h
[root@mysql /]# mount /dev/cdrom /mnt
[root@mysql /]# cd /etc/yum.repos.d/
[root@mysql /]# mkdir bak
#先将其他的yum的repo源,使用本地镜像源,备份到bak目录中
[root@mysql /]# mv * bak/
[root@mysql /]# vi local.repo
#添加下面的内容到local.repo
[centos]
name=centos
baseurl=file:///mnt
gpgcheck=0
enable=1

安装所需依赖包

[root@mysql /]# yum -y install libaio 
[root@mysql /]# yum -y install autoconf

2.创建用户和组

添加用户和组,要是已经存在可以不创建

[root@mysql ~]# groupadd mysql
[root@mysql ~]# useradd -r -g mysql mysql

3.创建所需目录

创建软件目录并授权,将软件上传到/app目录下并解压,解压后重命名为mysql

[root@mysql ~]# mkdir -p /app
[root@mysql ~]# cd /app/
[root@mysql app]# ll
-rw-r--r--. 1 mysql mysql 341523632 Jul 12 17:16 mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz
[root@mysql app]# tar zxvf /app/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz 
[root@mysql app]# ll
drwxr-xr-x. 13 root root 191 Jul 14 00:24 mysql-5.7.28-linux-glibc2.12-x86_64
[root@mysql app]# mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql
[root@mysql app]# ll
drwxr-xr-x. 9 root  root        129 Jul 14 05:49 mysql
[root@mysql /]# chown -R mysql:mysql /app

创建数据文件相关目录并授权,每个实例的信息存放在不同的目录下

[root@mysql /]# mkdir -p /data/330{7,8,9}/data
[root@mysql /]# mkdir -p /data/330{7,8,9}/binlog
[root@mysql /]# chown -R mysql:mysql /data/330*

4.准备三个配置文件

每个配置文件存放在本实例的数据目录下,配置文件配最简单的配置,不代表生产

4.13307实例配置文件

cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.err
port=3307
server_id=7
binlog_format=row
log_bin=/data/3307/mysql-bin
[mysql]
prompt=db01 [\\d]>
EOF

4.23308实例配置文件

cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.err
port=3308
server_id=8
binlog_format=row
log_bin=/data/3308/mysql-bin
[mysql]
prompt=db01 [\\d]>
EOF

4.33309实例配置文件

cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.err
port=3309
server_id=9
binlog_format=row
log_bin=/data/3309/mysql-bin
[mysql]
prompt=db01 [\\d]>
EOF

5.配置启动脚本

这里就不使用/etc/init.d/下的系统服务启动方式了,因为还要设计修改mysql.server启动脚本,为了方便直接使用Linux7中自带mysqld.service的systemd服务管理方式启动

先复制三份启动脚本

cp /etc/systemd/system/mysqld.service mysqld3307.service
cp /etc/systemd/system/mysqld.service mysqld3308.service
cp /etc/systemd/system/mysqld.service mysqld3309.service

5.13307实例启动脚本

cat >/etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF

5.23308实例启动脚本

cat >/etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF

5.33309实例启动脚本

cat >/etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF

6.修改环境变量

[root@mysql mysql]# vi /etc/profile
#再最后添加上下面的MySQL的bin路径信息
export PATH=/app/mysql/bin:$PATH
#重新生效以下环境变量
[root@db01 ~]# source /etc/profile

7.初始化数据

为了防止启动出错,将/etc下的my.cnf修改备份以下

mv /etc/my.cnf /etc/my.cnf.bak

开始初始化参数

mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/app/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/app/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/app/mysql

8.启动数据库

启动所有实例

systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service

检查是否运行

#使用操作系统命令检查
netstat -lnp|grep 330
ps -ef|grep mysql
#或者使用非交互式命令检查
mysql -S /data/3307/mysql.sock -e "select @@server_id"
mysql -S /data/3308/mysql.sock -e "select @@server_id"
mysql -S /data/3309/mysql.sock -e "select @@server_id"

9.修改密码

mysql -S /data/3307/mysql.sock -e "alter user root@‘localhost‘ identified by ‘123‘;"
mysql -S /data/3308/mysql.sock -e "alter user root@‘localhost‘ identified by ‘123‘;"
mysql -S /data/3309/mysql.sock -e "alter user root@‘localhost‘ identified by ‘123‘;"

单配置文件方式

? Mysqld_multi可以用来启动、重新加载或停止任意数量的单独mysqld进程运行在不同的TCP/IP端口和UNIX套接字中。也可以从my.cnf文件中读取主标签[Mysqld_multi]的内容,里面可以写进一些mysqld或是mysqladmin别的不同的选项。要是针对每个实例单独配置也可以写进[mysqlGUN]子标签中,要注意如果[mysqld_multi]或[mysqldGUN]没有mysqld或mysqladmin,就会异常终止。

使用方法:

mysqld_multi [OPTIONS] {start|reload|stop|report} [GNR,GNR,GNR…]
mysqld_multi [OPTIONS] {start|reload|stop|report} [GNR-GNR,GNR -GNR,…]

GNR表示基团编号。你可以启动,重新加载,停止或报告任何GNR。GNR列表可以用逗号分隔或用破折号组合。后者意味着所有的会影响GNR1-GNR2之间的GNR。没有GNR参数所有找到的组将启动、重新加载、停止或报告。请注意,指定GNR的语法必须不包含空格。

注意:在MySQL5.6之后就不能使用Mysqld_multi来关闭数据库了

下面对也是针对MySQL5.7的多实例安装,也可以进行安装不同版本的安装,只需要在初始化数据时安装配置文件的顺序初始化就行。

1.配置本地YUM仓库

搭建yum 仓库安装依赖包,MySQL依赖于该libaio库

[root@mysql /]# df -h
[root@mysql /]# mount /dev/cdrom /mnt
[root@mysql /]# cd /etc/yum.repos.d/
[root@mysql /]# mkdir bak
#先将其他的yum的repo源,使用本地镜像源,备份到bak目录中
[root@mysql /]# mv * bak/
[root@mysql /]# vi local.repo
#添加下面的内容到local.repo
[centos]
name=centos
baseurl=file:///mnt
gpgcheck=0
enable=1

安装所需依赖包

[root@mysql /]# yum -y install libaio 
[root@mysql /]# yum-y install autoconf

2.创建用户和组

添加用户和组,要是已经存在可以不创建

[root@mysql ~]# groupadd mysql
[root@mysql ~]# useradd -r -g mysql mysql

3.创建所需目录

创建软件目录并授权,将软件上传到/app目录下并解压,解压后重命名为mysql

[root@mysql ~]# mkdir -p /app
[root@mysql ~]# cd /app/
[root@mysql app]# ll
-rw-r--r--. 1 mysql mysql 341523632 Jul 12 17:16 mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz
[root@mysql app]# tar zxvf /app/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz 
[root@mysql app]# ll
drwxr-xr-x. 13 root root 191 Jul 14 00:24 mysql-5.7.28-linux-glibc2.12-x86_64
[root@mysql app]# mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql
[root@mysql app]# ll
drwxr-xr-x. 9 root  root        129 Jul 14 05:49 mysql
[root@mysql /]# chown -R mysql:mysql /app

创建数据文件相关目录并授权,每个实例的信息存放在不同的目录下

[root@mysql /]# mkdir -p /mysql330{7,8,9}/data
[root@mysql /]# mkdir -p /mysql330{7,8,9}/binlog
[root@mysql /]# chown -R mysql:mysql /mysql330*

4.准备配置文件

在my.cnf配置文件中配置以下信息,注意此次配置文件中不需要配置basedir软件路径

[root@mysql /]# vi /etc/my.cnf 
[client]
socket=/tmp/mysql.sock
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
[mysqld_multi]
user=mysql
mysqld=/app/mysql/bin/mysqld_safe
mysqladmin=/app/mysql/bin/mysqladmin
log=/app/mysql/mysqld_multi.log
[mysqld3307]
server-id=7
port=3307
datadir=/mysql3307/data
socket=/tmp/mysql.sock3307
log_error=/mysql3307/data/mysql.err
binlog_format=row
log_bin=/mysql3307/binlog/mysql-bin
[mysqld3308]
server-id=8
port=3308
datadir=/mysql3308/data
socket=/tmp/mysql.sock3308
log_error=/mysql3308/data/mysql.err
binlog_format=row
log_bin=/mysql3308/binlog/mysql-bin
[mysqld3309]
server-id=9
port=3309
datadir=/mysql3309/data
socket=/tmp/mysql.sock3309
log_error=/mysql3309/data/mysql.err
binlog_format=row
log_bin=/mysql3309/binlog/mysql-bin

标签解释

[mysqld_multi]为主标签
[mysqld3307],[mysqld3308],[mysqld3309]为子标签
子标签自动继承主标签的内容,如需分配不同的资源在子标签中

5.配置启动脚本

mysqld_multi管理方式也有自己的启动脚本,配置也很简单如下

[root@mysql /]# cd /app/mysql/support-files/
[root@mysql support-files]# ll
total 24
-rw-r--r--. 1 7161 31415   773 Sep 27  2019 magic
-rwxr-xr-x. 1 7161 31415  1061 Sep 27  2019 mysqld_multi.server
-rwxr-xr-x. 1 7161 31415   894 Sep 27  2019 mysql-log-rotate
-rwxr-xr-x. 1 7161 31415 10576 Sep 27  2019 mysql.server
[root@mysql support-files]# cp /app/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi

6.初始化数据

初始化三个MySQL5.7实例,这里是使用无密码初始化

mysqld --initialize-insecure  --user=mysql --datadir=/mysql3307/data --basedir=/app/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/mysql3308/data --basedir=/app/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/mysql3309/data --basedir=/app/mysql

7.检查启动关闭

检查当前实例状态

[root@mysql ~]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3307 is not running
MySQL server from group: mysqld3308 is not running
MySQL server from group: mysqld3309 is not running

启动实例

[root@mysql ~]# mysqld_multi  start 3307
[root@mysql ~]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3307 is running
MySQL server from group: mysqld3308 is not running
MySQL server from group: mysqld3309 is not running
[root@mysql ~]# ps -ef|grep mysql
root       7505   7178  0 20:04 pts/0    00:00:00 mysql -uroot -p -S /tmp/mysql.sock3307
root       7732      1  0 21:27 pts/1    00:00:00 /bin/sh /app/mysql/bin/mysqld_safe --server-id=7 --port=3307 --datadir=/mysql3307/data --socket=/tmp/mysql.sock3307 --log_error=/mysql3307/data/mysql.err --binlog_format=row --log_bin=/mysql3307/binlog/mysql-bin
mysql      7893   7732  1 21:27 pts/1    00:00:00 /app/mysql/bin/mysqld --basedir=/app/mysql --datadir=/mysql3307/data --plugin-dir=/app/mysql/lib/plugin --user=mysql --server-id=7 --binlog-format=row --log-bin=/mysql3307/binlog/mysql-bin --log-error=/mysql3307/data/mysql.err --pid-file=mysql.pid --socket=/tmp/mysql.sock3307 --port=3307
root       7934   7641  0 21:27 pts/1    00:00:00 grep --color=auto mysql

修改密码

[root@mysql data]# mysql -uroot -p123 -S /tmp/mysql.sock3307
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.28-log MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

(root@localhost) [(none)]> 

关闭数据库,因为mysqld_multi不能直接关闭数据库了(一般也不会使用mysqld_multi关闭),那么就到数据库中正常shutduwn即可

(root@localhost) [(none)]> shutdown;
[root@mysql data]# ps -ef|grep mysql
root       8044   7641  0 22:13 pts/1    00:00:00 grep --color=auto mysql

至此安装完成

MySQL多实例安装

上一篇:MySQL8.0区别之密码认证方式和客户端链接


下一篇:python与mysql/mongoDB的连接