Ubuntu 18 以后的 Ubuntu Linux 版本不再默认支持 Mysql 5.x ,偏偏一些应用要求必须 使用 Mysql 5.x 。虽然网上早就有无数文章指导用 .deb 包方式切换安装成 Mysql 5.7 ,但是需要 安装一大堆 依赖包,必然导致系统臃肿 和 “不清爽” ,并且 共存Mysql5.7、MySQL8.0、Maridb 是一个很大的麻烦。因此研究了一下,成功用 .tar.gz 压缩包方式(官方编译好的二进制程序),清爽的安装到 Ubuntu 20.4 中,与原有的其它类型、其它版本数据库系统毫不冲突,各干各的。
1、压缩包官方下载地址(官方编译好的二进制程序):
https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
执行命令行:
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
下面全部动作在 root 权限下执行
2、解压在某个安装目录,例如 : /opt
tar xzf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz -C /opt/
得到目录:
/opt/mysql-5.7.34-linux-glibc2.12-x86_64
3、链接到 /usr/local/ 目录下,修改权限
ln -s /opt/mysql-5.7.34-linux-glibc2.12-x86_64 /usr/local/mysql57
cd /usr/local/mysql57
chown mysql:mysql . -R
4、创建数据库文件存放的目录:
mdir /var/lib/mysql57-data
chown mysql:mysql /var/lib/mysql57-data -R # 授权拥有者为 mysql
5、创建 my.cnf 文件,在 /usr/local/mysql57 目录下。
文件内容如下:
# This is Mysql 5.7 configure file , Installed to /usr/local/mysql57
# /usr/local/mysql57/my.cnf
[mysqld]
user = mysql
# 这里需要与本机原有的 Mysql8、MariaDB 错开
pid-file = /var/run/mysqld/mysqld57.pid
# 这里需要与本机原有的 Mysql8、MariaDB 错开
socket = /var/run/mysqld/mysqld57.sock
# 端口号需要与本机的其它数据库 系统错开
port = 3308
# bind-address = 0.0.0.0
basedir = /usr/local/mysql57
# 这是自建的 数据库文件存放目录
datadir = /var/lib/mysql57-data
tmpdir = /tmp
# 这是 Mysql 5.7 专用的共享库
lc-messages-dir = /usr/local/mysql57/share
# skip-external-locking
# skip-grant-tables
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
query_cache_size = 16M
log_error = /var/log/mysql/mysql57_error.log
[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
default-character-set = utf8mb4
# socket location
# 这里必须与上面服务器端 socket = 相同
socket = /var/run/mysqld/mysqld57.sock
6、初始化数据库
ln -s /usr/local/mysql57/my.cnf /etc/mysql/mysql57.cnf
/usr/local/mysql57/bin/mysqld --defaults-file= /etc/mysql/mysql57.cnf --initialize --console
查看文件 /var/log/mysql/mysql57_error.log ,找到以下文字,其中最后一串字符是 数据库管理员 root 临时密码 :
2021-08-14T05:36:45.092790Z 1 [Note] A temporary password is generated for root@localhost: DwDyJQ*7pwx+ <----这是临时密码
记录下这个临时密码,待会要用到。
7、创建 mysql 命令行客户端的 mysql 5.7 专版
新建、编辑文件 mysql57 放在 /usr/local/mysql57/bin/ 下
创建文件 /usr/local/mysql57/bin/mysql57
文件内容:
# 脚本文件: /usr/local/mysql57/bin/mysql57
/usr/local/mysql57/bin/mysql --defaults-file=/usr/local/mysql57/my.cnf $1 $2 $3 $4$5 $6 $7 $8 $9 $10
保存, 授权执行和链接:
chmod a+x /usr/local/mysql57/bin/mysql57
ln -s /usr/local/mysql57/bin/mysql57 /usr/bin/mysql57
至此 得到 mysql 5.7 专用的命令行客户端 mysql57 命令
8、运行数据库服务器,修改 root 密码 :
开另一个新终端窗口用 (或者用 tmux 终端壳工具 ),用 root 权限运行:
/usr/local/mysql57/bin/mysqld --defaults-file= /etc/mysql/mysql57.cnf &
回到刚才的终端窗口,执行修改数据库 root 密码:
mysql57 -u root -p
输入刚才记下的临时密码,进入数据库
查看 数据库列表: show databases;
如果屏幕打印出数据库列表,证明正常工作了。
修改root 密码:
ALTER USER ‘root‘@‘localhost‘ IDENTIFIED BY ‘新的密码’;
FLUSH PRIVILEGES; # 刷新及重新加载权限
9、配置开机启动 第一步
创建文件:/usr/lib/systemd/system/mysql57.service , 编写内容如下 (记得保存):
# 文件 /usr/lib/systemd/system/mysql57.service 的内容
[Unit]
Description=MySQL5.7.34 database server
Documentation=man:mysqld(8)
Documentation=https://downloads.mysql.com/archives/community/
After=network.target
[Install]
WantedBy=multi-user.target
Alias=mysql57.service
# Alias=mysqld.service
[Service]
PrivateNetwork=false
User=mysql
Group=mysql
Type=forking
ExecStart=/usr/local/mysql57/bin/mysql57-server.sh
TimeoutSec=5
RemainAfterExit=yes
GuessMainPID=no
ExecStop=/usr/bin/killall /usr/local/mysql57/bin/mysqld
10、创建文件 /usr/local/mysql57/bin/mysql57-server.sh ,编写 内容如下:
#!/usr/bin/sh
# 文件 /usr/local/mysql57/bin/mysql57-server.sh 的内容
if [ ! -e /var/run/mysqld/mysqld57.sock -o ! -e /var/run/mysqld/mysqld57.pid ]
then
/usr/local/mysql57/bin/mysqld --defaults-file=/usr/local/mysql57/my.cnf &
else
echo MySQL 5.7 is already up and running.....
fi
exit 0
执行命令:
chmod a+x /usr/local/mysql57/bin/mysql57-server.sh # 授权 执行
ln -s /usr/local/mysql57/bin/mysql57-server.sh /usr/bin/mysql57-server
killall /usr/local/mysql57/bin/mysqld # 杀掉原来已经运行的 mysql5.7 ,便于待会测试“服务”形式
systemctl daemon-reload # 重载 systemd
systemctl enable mysql57 # 设为开机自动启动
systemctl start mysql57 # 启动 mysql 5.7 服务
这时 已经运行 Mysql 5.7 数据库服务,证实方法:
ps -ef | grep mysql57
# 如果出现下面内容,表示已经成功运行
mysql 759309 1 11 17:53 pts/0 00:00:00 /usr/local/mysql57/bin/mysqld --defaults-file=/usr/local/mysql57/my.cnf
11、应用程序使用本数据库的方法有多种:
a、连接 3308 端口,
b、本机命令行客户端 mysql57
c 、使用管道或者套接字:
pid-file = /var/run/mysqld/mysqld57.pid
socket = /var/run/mysqld/mysqld57.sock
总结
通过以上方法,能让 Mysql 5.7 服务相对独立的运行起来,不需要给系统增加依赖包的负担,避免“污染” Linux 系统的 “纯净”,还可以举一反三的 部署很多个不同的数据库实例。