在一个linux主机安装多个版本的mysql

上一级页面:index-wsl

前言

linux 下同时安装 mysql5.7 和 mysql8.0的场景是比较常见的,

一般来说,系统本身的mysql跟随LTS的版本进行更新(现在是mysql8.x),但是一些项目要求使用更旧版本的mysql(例如5.7),这时候需要手动解压安装

卸载mysql其他版本

使用apt-get安装mysql会默认安装比较新的版本,而且是不可选的,比如Ubuntu16.04,直接执行apt-get install mysql会安装5.7,而更多情况下我们并不像安装最新的mysql,因为你不知道你的代码使用了它会出什么样的新bug,所以本文介绍ubuntu使用apt-get安装自选版本的mysql。

1、首先你要保证你的服务器上没有安装过,或者已经彻底卸载了mysql其他版本。卸载流程:

1
2
3
4
5
6
7
8
9
10
11
12

sudo apt-get remove --purge mysql-server-*
sudo apt-get autoremove --purge mysql-server-*

sudo apt-get remove mysql-server
sudo apt-get autoremove mysql-server
# (非常重要)
sudo apt-get remove mysql-common
sudo apt-get autoremove mysql-common
sudo apt remove mysql-community-source mysql-apt-config
# 去除官方源
sudo apt purge mysql-apt-config

清理残留配置数据:

1
2
3
4
sudo dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

sudo find /etc -name "*mysql*" |xargs rm -rf

最后用 dpkg -l | grep mysql 检查,如无返回即干净卸载

1
dpkg -l | grep mysql

liunx如何卸载安装的软件

安装和初始化mysql5.x

下载安装

访问官网MySQL :: Download MySQL Community Server

清华镜像站下载:Index of /mysql/downloads/MySQL-5.7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

若要下载mysql5.x latest版本,点击图中looking for previous GA version

Pasted%20image%2020220616213952.png

注意版本选择为 Generic

Pasted%20image%2020220616214438.png

若要下载历史版本,选择archive

Pasted%20image%2020220519121322.png

注意版本选择为 Generic

Pasted%20image%2020220616214533.png

创建下载目录:~/src,执行如下命令,

1
2
3
4
# 创建文件夹存放下载的文件:  
mkdir ~/src
# 进入文件夹,
cd ~/src
1
2
mkdir mysql
cd mysql

下载**Compressed TAR Archive**

Pasted%20image%2020220616214657.png

下载命令如下

1
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz

mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz解压,解压到 /usr/local/mysql57

解压.tar.gz压缩包

1
tar -xzvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz /usr/local/mysql57

*.tartar –xvf 解压

1
tar -xvf mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar /usr/local/mysql57

对于默认使用的mysql,应当创建一个指向安装目录的符号链接:

1
ln -s /usr/local/mysql57 /usr/local/mysql

根据官方文档MySQL :: MySQL 5.7 参考手册 :: 2.2 使用通用二进制文件在Unix/Linux上安装MySQL,应当暴露出来环境变量

1
2
# 配置mysql
export PATH=$PATH:/usr/local/mysql/bin

这里的/usr/local/mysql/是符号链接,指向 默认使用的mysql版本

修改必要文件

切换到root用户

1
sudo -s

来到mysq57目录

1
cd /usr/local/mysql57
1
2
3
mkdir mysql-files 
chown mysql:mysql mysql-files
chmod 750 mysql-files

mysql57 目录下创建一个 my.cnf 文件

1
vim /usr/local/mysql57/my.cnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[client]
# 更改mysql默认端口
port=3305
socket=/tmp/mysql57.sock

[mysqld]
# skip-grant-tables
# mysql安装目录
basedir=/usr/local/mysql57
# mysql数据库目录
datadir=/usr/local/mysql57/data
# 更改mysql默认端口,和上面同端口
port=3305
socket=/tmp/mysql57.sock

[mysqld_safe]
# 错误日志
log-error=/usr/local/mysql57/data/error.log
# pid文件
pid-file=/usr/local/mysql57/data/mysqld.pid
tmpdir=/tmp/mysql57

并修改权限

1
chmod 755 /usr/local/mysql57/my.cnf

mysql用户组和用户

见官方文档MySQL :: MySQL 5.7 Reference Manual :: 2.2 Installing MySQL on Unix/Linux Using Generic Binaries

1
2
groupadd mysql 
useradd -r -g mysql -s /bin/false mysql

由于用户仅出于所有权目的而不需要,而不是出于登录目的,因此 useradd 命令使用 和 选项创建对服务器主机没有登录权限的用户。

如果您的 useradd 不支持这些选项,请省略它们。-r``-s /bin/false,如下

1
2
groupadd mysql 
useradd -g mysql mysql

查看结果

1
cat /etc/passwd | grep mysql

输出如下

1
mysql:x:997:1002::/home/mysql:/bin/false

更改目录所有者

1
chown -R mysql:mysql /usr/local/mysql57

查看MySQL5.x安装目录

1
whereis mysql57

如果是手动安装的,那么官方教程一般会将/usr/local/mysql作为安装目录,手动安装的文档见MySQL :: MySQL 5.7 参考手册 :: 2.2 使用通用二进制文件在Unix/Linux上安装MySQL

初始化

官方文档MySQL :: MySQL 5.7 Reference Manual :: 2.10.1 Initializing the Data Directory

1
cd /usr/local/mysql57
1
bin/mysqld  --defaults-file=/usr/local/mysql57/my.cnf --user=mysql --initialize

会得到一个密码

在这里插入图片描述

记录下这个密码bZn9-#?eZ-y.

1
2022-06-17T00:49:15.308131Z 1 [Note] A temporary password is generated for root@localhost: bZn9-#?eZ-y.

添加mysql.service

修改文件 /usr/local/mysql57/support-files/mysql.server 中的如下内容

1
2
3
4
5
6
basedir=/usr/local/mysql57
datadir=/usr/local/mysql57/data
lockdir='/var/lock/subsys'
lock_file_path="$lockdir/mysql57"
mysqld_pid_file_path=/usr/local/mysql57/data/mysqld.pid
conf=/usr/local/mysql57/my.cnf

并将修改后的/usr/local/mysql57/support-files/mysql.server文件复制并重命名为 /etc/init.d/mysql57

1
cp /usr/local/mysql57/support-files/mysql.server /etc/init.d/mysql57

开启mysql服务自启动

1
systemctl enable mysql57.service

启动 mysql 服务

1
systemctl start mysql57 

登录

1
/usr/local/mysql57/bin/mysql --socket=/tmp/mysql57.sock -uroot -p

密码是上文所记录密码bZn9-#?eZ-y.

修复报错

登陆报错信息

1
/usr/local/mysql57/bin/mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

根据官方文档MySQL :: MySQL 5.7 参考手册 :: 2.2 使用通用二进制文件在Unix/Linux上安装MySQL

安装依赖包libncurses.so.5

1
2
sudo apt install libncurses5
sudo apt-mark auto libncurses5

修复mysql57 端口为 0 问题

  1. 停止服务
1
service mysql57 stop
  1. 修改 /usr/local/mysql57/my.cnf
    [mysqld] 下的 skip-grant-tables 注释
1
2
[mysqld]
# skip-grant-tables
  1. 重新启动服务
1
service mysql57 start

安装和配置mysql8.x

下载安装

访问官网MySQL :: Download MySQL Community Server

清华镜像站下载:Index of /mysql/downloads/MySQL-8.0/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

若要下载mysql8.x latest版本

Pasted%20image%2020220616213952.png

注意版本选择为 Generic

Pasted%20image%2020220616214438.png

若要下载历史版本,选择archive

Pasted%20image%2020220519121322.png

注意版本选择为 Generic

Pasted%20image%2020220616214533.png

创建下载目录:~/src,执行如下命令,

1
2
3
4
# 创建文件夹存放下载的文件:  
mkdir ~/src
# 进入文件夹,
cd ~/src
1
2
mkdir mysql
cd mysql

下载**Compressed TAR Archive**

Pasted%20image%2020220616214657.png

下载mysql8.x版本(注意版本选择为 Generic

下载命令如下

1
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.X.XXXX-linux-glibc2.12-x86_64.tar.gz

mysql-8.xxxxxxxxx.tar.gz解压,解压到 /usr/local/mysql80

解压.tar.gz压缩包

1
tar -xzvf mysql-8.X.XXXX-linux-glibc2.5-x86_64.tar.gz /usr/local/mysql80

*.tartar –xvf 解压

1
tar -xvf mysql-8.X.XXXX-linux-glibc2.5-x86_64.tar /usr/local/mysql80

对于默认使用的mysql,应当创建一个指向安装目录的符号链接:

1
ln -s /usr/local/mysql80 /usr/local/mysql

根据官方文档MySQL :: MySQL 8.0 参考手册 :: 2.2 使用通用二进制文件在Unix/Linux上安装MySQL,应当暴露出来环境变量

1
2
# 配置mysql
export PATH=$PATH:/usr/local/mysql/bin

这里的/usr/local/mysql/是符号链接,指向 默认使用的mysql版本

修改必要文件

切换到root用户

1
sudo -s

来到mysq80目录

1
cd /usr/local/mysql80

mysql80 目录下创建一个 my.cnf 文件

1
vim /usr/local/mysql80/my.cnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[client]
# 修改默认端口
port=3308
# mysql80 需要这个
mysqlx_port=33080
socket=/tmp/mysql80.sock
# mysql80 需要这个
mysqlx_socket=/tmp/mysqlx80.sock

[mysqld]
# skip-grant-tables
# mysql安装目录
basedir=/usr/local/mysql80
# mysql数据库目录
datadir=/usr/local/mysql80/data
# 修改默认端口,和上面的端口一致
port=3308
# mysql80 需要这个
mysqlx_port=33080
socket = /tmp/mysql80.sock
# mysql80 需要这个
mysqlx_socket=/tmp/mysqlx80.sock

[mysqld_safe]
# 错误日志
log-error=/usr/local/mysql80/data/error.log
# pid文件
pid-file=/usr/local/mysql80/data/mysqld.pid
tmpdir=/tmp/mysql80

并修改权限

1
chmod 755 /usr/local/mysql80/my.cnf

mysql用户组和用户

见官方文档MySQL :: MySQL 8.0 Reference Manual :: 2.2 Installing MySQL on Unix/Linux Using Generic Binaries

1
2
groupadd mysql 
useradd -r -g mysql -s /bin/false mysql

由于用户仅出于所有权目的而不需要,而不是出于登录目的,因此 useradd 命令使用 和 选项创建对服务器主机没有登录权限的用户。

如果您的 useradd 不支持这些选项,请省略它们。-r``-s /bin/false,如下

1
2
groupadd mysql 
useradd -g mysql mysql

查看结果

1
cat /etc/passwd | grep mysql

输出如下

1
mysql:x:997:1002::/home/mysql:/bin/false

更改目录所有者

1
chown -R mysql:mysql /usr/local/mysql80

查看MySQL8.x安装目录

1
whereis mysql80

如果是手动安装的,那么官方教程一般会将/usr/local/mysql作为安装目录,手动安装的文档见MySQL :: MySQL 8.0 Reference Manual :: 2.2 Installing MySQL on Unix/Linux Using Generic Binaries

初始化

官方文档MySQL :: MySQL 8.0 Reference Manual :: 2.10.1 Initializing the Data Directory

1
cd /usr/local/mysql80
1
bin/mysqld  --defaults-file=/usr/local/mysql80/my.cnf --user=mysql --initialize

会得到一个密码

在这里插入图片描述

记录下这个密码;Rpyfi4ef51w

1
2022-06-17T00:49:15.308131Z 1 [Note] A temporary password is generated for root@localhost: ;Rpyfi4ef51w

添加mysql.service

修改文件 /usr/local/mysql80/support-files/mysql.server 中的如下内容

1
2
3
4
5
6
basedir=/usr/local/mysql80
datadir=/usr/local/mysql80/data
lockdir='/var/lock/subsys'
lock_file_path="$lockdir/mysql80"
mysqld_pid_file_path=/usr/local/mysql80/data/mysqld.pid
conf=/usr/local/mysql80/my.cnf

并将修改后的/usr/local/mysql80/support-files/mysql.server文件复制并重命名为 /etc/init.d/mysql80

1
cp /usr/local/mysql80/support-files/mysql.server /etc/init.d/mysql80

开启mysql服务自启动

1
systemctl enable mysql80.service

启动 mysql 服务

1
systemctl start mysql80 

登录

1
/usr/local/mysql80/bin/mysql --socket=/tmp/mysql80.sock -uroot -p

密码是上文所记录密码;Rpyfi4ef51w

修复报错

登陆报错信息

1
/usr/local/mysql80/bin/mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

根据官方文档MySQL :: MySQL 8.0 参考手册 :: 2.2 使用通用二进制文件在Unix/Linux上安装MySQL

安装依赖包libncurses.so.5

1
2
sudo apt install libncurses5
sudo apt-mark auto libncurses5

修复mysql80 端口为 0 问题

  1. 停止服务
1
service mysql80 stop
  1. 修改 /usr/local/mysql80/my.cnf
    [mysqld] 下的 skip-grant-tables 注释
1
2
[mysqld]
# skip-grant-tables
  1. 重新启动服务
1
service mysql80 start

之后的配置过程

文章只是初始化和进行了初步配置,之后的配置过程见linux配置mysql

参考、引用、致谢

linux 下同时安装 mysql5.7 和 mysql8.0_微&风的博客-CSDN博客