MySQL在Ubuntu 20.04 环境下的卸载与安装
目录
前言:学习引入
1、安装注意事项
2、学习建议
3、MySQL 和 MariaDB
核心概念一:它们是什么?
核心概念二:它们如何工作?(“仓库”比喻)
核心概念三:为什么它们如此流行?
MySQL 和 MariaDB 如何选择?
一、首先查看当前云服务器中是否有MySQL或MariaDB服务
详细解释如下:
二、此时我们切换为超级用户
三、然后再停止运行中的MySQL或MariaDB服务
四、检查系统安装包(dpkg -l | grep 名称命令)
1、第一部分:dpkg -l
2、第二部分:| grep 名称
3、命令组合:dpkg -l | grep 名称
4、与 rpm -qa 命令的区别
5、简单总结
6、检查MySQL或MariaDB的系统安装包
详细解释
总结当前状态
五、卸载这些默认安装包
分步讲解
1. dpkg -l
2. grep mysql
3. xargs apt -y remove
整个命令链的流程可以理解为:
一个简单的模拟示例
卸载后的操作
六、获取MySQL官方APT源
1、首先确认系统版本
2、下载MySQL APT配置仓库包(两种方式)
3、安装MySQL APT仓库配置包
4、安装MySQL APT源,对比前后APT源
1. 安装前:查看现有的 APT 源列表
2. 安装 MySQL APT 配置包
3. 更新 APT 缓存
4. 安装后:检查是否添加了 MySQL 的 APT 源
5. (可选)安装 MySQL
5、看看能不能正常工作
详细解释
七、安装mysql服务
八、查看配置文件和数据存储位置
1、查看 MySQL 配置文件位置
2、查看数据文件存储位置
3、查找 MySQL 相关可执行文件的安装位置
1. which mysqld
2. which mysql
这些信息告诉你:
相关的重要命令位置:
我们可以进一步验证:
九、启动和查看 MySQL 服务
1、启动 MySQL 服务
2、查看 MySQL 服务状态
3、设置开机自启
4、查看 MySQL 进程
十、登录方法
1、登录方法一【获取临时密码】
1. 查看密码验证组件
2. 降低密码要求(MySQL 5.7)
3. 卸载密码验证插件
4. 修改 root 密码
MySQL 5.7 vs MySQL 8.0+ 的区别:
MySQL 5.7:
MySQL 8.0+:
2、如果找不到临时密码,尝试方法二【直接登录】(我的这个可以)
3、登录方法三【使用 skip-grant-tables】
4、相较于Centos,Ubuntu的重要区别
5、完成后记得
十一、设置 MySQL 开机启动(可以不设置)
1、设置 MySQL 开机启动
2、重新加载 systemd 配置
3、Ubuntu 与 CentOS 的对比
4、完整的服务管理命令
5、验证设置结果
6、注意
十二、配置 MySQL 配置文件
1、Ubuntu 中 MySQL 配置文件的路径
2、配置字符编码和存储引擎
编辑配置文件:
3、配置完成后重启 MySQL
4、验证配置是否生效
5、重要说明
前言:学习引入
1、安装注意事项
- 安装和卸载过程中,请全程使用 root 用户操作
- 安装完成后,普通用户也可以正常使用 MySQL
2、学习建议
- 初期练习阶段,建议直接使用 root 账户操作 MySQL
- 先集中精力掌握基本的 MySQL 语句
- 待熟悉基础操作后,再学习用户管理相关内容
- 后期可根据实际需求创建普通用户
3、MySQL 和 MariaDB
我们可以把它们理解为一个非常流行、高效且可靠的“数据管家”。它们是一种关系型数据库管理系统(RDBMS),专门负责帮你存储、管理和获取结构化的数据。
核心概念一:它们是什么?
-
MySQL: 最初由一家瑞典公司开发,后来被 Sun Microsystems 收购,Sun 又被 Oracle(甲骨文)收购。所以现在 MySQL 归 Oracle 所有。它是世界上最流行的开源数据库之一,拥有庞大的用户社区和丰富的生态系统。
-
MariaDB: 由 MySQL 的原始创始人开发。当年 Oracle 收购 MySQL 后,出于对 MySQL 闭源和控制的担忧,MySQL 之父 Michael Widenius 带领团队创建了 MariaDB。MariaDB 被设计为 MySQL 的一个完全兼容的替代品(就像换了发动机但外壳和操作方式完全一样的车)。
简单来说,MariaDB 是 MySQL 的一个分支(Fork),并且目标是保持兼容性,同时加入更多创新和开源承诺。
核心概念二:它们如何工作?(“仓库”比喻)
想象一个巨大的智能仓库:
-
数据库(Database): 就是这个仓库本身。你可以在里面建立多个货架区来存放不同类别的货物。
-
表(Table): 仓库里的一个货架区。比如,一个“用户信息”区,一个“商品列表”区。
-
列(Column): 每个货架区都有固定的货架格,规定了存放货物的属性。例如,在“用户信息”货架区,有“用户名”、“密码”、“邮箱”这几个货架格。这定义了数据的结构。
-
行(Row): 货架上的一件具体货物。比如,在“用户信息”区的一行,就对应一个真实用户的全部信息(e.g., 用户A,密码123,abc@email.com)。
-
SQL(结构化查询语言): 你与仓库管理员(MySQL/MariaDB)沟通的指令。你用这种语言告诉管理员:
-
“帮我存一件新货物” (
INSERT
) -
“帮我找出所有价格大于100的商品” (
SELECT ... WHERE ...
) -
“把用户A的电话号码更新一下” (
UPDATE
) -
“把已经下架的商品都扔掉” (
DELETE
)
-
核心概念三:为什么它们如此流行?
-
开源免费: 社区版可以免费使用和修改,这降低了成本并促进了社区发展。
-
性能卓越: 处理速度很快,尤其适合Web应用,能够高效处理大量的读写请求。
-
简单易用: 相对于一些大型商业数据库(如Oracle),它更容易安装、学习和使用。
-
功能丰富: 支持事务、外键约束、存储过程、触发器等高级功能,能满足绝大多数应用的需求。
-
生态强大: 有大量的图形化管理工具(如 phpMyAdmin, MySQL Workbench)、编程语言接口(PHP, Python, Java等)和开源项目(如 WordPress, Magento)都支持它。
-
社区支持: 拥有非常活跃的社区,遇到问题很容易找到解决方案。
MySQL 和 MariaDB 如何选择?
对于绝大多数初学者和新项目来说,两者几乎没有区别。它们的语法、命令、接口在基本层面是完全一致的。
-
选择 MariaDB: 如果你更看重完全的开源精神、由社区主导而非商业公司,或者你使用的Linux发行版(如Debian, CentOS)默认就切换到了MariaDB。
-
选择 MySQL: 如果你所处的公司或环境历史悠久,一直使用Oracle旗下的MySQL,或者某些特定商业套件(如Oracle自己的产品线)对其有优化和支持。
好消息是:因为你学会了其中一个,就等同于学会了另一个。你的知识和SQL语句可以无缝迁移。
一、首先查看当前云服务器中是否有MySQL或MariaDB服务
ps axj|grep mysql
ps axj|grep mariadb
根据输入命令的输出结果,可以看到我这个服务器上没有运行中的MySQL或MariaDB服务。MySQL 和 MariaDB 的服务目前都没有启动。
详细解释如下:
1、ps axj|grep mysql
这个命令用于查找所有名称中包含 "mysql" 的进程。
-
输出结果中只有
grep --color=auto mysql
这一行,这恰恰是您刚才运行的grep
命令本身,而不是一个MySQL服务器进程。 -
这说明系统进程列表中没有名为
mysql
或mysqld
的进程在运行。
2、ps axj|grep mariadb
这个命令用于查找所有名称中包含 "mariadb" 的进程。
-
同样,输出结果中只有
grep --color=auto mariadb
这一行,是您刚才运行的grep
命令本身。 -
这说明系统进程列表中没有名为
mariadb
的进程在运行。
二、此时我们切换为超级用户
su -
三、然后再停止运行中的MySQL或MariaDB服务
systemctl stop mysql
systemctl stop mariadb
因为我的云服务器并没有运行中的MySQL或MariaDB服务,所以使用停止服务命令会输出以下结果:
如果有运行中的MySQL或MariaDB服务的话,按照输出提示的步骤走就可以了,停止相关服务后的查看结果如上所示。
四、检查系统安装包(dpkg -l | grep 名称
命令)
dpkg -l | grep 名称
这个在 Debian/Ubuntu 等 Linux 发行版中非常常用的命令组合。这个命令的主要作用是:列出所有已安装的软件包,并通过关键字过滤出你关心的那些。我们可以将这个命令拆解成两个部分来理解:
1、第一部分:dpkg -l
-
dpkg
: 是 Debian 包管理系统的基础命令工具,用于安装、卸载、管理和查询.deb
软件包的信息。 -
-l
(小写 L): 是--list
的缩写。这个选项的作用是列出当前系统上所有已安装的软件包。
当我们直接运行 dpkg -l
时,它会输出一个很长的列表,包含成千上万个包。输出的格式通常是这样的:
-
第一列 (状态标志): 最常见的是
ii
。-
第一个
i
: 表示期望状态是“已安装”。 -
第二个
i
: 表示当前状态是“已安装”。 -
其他状态如
un
(未知/未安装),rc
(已卸载但配置文件还保留) 等。
-
-
第二列 (名称): 软件包的名称。
-
第三列 (版本): 软件包安装的版本号。
-
第四列 (架构): 软件包编译的架构,如
amd64
,arm64
,all
等。 -
第五列 (描述): 软件包的简短描述。
2、第二部分:| grep 名称
-
|
(管道符): 这是 Linux 命令中一个极其重要的概念。它将前一个命令 (dpkg -l
) 的标准输出,作为后一个命令 (grep 名称
) 的标准输入。简单说,就是把dpkg -l
的结果传递给grep
去处理。 -
grep
: 是一个强大的文本搜索工具,它会在给定的文本中搜索匹配指定模式(字符串或正则表达式)的行。 -
名称
: 这是你希望搜索的关键字。它可以是一个完整的软件包名,也可以是名字的一部分。
3、命令组合:dpkg -l | grep 名称
dpkg -l | grep 名称
将两者结合起来,这个命令的工作流程就是:
-
dpkg -l
先执行,生成一个包含所有已安装软件包的列表。 -
这个列表通过管道
|
被送给grep
命令。 -
grep
命令在这个长长的列表中,逐行搜索包含“名称”这个关键字的行。 -
最终,只有那些包含“名称”的行才会被显示在终端上。
这样做的巨大好处是:你不需要在成千上万个软件包中用眼睛去慢慢找,grep
会帮你瞬间完成筛选。
4、与 rpm -qa
命令的区别
需要注意的是,rpm -qa
只适用于基于 RPM 包管理系统的发行版(如 Red Hat, CentOS, Fedora)。而dpkg -l
命令适用于基于 Debian 的发行版(如 Ubuntu, Debian)。
5、简单总结
命令 | 作用 | 适用系统 |
---|---|---|
rpm -qa | grep 名称 | 查询所有已安装的RPM包,并过滤 | Red Hat, CentOS, Fedora等 |
dpkg -l | grep 名称 | 列出所有已安装的DEB包,并过滤 | Ubuntu, Debian等 |
所以,在ECS服务器上,我们需要先确定系统是CentOS(用 rpm
)还是Ubuntu(用 dpkg
),然后选择正确的命令来检查软件包是否安装。
6、检查MySQL或MariaDB的系统安装包
dpkg -l | grep mysql
dpkg -l | grep mariadb
详细解释
dpkg -l | grep mysql
这个命令的作用是:
-
dpkg -l
:列出所有通过apt
或dpkg
方式安装的软件包。 -
grep mysql
:在上面的完整列表中,过滤出包含 "mysql" 关键词的行。
没有任何输出,意味着:在系统所有已安装的软件包中,没有任何一个软件包的名称里包含 "mysql"。因此,MySQL服务器和相关客户端、库等都没有安装。同理,dpkg -l | grep mariadb
也没有输出,证明MariaDB也完全没安装。
总结当前状态
-
进程:之前用
ps
命令查过,没有运行中的MySQL/MariaDB进程。 -
软件包:现在用
dpkg
命令确认,系统里根本没有安装MySQL/MariaDB软件。
所以,这台服务器是一个“干净”的环境,需要自行安装所需的数据库。如果你的云服务器上运行该命令有相关的安装包的话,则会列出所有已安装的软件包,否则就会像我这样没有输出内容。
五、卸载这些默认安装包
如果你的云服务器上运行该命令有相关的安装包的话,则我们库通过以下命令将已安装的软件包(卸载显示出来的mariadb/mysql安装包)一个一个卸载,不过有点慢:
sudo apt remove mariadb
sudo apt remove mysql
我们可以使用下面命令一次性把相关的安装包给卸载掉:
dpkg -l | grep mysql | xargs apt -y remove
这是一个命令链,其最终目的是:卸载所有名称中包含 "mysql" 字样的已安装软件包。
警告!!!这是一个非常危险的操作(想要使用的话前提得要知道会造成什么样的后果),请务必理解其后果后再执行! 它会移除所有匹配的包,可能会破坏依赖这些包的服务或应用程序(例如你的网站数据库)。
分步讲解
这个命令由三个部分通过管道 (|
) 连接而成,执行顺序是从左到右:
1. dpkg -l
-
作用:列出系统上所有已安装的软件包。
-
输出:一个长长的列表,包含每个包的状态、名称、版本、架构和简短描述。
2. grep mysql
-
作用:从上一个命令 (
dpkg -l
) 的输出中,过滤出所有包含 "mysql" 字符串的行。 -
输出:所有名称或描述中包含 "mysql" 的软件包列表。例如,可能包括:
-
mysql-server-8.0
-
mysql-client-8.0
-
mysql-common
-
libmysqlclient21
-
等等...
-
3. xargs apt -y remove
这是最关键和最危险的一步。
-
xargs
: 这个命令的作用是将上一个命令的输出(即一系列包名)作为参数传递给后面指定的命令(这里是apt -y remove
)。它相当于把grep mysql
得到的包名列表,一个一个地放到apt remove
后面。 -
apt -y remove
: 这是执行卸载操作的命令。-
apt
: 高级包管理工具。 -
remove
: 子命令,表示卸载软件包。 -
-y
或--yes
: 自动回答 "yes" 以确认所有提示。这是导致命令自动运行、无需确认的关键选项,非常危险。
-
整个命令链的流程可以理解为:
-
获取全部软件包列表 ->
-
筛选出所有带"mysql"的 ->
-
把这些包名传给
apt
命令并自动执行卸载。
一个简单的模拟示例
假设 dpkg -l | grep mysql
的输出是:
ii mysql-common-8.0 1:8.0.33-0ubuntu0.22.04.2 amd64 MySQL database common files
ii mysql-server-8.0 1:8.0.33-0ubuntu0.22.04.2 amd64 MySQL database server
xargs
会获取这两行文本,并从中提取出包名(通常是每行的第二个字段),然后构造出这样的命令并执行:
apt -y remove mysql-common-8.0 mysql-server-8.0
同理,mariadb也是一样的卸载操作,可以一次性的卸载相关的安装包!!!(后面只讲解mysql的使用流程,mariadb也是同理的,具体步骤可以上面查相关操作)
卸载后的操作
ls /etc/mysql/my.cnf
ls /var/lib/mysql
第二个命令一般在卸载后使用,会列出一些安装包的残留文件,这是正常的。如果我们在卸载前需要这些配置文件的话,我们可以备份出来!!!下面是我的云服务器的情况,因为本来就没有相关的安装包,所以也就都是空的,毋容置疑。
六、获取MySQL官方APT源
1、首先确认系统版本
cat /etc/os-release
2、下载MySQL APT配置仓库包(两种方式)
前提注意:最好安装和自己系统一致的MySQL版本,否则可能会存在软件兼容性问题
访问MySQL :: Download MySQL APT Repository选择适合您Ubuntu/Debian版本的配置包。
或者直接使用wget下载(以下以我的Ubuntu 20.04为例):
wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
3、安装MySQL APT仓库配置包
我以在官网界面中下载到本地电脑的桌面为例(第一种方式),然后上传到云服务器上:
第一步:创建一个MySQL目录,然后进到这个目录中
第二步:rz命令
这里需要下载一下lrzsz软件包,忘记了该用法的话可以移步到命令章节(我都忘了具体在哪了)
使用rz命令,从本地选中文件上传到云服务器当前目录文件夹中
我们可以看到当前目录中已经出现了下载好的MySQL安装包:
4、安装MySQL APT源,对比前后APT源
1. 安装前:查看现有的 APT 源列表
在安装之前,先查看你当前的 APT 源列表(通常位于 /etc/apt/sources.list.d/
目录和 /etc/apt/sources.list
),确认没有 MySQL 相关的源。
ls /etc/apt/sources.list.d/
cat /etc/apt/sources.list
1. ls /etc/apt/sources.list.d/
显示:(空)这个目录是空的,说明还没有任何第三方软件源被添加。
2. cat /etc/apt/sources.list
显示:这里只有 Ubuntu 官方的基础软件源(通过华为云镜像),没有 MySQL 的软件源。
当前状态:
-
MySQL APT 源还没有安装
-
系统中只有基础的 Ubuntu 软件源
-
你需要先安装 MySQL 的 APT 配置包
2. 安装 MySQL APT 配置包
使用 dpkg
来安装你下载的 .deb
包(确保你当前在包含该文件的目录中):
sudo dpkg -i mysql-apt-config_0.8.34-1_all.deb
在安装过程中,会弹出一个配置界面,让你选择 MySQL 版本和其他选项。如果你没有特殊需求,直接选择默认选项(OK)即可(通过上下键选择,然后按Enter确定)。
3. 更新 APT 缓存
安装完成后,更新 APT 缓存以获取新的 MySQL 仓库信息:
sudo apt update
4. 安装后:检查是否添加了 MySQL 的 APT 源
再次查看 /etc/apt/sources.list.d/
目录,应该会多出 MySQL 相关的源文件(例如 mysql.list
):
ls /etc/apt/sources.list.d/
cat /etc/apt/sources.list.d/mysql.list
从我们的输出结果可以看到,MySQL APT 源已经成功添加了!
解读输出结果:
1. ls /etc/apt/sources.list.d/
显示:这表示已经创建了 MySQL 的源列表文件。
mysql.list
2. cat /etc/apt/sources.list.d/mysql.list
显示:
文件内容包含多个 deb
和 deb-src
行,指向 MySQL 官方仓库:
-
http://repo.mysql.com/apt/ubuntu/
- MySQL 官方 APT 仓库 -
focal
- Ubuntu 20.04 的代号 -
mysql-8.4-lts
- MySQL 8.4 LTS 版本 -
mysql-tools
- MySQL 工具包 -
mysql-apt-config
- 配置包本身
文件开头的注释告诉我们:
"### THIS FILE IS AUTOMATICALLY CONFIGURED ###"
"Use command 'dpkg-reconfigure mysql-apt-config' as root for modifications."
这句话的意思是:
-
这个文件是自动配置的
-
如果你想修改 MySQL 的版本或其他配置选项,可以使用命令:
sudo dpkg-reconfigure mysql-apt-config
这会重新打开安装时看到的配置界面,让你选择不同的 MySQL 版本或其他选项。
5. (可选)安装 MySQL
如果你需要立即安装 MySQL,可以运行,但是我们不急,先放着:
sudo apt install mysql-server
5、看看能不能正常工作
使用下面的命令我们可以查看可用的 MySQL 相关包:
apt list | grep mysql
输出相关的可用的 MySQL 相关包会刷屏,因为很多!!!输出的第一句话的意思是:"警告:apt 没有稳定的命令行界面。在脚本中使用时要小心。"
详细解释
-
这不是错误,只是一个警告信息(不用管)
-
apt 命令的设计初衷是给人交互使用的,不是给脚本编程使用的
-
apt 的命令行选项和输出格式可能会在不同版本中发生变化,不适合用于自动化脚本
-
对于脚本编程,应该使用
apt-get
命令,它有稳定的接口
完成以上的动作后,当前目录中的.deb文件我们可以删除掉了,当然也可以不删除:
七、安装mysql服务
我们使用下面的命令安装 MySQL 服务器:
sudo apt install mysql-server
八、查看配置文件和数据存储位置
1、查看 MySQL 配置文件位置
ls /etc/mysql/
2、查看数据文件存储位置
# Ubuntu 的 MySQL 数据默认存储在 /var/lib/mysql
sudo ls /var/lib/mysql
3、查找 MySQL 相关可执行文件的安装位置
which
命令用于查找 MySQL 相关可执行文件的安装位置,如下:
1. which mysqld
✅ 作用:查找 MySQL 服务器守护进程的安装位置
📍 位置:/usr/sbin/mysqld
- 这是 MySQL 服务器的主程序
2. which mysql
✅ 作用:查找 MySQL 客户端命令的安装位置
📍 位置:/usr/bin/mysql
- 这是 MySQL 命令行客户端工具
这些信息告诉你:
-
MySQL 已经成功安装在系统中
-
服务器程序在
/usr/sbin/mysqld
-
客户端程序在
/usr/bin/mysql
-
这些是标准的 Ubuntu 安装路径
相关的重要命令位置:
命令 | 路径 | 作用 |
---|---|---|
mysqld | /usr/sbin/mysqld | MySQL 服务器主程序 |
mysql | /usr/bin/mysql | MySQL 命令行客户端 |
mysqladmin | /usr/bin/mysqladmin | MySQL 管理工具 |
mysqldump | /usr/bin/mysqldump | MySQL 备份工具 |
我们可以进一步验证:
# 查看 MySQL 服务器版本
/usr/sbin/mysqld --version# 查看 MySQL 客户端版本
/usr/bin/mysql --version# 或者直接使用(因为已经在 PATH 中)
mysql --version
mysqld --version
这些输出确认了 MySQL 已经正确安装并在系统的可执行路径中!
九、启动和查看 MySQL 服务
1、启动 MySQL 服务
sudo systemctl start mysql.service
或者简写:
sudo systemctl start mysql
2、查看 MySQL 服务状态
sudo systemctl status mysql
3、设置开机自启
sudo systemctl enable mysql
4、查看 MySQL 进程
ps axj | grep mysqld
或者更详细地查看:
ps aux | grep mysql
注意:在 Ubuntu 中,MySQL 的服务名称是 mysql
而不是 CentOS 中的 mysqld
。这是因为在 Ubuntu 中,服务名称通常与软件包名称保持一致。
为了查看MySQL服务存在,我们也可以使用下面的命令(后面会学到)查看MySQL的网络服务端口号:
netstat -nltp
十、登录方法
1、登录方法一【获取临时密码】
# 查看临时密码(Ubuntu 中日志文件位置可能不同)
sudo grep 'temporary password' /var/log/mysql/error.log
或者尝试:
sudo cat /var/log/mysql/error.log | grep "temporary password"
不过一般现在的MySQL已经不支持这种方式了(我的就不行),如果你的使用这种方法可行的话,你就可以使用临时密码登录:
mysql -uroot -p
然后我们如果想改密码的话可以根据下面简单操作一下(了解即可,可以先不修改密码):
-- 首先查看当前的密码验证组件(MySQL 8.0+ 方式不同)
SHOW VARIABLES LIKE 'validate_password%';-- 如果存在验证插件,先降低要求(MySQL 5.7)
SET GLOBAL validate_password_policy = 0;
SET GLOBAL validate_password_length = 1;-- 或者直接卸载验证插件(如果需要)
UNINSTALL PLUGIN validate_password;-- 修改 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
1. 查看密码验证组件
SHOW VARIABLES LIKE 'validate_password%';
作用:查看当前 MySQL 的密码验证策略配置
输出示例:
Variable_name | Value |
validate_password_check_user_name | OFF |
validate_password_dictionary_file | |
validate_password_length | 8 |
validate_password_mixed_case_count | 1 |
validate_password_number_count | 1 |
validate_password_policy | MEDIUM |
validate_password_special_char_count | 1 |
关键参数说明:
-
validate_password_policy
:密码策略强度(LOW, MEDIUM, STRONG) -
validate_password_length
:密码最小长度 -
validate_password_number_count
:至少需要的数字数量 -
validate_password_mixed_case_count
:至少需要的大小写字母数量 -
validate_password_special_char_count
:至少需要的特殊字符数量
2. 降低密码要求(MySQL 5.7)
SET GLOBAL validate_password_policy = 0;
SET GLOBAL validate_password_length = 1;
作用:
-
第一句:将密码策略设为最低(0=LOW,1=MEDIUM,2=STRONG)
-
第二句:将密码最小长度设为1
注意:这样设置后,密码要求会变得非常宽松,适合测试环境。
3. 卸载密码验证插件
UNINSTALL PLUGIN validate_password;
作用:完全移除密码复杂度验证功能
使用场景:
-
当你觉得密码验证太麻烦时
-
仅推荐在测试环境中使用
-
生产环境不建议这样做,因为会降低安全性
4. 修改 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
作用:
-
第一句:修改 root 用户的密码
-
第二句:刷新权限,使修改立即生效
MySQL 5.7 vs MySQL 8.0+ 的区别:
MySQL 5.7:
-- 修改密码
SET PASSWORD = PASSWORD('你的新密码');
-- 或
UPDATE mysql.user SET authentication_string = PASSWORD('你的新密码') WHERE User = 'root';
MySQL 8.0+:
-- 修改密码(推荐方式)
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';-- 或者先创建用户再设置密码
CREATE USER 'root'@'localhost' IDENTIFIED BY '密码';
2、如果找不到临时密码,尝试方法二【直接登录】(我的这个可以)
最新版 MySQL 安装后,root 账户默认没有临时密码。你可以直接尝试以空密码方式登录客户端。 首先使用下面登录命令,然后弹出输入密码提示,直接回车(Enter)就可以登录了:
# 新版本 MySQL 可能没有密码
sudo mysql -u root
登录成功后的MySQL服务是这样的,如下(我的这个可以):
输入quit可以退出MySQL登录:
或者:
mysql -u root -p
# 直接按回车(如果密码为空)
3、登录方法三【使用 skip-grant-tables】
如果以上方法都不行,我们可以尝试下面的方法:
# 首先要停止 MySQL 服务,否则不会生效
sudo systemctl stop mysql
# 编辑 MySQL 配置文件(Ubuntu 中的路径不同)
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld]
下面添加:
skip-grant-tables
然后:
# 重启 MySQL 服务
sudo systemctl start mysql# 无需密码登录
sudo mysql -u root
登录后重置密码(重置密码的操作可以上网查阅,因为太多太杂了):(经过之前我们的登录信息,可以看到我们的版本是MySQL 8.0+,我们就使用下面8.0+的操作)
-- 先刷新权限
FLUSH PRIVILEGES;-- 修改密码(MySQL 5.7 和 8.0+ 语法不同)
-- MySQL 5.7:
UPDATE mysql.user SET authentication_string = PASSWORD('你的新密码') WHERE User = 'root';-- MySQL 8.0+:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';FLUSH PRIVILEGES;
-
FLUSH PRIVILEGES;
- 刷新系统权限 -
执行具体的密码修改语句(语法因版本而异)
-
FLUSH PRIVILEGES;
- 再次刷新系统权限,使更改生效
4、相较于Centos,Ubuntu的重要区别
-
日志文件路径:Ubuntu 中通常是
/var/log/mysql/error.log
-
配置文件路径:Ubuntu 中通常是
/etc/mysql/mysql.conf.d/mysqld.cnf
-
服务名称:Ubuntu 中是
mysql
而不是mysqld
5、完成后记得
# 移除 skip-grant-tables 选项
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf# 重启服务
sudo systemctl restart mysql
在 Ubuntu 上,新安装的 MySQL 通常 root 用户是通过 auth_socket
插件认证的,可以直接用 sudo mysql
登录而不需要密码,如下:
十一、设置 MySQL 开机启动(可以不设置)
1、设置 MySQL 开机启动
sudo systemctl enable mysql
2、重新加载 systemd 配置
sudo systemctl daemon-reload
3、Ubuntu 与 CentOS 的对比
操作 | CentOS | Ubuntu |
---|---|---|
设置开机启动 | systemctl enable mysqld | sudo systemctl enable mysql |
重新加载配置 | systemctl daemon-reload | sudo systemctl daemon-reload |
服务名称 | mysqld | mysql |
4、完整的服务管理命令
# 设置开机启动
sudo systemctl enable mysql# 禁用开机启动
sudo systemctl disable mysql# 查看是否已设置开机启动
sudo systemctl is-enabled mysql# 重新加载 systemd 配置(通常在修改服务文件后需要)
sudo systemctl daemon-reload
5、验证设置结果
# 检查服务状态
sudo systemctl status mysql
# 检查是否启用开机启动
systemctl list-unit-files | grep mysql
6、注意
-
在 Ubuntu 中,服务名称是
mysql
而不是 CentOS 中的mysqld
-
使用
sudo
权限是因为修改系统服务需要管理员权限(root) -
daemon-reload
通常在修改服务配置文件后才需要,单纯启用服务通常不需要
建议:即使标记为"可以不设",在生产环境中建议设置开机启动,确保服务器重启后 MySQL 能自动恢复服务。但是云服务器是永远都不关闭的,所以这个命令设不设置都没问题。
十二、配置 MySQL 配置文件
1、Ubuntu 中 MySQL 配置文件的路径
# 主要的配置文件路径
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 或者查看所有配置文件
ls /etc/mysql/
2、配置字符编码和存储引擎
编辑配置文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld]
部分添加以下配置:
3、配置完成后重启 MySQL
sudo systemctl restart mysql
netstat -nltp
我们使用上面的命令查看发现端口号变成了3306:
4、验证配置是否生效
# 登录 MySQL
mysql -u root -p
# 查看字符集设置
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
# 查看存储引擎
SHOW VARIABLES LIKE 'default_storage_engine';
5、重要说明
-
使用
utf8mb4
而不是utf8
,因为utf8mb4
支持完整的 Unicode(包括表情符号) -
Ubuntu 中配置文件是分散的,主要修改
mysqld.cnf
-
配置完成后必须重启 MySQL 服务才能生效
-
建议同时配置服务器端和客户端的字符集
这样配置后,你的 MySQL 数据库就能正确支持中文和其他 Unicode 字符了。