在一个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其他版本。卸载流程:
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清理残留配置数据:
sudo dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
sudo find /etc -name "*mysql*" |xargs rm -rf最后用 dpkg -l | grep mysql 检查,如无返回即干净卸载
dpkg -l | grep mysql安装和初始化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

注意版本选择为 Generic

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

注意版本选择为 Generic

创建下载目录:~/src,执行如下命令,
# 创建文件夹存放下载的文件:
mkdir ~/src
# 进入文件夹,
cd ~/srcmkdir mysql
cd mysql下载**Compressed TAR Archive**

下载命令如下
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压缩包
tar -xzvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz /usr/local/mysql57*.tar 用 tar –xvf 解压
tar -xvf mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar /usr/local/mysql57对于默认使用的mysql,应当创建一个指向安装目录的符号链接:
ln -s /usr/local/mysql57 /usr/local/mysql根据官方文档MySQL :: MySQL 5.7 参考手册 :: 2.2 使用通用二进制文件在Unix/Linux上安装MySQL,应当暴露出来环境变量
# 配置mysql
export PATH=$PATH:/usr/local/mysql/bin这里的/usr/local/mysql/是符号链接,指向 默认使用的mysql版本
修改必要文件
切换到root用户
sudo -s来到mysq57目录
cd /usr/local/mysql57mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files在mysql57 目录下创建一个 my.cnf 文件
vim /usr/local/mysql57/my.cnf[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并修改权限
chmod 755 /usr/local/mysql57/my.cnfmysql用户组和用户
见官方文档MySQL :: MySQL 5.7 Reference Manual :: 2.2 Installing MySQL on Unix/Linux Using Generic Binaries
groupadd mysql
useradd -r -g mysql -s /bin/false mysql由于用户仅出于所有权目的而不需要,而不是出于登录目的,因此 useradd 命令使用 和 选项创建对服务器主机没有登录权限的用户。
如果您的 useradd 不支持这些选项,请省略它们。-r``-s /bin/false,如下
groupadd mysql
useradd -g mysql mysql查看结果
cat /etc/passwd | grep mysql输出如下
mysql:x:997:1002::/home/mysql:/bin/false更改目录所有者
chown -R mysql:mysql /usr/local/mysql57查看MySQL5.x安装目录
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
cd /usr/local/mysql57bin/mysqld --defaults-file=/usr/local/mysql57/my.cnf --user=mysql --initialize会得到一个密码

记录下这个密码bZn9-#?eZ-y.
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 中的如下内容
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
cp /usr/local/mysql57/support-files/mysql.server /etc/init.d/mysql57开启mysql服务自启动
systemctl enable mysql57.service启动 mysql 服务
systemctl start mysql57登录
/usr/local/mysql57/bin/mysql --socket=/tmp/mysql57.sock -uroot -p密码是上文所记录密码bZn9-#?eZ-y.
修复报错
登陆报错信息
/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
sudo apt install libncurses5
sudo apt-mark auto libncurses5修复mysql57 端口为 0 问题
- 停止服务
service mysql57 stop- 修改
/usr/local/mysql57/my.cnf将[mysqld]下的skip-grant-tables注释
[mysqld]
# skip-grant-tables- 重新启动服务
service mysql57 start安装和配置mysql8.x
下载安装
访问官网MySQL :: Download MySQL Community Server
清华镜像站下载:Index of /mysql/downloads/MySQL-8.0/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
若要下载mysql8.x latest版本

注意版本选择为 Generic

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

注意版本选择为 Generic

创建下载目录:~/src,执行如下命令,
# 创建文件夹存放下载的文件:
mkdir ~/src
# 进入文件夹,
cd ~/srcmkdir mysql
cd mysql下载**Compressed TAR Archive**

下载mysql8.x版本(注意版本选择为 Generic)
下载命令如下
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压缩包
tar -xzvf mysql-8.X.XXXX-linux-glibc2.5-x86_64.tar.gz /usr/local/mysql80*.tar 用 tar –xvf 解压
tar -xvf mysql-8.X.XXXX-linux-glibc2.5-x86_64.tar /usr/local/mysql80对于默认使用的mysql,应当创建一个指向安装目录的符号链接:
ln -s /usr/local/mysql80 /usr/local/mysql根据官方文档MySQL :: MySQL 8.0 参考手册 :: 2.2 使用通用二进制文件在Unix/Linux上安装MySQL,应当暴露出来环境变量
# 配置mysql
export PATH=$PATH:/usr/local/mysql/bin这里的/usr/local/mysql/是符号链接,指向 默认使用的mysql版本
修改必要文件
切换到root用户
sudo -s来到mysq80目录
cd /usr/local/mysql80在mysql80 目录下创建一个 my.cnf 文件
vim /usr/local/mysql80/my.cnf[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并修改权限
chmod 755 /usr/local/mysql80/my.cnfmysql用户组和用户
见官方文档MySQL :: MySQL 8.0 Reference Manual :: 2.2 Installing MySQL on Unix/Linux Using Generic Binaries
groupadd mysql
useradd -r -g mysql -s /bin/false mysql由于用户仅出于所有权目的而不需要,而不是出于登录目的,因此 useradd 命令使用 和 选项创建对服务器主机没有登录权限的用户。
如果您的 useradd 不支持这些选项,请省略它们。-r``-s /bin/false,如下
groupadd mysql
useradd -g mysql mysql查看结果
cat /etc/passwd | grep mysql输出如下
mysql:x:997:1002::/home/mysql:/bin/false更改目录所有者
chown -R mysql:mysql /usr/local/mysql80查看MySQL8.x安装目录
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
cd /usr/local/mysql80bin/mysqld --defaults-file=/usr/local/mysql80/my.cnf --user=mysql --initialize会得到一个密码

记录下这个密码;Rpyfi4ef51w
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 中的如下内容
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
cp /usr/local/mysql80/support-files/mysql.server /etc/init.d/mysql80开启mysql服务自启动
systemctl enable mysql80.service启动 mysql 服务
systemctl start mysql80登录
/usr/local/mysql80/bin/mysql --socket=/tmp/mysql80.sock -uroot -p密码是上文所记录密码;Rpyfi4ef51w
修复报错
登陆报错信息
/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
sudo apt install libncurses5
sudo apt-mark auto libncurses5修复mysql80 端口为 0 问题
- 停止服务
service mysql80 stop- 修改
/usr/local/mysql80/my.cnf将[mysqld]下的skip-grant-tables注释
[mysqld]
# skip-grant-tables- 重新启动服务
service mysql80 start之后的配置过程
文章只是初始化和进行了初步配置,之后的配置过程见linux配置mysql