在一个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 ~/src
mkdir 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/mysql57
mkdir 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.cnf
mysql用户组和用户
见官方文档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/mysql57
bin/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 ~/src
mkdir 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.cnf
mysql用户组和用户
见官方文档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/mysql80
bin/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