系列文章目录
《【MySQL】第一章 MySQL 5.7的安装与卸载》
《【MySQL】第二章 初识数据库》
《【MySQL】第三章 库的操作》
《【MySQL】第四章 表的操作》
《【MySQL】第五章 数据类型》
文章目录
Ubuntu-20.04
卸载MySQL 5.7
停止服务进程
sudo systemctl stop mariadb
sudo systemctl stop mysql
查找已安装软件包
dpkg -l | grep mariadb # 查找与 mariadb 相关的软件包
dpkg -l | grep mysql # 查找与 mysql 相关的软件包
拓展:命令解析
dpkg
:全称“Debian Packager”,它是一个专门为“Debian”系统开发的包管理工具。dpkg -l
:列出系统中安装的所有软件包。| grep mariadb
:筛选出包含关键字mariadb
的软件包信息。| grep mysql
:筛选出包含关键字mysql
的软件包信息。
拓展:卸载 MySQL 为何涉及到 MariaDB ?
MySQL 和 MariaDB 是关系数据库管理系统,MariaDB 是 MySQL 的一个分支(fork)。
两者有高度的兼容性,因此可能在以下情况下导致两者关联:
- 库和工具的共享:
- MariaDB 和 MySQL 使用了许多相同的库(如
libmysqlclient
)。- 卸载 MySQL 的过程中会检查依赖关系,当发现某些库或工具也被 MariaDB 使用时会导致卸载失败。
- 包管理的冲突或替代关系:
- 在一些发行版中,MariaDB 包被标记为替代 MySQL 的默认实现
- 例如,安装
mysql-server
时,系统可能实际安装的是mariadb-server
。- 因此,卸载 MySQL 时可能会影响与之相关的 MariaDB 包。
- 配置文件和服务的重叠:
- 两者可能会使用相同的配置目录(如
/etc/mysql
)。- 卸载 MySQL 时可能会尝试清理这些目录,导致与 MariaDB 的交集。
删除相关软件包
dpkg -l | grep mariadb | awk '{print $2}' | sudo xargs dpkg -P # 删除 mariadb 相关的软件包
dpkg -l | grep mysql | awk '{print $2}' | sudo xargs dpkg -P # 删除 mysql 相关的软件包
拓展:命令解析
awk '{print $2}'
:
awk
:一个根据指定规则提取和处理文本内容的处理工具。'{print $2}'
**:**截取输出信息的第二列,因为第二列是软件包名称。sudo xargs dpkg -P
:
xargs
:读取标准输入的每一行,将其作为参数传递给后面的命令。dpkg -P
:-P
参数,用于完全删除指定的软件包及其所有配置文件(purge)。sudo
:卸载系统软件包通常需要管理员权限。
命令执行过程中有弹窗提示是否【删除数据目录】,如果没有重要的数据的话可以选择【Yes】。
有时候可以会因为依赖问题导致一些软件包无法被删除,举个例子,像下面的代码块,发现还有残留。
LJH@iZ7xvhuhaslv4h5dm1d1svZ:~$ dpkg -l | grep mysql # 查找与 mysql 相关的软件包
pi libmysqlclient21:amd64 8.0.28-0ubuntu0.20.04.3 amd64 MySQL database client library
pi mysql-common 5.8+1.0.5ubuntu2 all MySQL database common files, e.g. /etc/mysql/my.cnf
** 这时候可以使用 apt-get
的 autoremove
命令来手动强制清除依赖包。**
# sudo apt-get autoremove --purge <软件包名称>
sudo apt-get autoremove --purge mysql-common libmysqlclient21
删除相关文件
- 删除数据文件
sudo find /var -name '*mysql*' | sudo xargs rm -rf
拓展:命令解析
- MySQL 默认将
/var
目录作为库表数据存储目录。sudo find /var -name '*mysql*'
:这句命令是使用find
工具搜索/var
目录下所有名字包含"mysql"
的文件并罗列出来。sudo xargs rm -rf
:将所有名字含mysql
的文件逐一删除。
- 删除配置文件
# 1. 查看配置文件是否存在
ls /etc/my.cnf
ls /etc/mysql
# 2. 使用 rm 将找到的配置文件删除
安装
下载 MySQL 的 APT 源
wget http://repo.mysql.com/mysql-apt-config_0.8.12-1_all.deb
拓展:命令解析
- wget
wget
是一个非交互式命令行工具,用于从网络上下载文件。- 它支持 HTTP、HTTPS 和 FTP 等协议。
- 在此处,
wget
被用来从 MySQL 的官方镜像站点下载一个.deb
文件。http://repo.mysql.com/mysql-apt-config_0.8.12-1_all.deb
这是文件的下载链接,包含以下信息:
- 协议:
http://
表示使用 HTTP 协议。- 主机名:
repo.mysql.com
是 MySQL 官方的包管理仓库。- 路径:
/mysql-apt-config_0.8.12-1_all.deb
是指定文件的路径。- 文件名:
mysql-apt-config_0.8.12-1_all.deb
是下载的文件名。mysql-apt-config_0.8.12-1_all.deb
- 文件名称:
mysql-apt-config_0.8.12-1_all.deb
- 文件类型:
.deb
是 Debian 系列 Linux 发行版的安装包格式(如 Ubuntu)。- 用途:
mysql-apt-config
是一个 MySQL 官方提供的配置包,这个文件会配置系统中的 MySQL APT 源,从而让用户可以通过apt-get
安装和更新 MySQL 软件。- 命令作用
- 从 MySQL 官方仓库下载
mysql-apt-config
配置文件。- 准备为系统配置 MySQL 的 APT 软件源。
配置 MySQL 的 APT 源
sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb
选择【ubuntu bionic】
选择【MySQL Server & Cluster (Currently selected: mysql-8.0)】
选择【mysql-5.7】
选择【OK】
更新软件包索引
sudo apt-get update
拓展:为什么要更新包索引?
.deb
包安装后发生了什么?
安装mysql-apt-config_0.8.12-1_all.deb
包时,dpkg
的主要作用是:
- 解压
.deb
文件,将相关文件(比如 APT 仓库的配置文件)拷贝到系统指定位置。- 配置文件通常会被写入
/etc/apt/sources.list.d/
,比如mysql.list
文件,其中包含 MySQL 的 APT 仓库地址及其下载方法。.deb
包只是在系统中注册了新的仓库地址,本身不会直接触发系统下载新的包索引。- 为什么需要更新包索引?
APT 使用的包索引是本地的一个缓存数据库,记录了所有可用的软件包信息,包括:
- 每个包的名称、版本号、依赖关系。
- 它们在远程仓库中的位置(URL)。
安装
.deb
本地的包索引数据库还没有包含来自这个新仓库的信息。运行
sudo apt update
,这会:
- 读取所有配置的仓库地址(包括新添加的 MySQL 仓库)。
- 下载每个仓库的最新包索引,更新本地的包信息。
更细过程中如果遇到如下报错是因为缺少用于验证 MySQL 仓库的 GPG 公钥。
$ sudo apt-get update
Hit:1 http://mirrors.ustc.edu.cn/ubuntu focal InRelease
Hit:2 http://mirrors.ustc.edu.cn/ubuntu focal-updates InRelease
Hit:3 http://mirrors.ustc.edu.cn/ubuntu focal-backports InRelease
Hit:4 http://mirrors.ustc.edu.cn/ubuntu focal-security InRelease
Get:5 http://repo.mysql.com/apt/ubuntu bionic InRelease [20.0 kB]
Err:5 http://repo.mysql.com/apt/ubuntu bionic InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B7B3B788A8D3785C
Reading package lists... Done
W: GPG error: http://repo.mysql.com/apt/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B7B3B788A8D3785C
E: The repository 'http://repo.mysql.com/apt/ubuntu bionic InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
要解决这个问题,可以按照以下步骤添加缺失的公钥。
wget https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
sudo apt-key add RPM-GPG-KEY-mysql-2023
然后重新更新软件包列表。
sudo apt-get update
查看 MySQL 可用版本
sudo apt-cache policy mysql-server
安装 MySQL 服务器和客户端
sudo apt install -f mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libmysqlclient-dev=5.7*
安装过程中会提示需要消耗多少存储空间,输入【Y】确认即可
MySQL 会自动创建 root
用户,然后让你输入 root
用户的密码,输入即可。
配置
MySQL 的相关配置文件都在 /etc/mysql
目录下存放,其中
/etc/mysql/conf.d/mysql.cnf
是 MySQL 客户端对应的配置文件。/etc/mysql/mysql.conf.d/mysqld.cnf
是 MySQL 服务端对应的配置文件。
本次编辑主要是设置一些诸如编码集、校验集、端口、存储引擎等常用配置,可按需求添加。
【客户端】
sudo vim /etc/mysql/conf.d/mysql.cnf # 编辑
# 粘贴以下内容
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
【服务端】
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 编辑
# 粘贴以下内容
[mysqld]
port = 3306
character-set-server = utf8
default-storage-engine = innodb
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
Centos-7.9
卸载
停止服务进程
sudo systemctl stop mariadb
sudo systemctl stop mysql
删除相关软件包
rpm -qa | grep mysql | sudo xargs yum -y remove
拓展:命令解析
rpm -qa
- rpm 全称“Red Hat Package Manager”,是 “Red Hat” 系统的软件包管理工具。
-q
参数:表示查询模式(query)。-a
参数:表示查询所有已安装的包。grep mysql
- 从
rpm -qa
的输出中筛选出包含关键字"mysql"
的行。sudo xargs yum -y remove
xargs
的功能:
- 从标准输入读取数据(即从
grep
的结果中获取包名)。- 将这些数据作为参数传递给后面的命令。
yum -y remove
的功能:
- 使用
yum
命令卸载指定的 RPM 包。-y
表示自动回答 “yes”,无需用户交互。
执行完毕之后要再执行一次 rpm -qa | grep mysql
,确保没有软件包残留。
删除相关文件
- 配置文件
[LJH@iZ7xvhuhaslv4h5dm1d1svZ ~]$ ls /etc/mysql
ls: cannot access /etc/mysql: No such file or directory
[LJH@iZ7xvhuhaslv4h5dm1d1svZ ~]$ ls /etc/my.cnf
ls: cannot access /etc/my.cnf: No such file or directory
- 数据文件
sudo rm -rf /var/lib/mysql
安装
下载 MySQL 的 yum 源
wget https://repo.mysql.com/mysql57-community-release-el7-9.noarch.rpm
拓展:命令解析
- wget
wget
是一个非交互式命令行工具,用于从网络上下载文件。- 它支持 HTTP、HTTPS 和 FTP 等协议。
- 在此处,
wget
被用来从 MySQL 的官方镜像站点下载一个.deb
文件。mysql57-community-release-el7-9.noarch.rpm
MySQL 官方提供的一个仓库配置包的下载链接:
mysql57-community-release
:表示这是为 MySQL 5.7 社区版提供的仓库配置包。el7
:表示该包适用于基于 CentOS/RHEL 7 的 Linux 系统。noarch
:表示这个 RPM 包不依赖于特定的硬件架构(例如 x86 或 ARM),可以在任何架构上使用。.rpm
:RPM 包文件的扩展名,表示这是一个软件包管理文件,常用于 Red Hat 系列系统(如 CentOS 和 Fedora)。- 命令作用
- 从 MySQL 官方网站下载一个 RPM 包。
- RPM 包本身并不是 MySQL 本身,而是用于配置 MySQL 的 YUM 源。
- 下载完成后,安装这个 RPM 包会自动在系统中添加 MySQL 5.7 的软件仓库信息。
- 添加仓库后可以使用
yum install
或dnf install
命令安装 MySQL 相关的软件包。
安装 MySQL 的 yum 源
sudo rpm -ivh mysql57-community-release-el7-9.noarch.rpm
【warning】表示缺少 RPM 包的数字签名。
解决问题的方法是执行以下命令导入 MySQL 的官方 GPG 密钥,然后重新安装。
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 # 导入公钥
sudo rpm -ivh mysql57-community-release-el7-9.noarch.rpm # 重新安装
安装 MySQL
sudo yum install -y mysql-community-server
验证是否安装成功
- 配置文件
ls /etc/my*
# 输出以下信息说明配置文件存在
/etc/my.cnf
/etc/my.cnf.d:
- MySQL 服务端
which mysqld
# 输出以下信息说明 MySQL 服务端存在
/usr/sbin/mysqld
- 客户端
which mysql
# 输出以下信息说明 MySQL 客户端存在
/usr/sbin/mysql
MySQL 服务端的启动、关闭
- 启动:
sudo systemctl start mysqld
- 重启:
sudo systemctl restart mysqld
- 关闭:
sudo systemctl stop mysqld
- 状态查看:
sudo systemctl status mysqld
配置免密码登录 MySQL
在 Centos-7.9 安装 MySQL-5.7 时,系统会自动为 root 用户自动生成一个临时密码。
登录 MySQL 时,我们要输入这个临时密码,但是比较尴尬的是我们有不知道这个临时密码是什么。
为了解决这个尴尬的问题,接下来修改配置文件,进行免密码处理。
sudo vim /etc/my.cnf # 编辑 MySQL 的配置文件
在图示位置加上【skip-grant-tables】
sudo systemctl restart mysqld # 重启 MySQL 服务端
mysql -u root -p # 登录 MySQL 客户端
配置
编辑 MySQL 的配置文件。
sudo vim /etc/my.cnf
按照图示新增内容即可。
保存退出后,重启 MySQL 服务端使配置生效。
sudo systemctl restart mysqld # 重启 MySQL