在一个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 |
|
清理残留配置数据:
1 | sudo dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P |
最后用 dpkg -l | grep mysql
检查,如无返回即干净卸载
1 | 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
,执行如下命令,
1 | 创建文件夹存放下载的文件: |
1 | mkdir mysql |
下载**Compressed TAR Archive**
下载命令如下
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 |
*.tar
用 tar –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 | # 配置mysql |
这里的/usr/local/mysql/
是符号链接,指向 默认使用的mysql版本
修改必要文件
切换到root用户
1 | sudo -s |
来到mysq57
目录
1 | cd /usr/local/mysql57 |
1 | mkdir mysql-files |
在mysql57
目录下创建一个 my.cnf
文件
1 | vim /usr/local/mysql57/my.cnf |
1 | [client] |
并修改权限
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 | groupadd mysql |
由于用户仅出于所有权目的而不需要,而不是出于登录目的,因此 useradd 命令使用 和 选项创建对服务器主机没有登录权限的用户。
如果您的 useradd 不支持这些选项,请省略它们。-r``-s /bin/false
,如下
1 | groupadd 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 | basedir=/usr/local/mysql57 |
并将修改后的/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 | sudo apt install libncurses5 |
修复mysql57 端口为 0 问题
- 停止服务
1 | service mysql57 stop |
- 修改
/usr/local/mysql57/my.cnf
将[mysqld]
下的skip-grant-tables
注释
1 | [mysqld] |
- 重新启动服务
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版本
注意版本选择为 Generic
若要下载历史版本,选择archive
注意版本选择为 Generic
创建下载目录:~/src
,执行如下命令,
1 | 创建文件夹存放下载的文件: |
1 | mkdir mysql |
下载**Compressed TAR Archive**
下载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 |
*.tar
用 tar –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 | # 配置mysql |
这里的/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 | [client] |
并修改权限
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 | groupadd mysql |
由于用户仅出于所有权目的而不需要,而不是出于登录目的,因此 useradd 命令使用 和 选项创建对服务器主机没有登录权限的用户。
如果您的 useradd 不支持这些选项,请省略它们。-r``-s /bin/false
,如下
1 | groupadd 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 | basedir=/usr/local/mysql80 |
并将修改后的/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 | sudo apt install libncurses5 |
修复mysql80 端口为 0 问题
- 停止服务
1 | service mysql80 stop |
- 修改
/usr/local/mysql80/my.cnf
将[mysqld]
下的skip-grant-tables
注释
1 | [mysqld] |
- 重新启动服务
1 | service mysql80 start |
之后的配置过程
文章只是初始化和进行了初步配置,之后的配置过程见linux配置mysql