手动使用deb文件安装任意版本mysql

上一级页面:mysql安装配置-linux

前言

使用deb文件可以安装任何版本的mysql,但它会对系统的apt更新流程造成问题,并阻塞其他应用的依赖设置,推荐更加合适的手动安装方法,见在一个linux主机安装多个版本的mysql

下载安装

官网下载: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

选择deb bundle

Pasted%20image%2020220616214039.png

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

Pasted%20image%2020220519121322.png

选择deb bundle

Pasted%20image%2020220616214039.png

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

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

下载Bundle(mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar)

1
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar

–解压压缩包.tar.gz

1
tar -xzvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz

*.tartar –xvf 解压

1
tar -xvf mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar

Pasted%20image%2020220616211933.png

最小需要安装:

  • mysql-community-clientmysql-community-server

  • mysql-client mysql-servermysql-common

  • 如果需要mysqld(随系统自启动服务),需要安装对应包mysqld

  • 如果IDE连接数据库,还需要dev包,

所以可以首先删除不需要安装的包,如testsource

然后使用dpkg进行安装,安装其余包

1
sudo dpkg -i *.deb 

发现依赖不全

1
apt --fix-broken install

会安装比如

1
libmecab2 libtinfo5

然后重新安装一遍

1
sudo dpkg -i *.deb 

安装完成

mysql配置文件读取顺序

官方文档:MySQL :: MySQL 5.7 Reference Manual :: 4.2.2.2 Using Option Files

官方给出的读取顺序如下

Pasted%20image%2020220519142124.png

按照官方文档所述,最高优先级应当读取/etc/my.cnf

配置my.cnf

发现安装目录/usr/share/mysql下,没有support-files 目录my-default.cnf

5.7.18版本以前,需要手动拷贝my-default.cnf/etc/my.cnf来完成配置文件的初始化

但注意到:从5.7.18开始不在二进制包中提供my-default.cnf文件。参考:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

经过测试,在5.7.18版本中,使用tar.gz安装时,也就是压缩包解压出来dpkg安装这种,已经不再需要my.cnf文件也能正常运行。

my.cnf文件就是把在命令行上启动MySQL时后面的参数用cnf文件配置好,那么启动时就不再需要在命令后跟上参数。

所以:安装mysql5.7.18之后的版本就不再需要/etc/my.cnf了,

但是如果需要开启MySQL的慢查询,或者是主从复制的功能,还是需要在/etc下面配置my.cnf文件的,但是只需要复制跟自己使用功能相关的配置即可没必要全部复制

由于在5.7.18开始,二进制包不再包含示例文件my-default.cnf,

所以我从5.7.17版本中提取了样例,但是发现里面也没有太多项配置,默认my-default.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
30
31
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

所以,我们可以自己创建一个my.cnf,修改配置文件

1
sudo vim /etc/my.cnf

主要修改里面的basedirdatadir,内容和前面mysqld --initialize时的参数一致

全文为

1
2
3
4
5
[mysqld]
basedir = /usr
datadir = /var/lib/mysql
port = 3306
server_id = 22206

初始化mysqld 指定mysql的basedir datadir

切换到 root用户

1
sudo -s

重启已有的mysql服务,

1
systemctl restart mysql.service

官方文档MySQL :: MySQL 5.7 参考手册 :: 2.10.1 初始化数据目录

10903463-bab9e0bf4f42c3e3.png.webp

执行命令初始化 :初始化会创建一个root用户,如果以前已经运行过这个命令,或者使用deb文件安装的,则可以跳过这步

1
mysqld --initialize --user=mysql

有关mysqld --initialize命令的重要信息,尤其是有关可能使用的命令选项的信息,请参见数据目录初始化过程。有关服务器如何执行初始化的详细信息,请参阅数据目录初始化期间的服务器操作

通常,只有在首次安装MySQL后,才需要完成数据目录初始化。(要升级到现有安装,请改为执行升级过程;请参见第 2.11 节 “升级 MySQL”。但是,初始化数据目录的命令不会覆盖任何现有的数据库表,因此在任何情况下都可以安全地运行。mysql

1277635-20200219142849094-718923240.png

如果 mysqld 无法识别安装目录或数据目录的正确位置,则可能需要指定其他选项basedir``data-dir

1
bin/mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql

此处需要注意,记住参数,后文用到

1
2
basedir=/usr
datadir=/var/lib/mysql

这里的basedir和datadir都是deb安装的默认值,可以记一下

成功后,会生成data目录并生成root用户 (默认datadir=/var/lib/mysql

10903463-f345773bc27f6ae5.png.webp

如何修复 Linux 中的“MySQL 错误 1819 (HY000):” (tecmint.com)

配置mysql自动启动

给与可执行权限

1
chmod +x /etc/init.d/mysql  

也可以选择使用systemctl配置其自启动

1
2
sudo systemctl enable mysql.searvice
sudo systemctl start mysql

启动mysql

1
sudo systemctl start mysql

登陆mysql

1
mysql -hlocalhost -uroot -p

报错解决

如果出现:

1
-bash: mysql: command not found

就执行:

1
whereis mysql

Pasted%20image%2020220611114129.png

查看mysql可执行文件在哪,然后创建一个符号链接

1
ln -s path/to/mysql /usr/bin/mysql

参考、引用、致谢