1. 程式人生 > >CentOS7.7下二進位制部署MySQL多版本多例項實戰

CentOS7.7下二進位制部署MySQL多版本多例項實戰

第一章 需求說明

  1. 部署MySQL5.7的三個多例項環境(埠分別為3307,3308,3309)
  2. 部署MySQL5.6和8.0版本資料庫例項((埠分別為3316和3326)

第二章 環境準備

1.虛擬機器環境

$ hostname -I 
  10.0.1.51
$ hostname
  db01
$ cat /etc/redhat-release 
  CentOS Linux release 7.7.1908 (Core)

2.虛擬機器優化

# 關閉Selinux
$ setenforce 0
$ sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config

# 關閉防火牆
$ systemctl stop firewalld
$ systemctl disable firewalld
$ iptables-save

# 更改yum源
$ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.ori
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ sed  -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo 

# 新增epel源
$ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# 更新yum快取
$  yum clean all
$ yum makecache fast

# 停止NetworkManager
$ systemctl stop NetworkManager
$ systemctl disable NetworkManager

# 加大檔案描述符
$ echo '* - nofile 65535' >>/etc/security/limits.conf 

3.清理環境

①解除安裝已安裝的mysql

$ rpm -qa | grep mysql
# 結果如下
mysql-community-common-8.0.18-1.el7.x86_64
mysql-community-client-8.0.18-1.el7.x86_64
mysql-community-libs-8.0.18-1.el7.x86_64

# 使用以下命令依次刪除上面的程式
$ yum remove mysql-xxx-xxx-

②刪除mysql的配置檔案

$ find / -name mysql|xargs rm -fr

③刪除MariaDB的檔案

$ rpm -qa | grep mariadb
$ rpm -e mariadb-xxx --nodeps

④刪除my.cnf

$ rm -fr /etc/my.cnf

⑤檢查埠是否被佔用

$ which mysql
$ pkill mysqld
$ netstat -lntup|egrep '3307|3308|3309|3316|3326'

4.準備軟體包

MySQL官方下載地址
下載二進位制包略。

5.準備目錄

$ rm -rf /data/*

# MySQL安裝目錄
$ mkdir -p /data/app

# MySQL資料目錄
$ mkdir -p /data/330{7,8,9}/data
$ mkdir -p /data/33{16,26}/data

# Scoket目錄
$ mkdir -p /data/socket

第三章 部署MySQL5.7多例項

1.解壓軟體包並製作軟連線

$ tar xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
$ mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql-5.7.28
$ ln -s /data/app/mysql-5.7.28 /data/app/mysql5728

2.建立MySQL多例項配置

# 3307例項配置
$ cat > /data/3307/my.cnf <<EOF 
[mysqld]                    
user=mysql                  
basedir=/data/app/mysql5728    
datadir=/data/3307/data     
socket=/data/socket/mysql3307.sock      
port=3307                   
server_id=7                  
EOF

# 3308例項配置
$ cat > /data/3308/my.cnf <<EOF 
[mysqld]                    
user=mysql                  
basedir=/data/app/mysql5728    
datadir=/data/3308/data     
socket=/data/socket/mysql3308.sock      
port=3308                   
server_id=8                  
EOF

# 3309例項配置
$ cat > /data/3309/my.cnf <<EOF 
[mysqld]                    
user=mysql                  
basedir=/data/app/mysql5728    
datadir=/data/3309/data     
socket=/data/socket/mysql3309.sock      
port=3309                   
server_id=9                  
EOF

3.建立MySQL傀儡使用者並授權

$ useradd -s /sbin/nologin -M mysql
$ id mysql
$ chown -R mysql.mysql /data

4.初始化

$ /data/app/mysql5728/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql5728 --datadir=/data/3307/data
$ echo $?

$ /data/app/mysql5728/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql5728 --datadir=/data/3308/data
$ echo $?

$ /data/app/mysql5728/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql5728 --datadir=/data/3309/data
$ echo $?

5.編寫systemd啟動指令碼

# 3307例項啟動的服務指令碼
$ 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=/data/app/mysql5728/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF

# 3308例項啟動的服務指令碼
$ 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=/data/app/mysql5728/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF

# 3309例項啟動的服務指令碼
$ 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=/data/app/mysql5728/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF

6.啟動多例項

$ systemctl start mysqld3307
$ systemctl start mysqld3308
$ systemctl start mysqld3309
$ netstat -lntup|grep mysqld
  tcp6   0   0  :::3307    :::*     LISTEN   2093/mysqld         
  tcp6   0   0  :::3308    :::*     LISTEN   2127/mysqld         
  tcp6   0   0  :::3309    :::*     LISTEN   2161/mysqld 

7.絕對路徑登入MySQL多例項

$ /data/app/mysql5728/bin/mysql -S /data/socket/mysql3307.sock
$ /data/app/mysql5728/bin/mysql -S /data/socket/mysql3308.sock
$ /data/app/mysql5728/bin/mysql -S /data/socket/mysql3309.sock

第四章 部署MySQL5.6單例項

1.解壓軟體包並製作軟連線

$ tar xf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
$ mv mysql-5.6.46-linux-glibc2.12-x86_64 mysql-5.6.46
$ ln -s ln -s mysql-5.6.46 mysql5646

2.建立MySQL例項配置

cat > /data/3316/my.cnf <<EOF 
[mysqld]                    
user=mysql                  
basedir=/data/app/mysql5646    
datadir=/data/3316/data     
socket=/data/socket/mysql3316.sock       
port=3316                   
server_id=16                  
EOF

3.建立mysql傀儡使用者並授權

$ chown -R mysql.mysql /data

4.初始化

$ /data/app/mysql5646/scripts/mysql_install_db  --user=mysql --basedir=/data/app/mysql5646 --datadir=/data/3316/data
$ echo $?

5.編寫systemd啟動指令碼

cat > /etc/systemd/system/mysqld3316.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=/data/app/mysql5646/bin/mysqld --defaults-file=/data/3316/my.cnf
LimitNOFILE = 5000
EOF

6.啟動例項

$ systemctl daemon-reload
$ systemctl start mysqld3316.service
$ netstat -lntup|grep mysqld
  tcp6  0  0 :::3316    :::*    LISTEN      2516/mysqld

7.絕對路徑登入MySQL例項

$ /data/app/mysql5646/bin/mysql -S /data/socket/mysql3316.sock

第五章 部署MySQL8.0單例項

1.解壓軟體包並製作軟連線

$ tar xf mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
$ mv mysql-8.0.18-linux-glibc2.12-x86_64 mysql-8.0.18
$ ln -s mysql-8.0.18 mysql8018

2.建立MySQL例項配置

cat > /data/3326/my.cnf <<EOF 
[mysqld]                    
user=mysql                  
basedir=/data/app/mysql8018     
datadir=/data/3326/data     
socket=/data/socket/mysql3326.sock       
port=3326                  
server_id=26                  
EOF

3.建立mysql傀儡使用者並授權

$ chown -R mysql.mysql /data

4.安裝依賴並初始化

$ yum install -y perl-DBD-MySQL perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
$ /data/app/mysql8018/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql8018 --datadir=/data/3326/data
$ echo $?

5.編寫systemd啟動指令碼

cat > /etc/systemd/system/mysqld3326.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=/data/app/mysql8018/bin/mysqld --defaults-file=/data/3326/my.cnf
LimitNOFILE = 5000
EOF

6.啟動例項

$ systemctl start mysqld3326.service 
$ netstat -lntup|grep mysqld
  tcp6       0      0 :::3326    :::*    LISTEN      2686/mysqld  

7.絕對路徑登入MySQL例項

$ /data/app/mysql8018/bin/mysql -S /data/socket/mysql3326.sock

至此,在同一臺伺服器上部署多版本MySQL多例項完成,可是使用一下命令驗證:

[root@db01 ~]# netstat -lntup|grep mysqld
tcp6       0      0 :::3326    :::*        LISTEN      2686/mysqld         
tcp6       0      0 :::33060   :::*        LISTEN      2686/mysqld         
tcp6       0      0 :::3307    :::*        LISTEN      2093/mysqld         
tcp6       0      0 :::3308    :::*        LISTEN      2127/mysqld         
tcp6       0      0 :::3309    :::*        LISTEN      2161/mysqld         
tcp6       0      0 :::3316    :::*        LISTEN      2516/mysqld 

我的部落格:https://www.pingface.com/2020/04/23/mysqlmulti.h