Linux中修改MySQL密码

Linux中MySQL的密码操作

1、给用户设置/更新密码

bash 复制代码
mysqladmin -u用户名 -p原密码 password "新密码"

该命令在终端直接执行,不需要进入mysql视图

该命令适用于以下情况:

  • 用户的密码为空,为用户设置密码
  • 用户密码需要更新,更换密码

注意事项: 使用该命令需要知道原密码

示例

bash 复制代码
[root@yun01 ~]# mysqladmin -uroot -p password "123"
Enter password: 
[root@yun01 ~]# 

2、忘记密码操作一(命令行操作)

1、先查看当前有没有MySQL服务在运行

bash 复制代码
ps -ef | grep -i mysql

示例:

bash 复制代码
[root@yun01 ~]# ps -ef | grep -i mysql
mysql      3553      1  0 16:22 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql      3720   3553  0 16:22 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
root       3792   2175  0 16:47 pts/1    00:00:00 grep --color=auto -i mysql

2、关闭当前的MySQL服务

八十、 复制代码
systemctl stop mariadb
  • 示例:
bash 复制代码
[root@yun01 ~]# systemctl stop mariadb
[root@yun01 ~]# ps -ef | grep -i mysql
root       3809   2175  0 16:48 pts/1    00:00:00 grep --color=auto -i mysql
[root@yun01 ~]# 

3、启动 MySQL,允许在不检查或使用权限系统的情况下访问 MySQL 数据库

  • 命令:
bash 复制代码
mysqld_safe --skip-grant-tables
  • 解释:
  • mysqld_safe --skip-grant-tables 是用来启动 MySQL 的一种特殊模式,允许在不检查或使用权限系统的情况下访问 MySQL 数据库。

  • mysqld_safe :这是一个用于启动 MySQL 服务器的脚本,它比直接使用 mysqld 启动 MySQL 更安全。它提供了日志记录、错误检测和自动重启 MySQL 的功能。

  • --skip-grant-tables:这个选项告诉 MySQL 启动时不加载权限表,即不启用 MySQL 的用户权限系统。这意味着在这个模式下,任何用户都可以访问数据库,而不需要验证用户名和密码。这种模式常用于重置 MySQL 密码或解决由于权限问题导致的无法访问 MySQL 的情况。

  • 示例:
bash 复制代码
[root@yun01 ~]# mysqld_safe --skip-grant-tables
240926 20:20:55 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
240926 20:20:55 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
  • 此时,MySQL服务以前台运行的方式启动,我们需要新开一个终端进行后续操作

4、进入MySQL客户端,修改用户表中的密码

bash 复制代码
# 1、直接输入mysql进入客户端
msyql  
# 在mariadb中,默认登入的是root账户,若在MySQL中要指定其用户登录可使用以下命令
mysql -uroot
  • 修改user表中的密码
bash 复制代码
update mysql.user set password=password("") where user="root"; 
# ""表示将root的密码设置为空
# password()表示使用该函数将密码加密后存储
  • 重新加载用户权限表,确保对权限的更改立即生效。
bash 复制代码
flush privileges;

5、关闭mysqld_safe模式下启动的MySQL服务,并使用系统命令启动MySQL服务

bash 复制代码
pkill -9 mysql
# 等待几秒
systemctl start mariadb

6、重新设置root账号的密码

  • 也可以在第四步直接将root的密码设置好

  • 此步骤参考第一小节

7、注意事项

bash 复制代码
UPDATE mysql.user SET password = PASSWORD('new_password') WHERE user = 'root';

这条命令在使用时得注意MySQL的版本

  • MySQL5.7以上版本中,用户的密码不存在password字段中,而是存在于authentication_string,应该使用以下命令。

bash 复制代码
UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE user = 'root';

3、忘记密码操作二(修改配置文件)

1、修改 my.cnf 文件,跳过权限表

my.cnf 文件是 MySQL 的主要配置文件,用于设置 MySQL 数据库服务器的各种参数和行为。在该文件中,可以定义服务器的运行模式、存储路径、缓存大小、网络配置等。my.cnf 文件是 MySQL 在启动时读取的第一个配置文件。

  • 文件位置 /etc/my.cnf

  • 编辑 my.cnf 文件,在 [mysqld] 部分中添加以下行,以跳过 MySQL 的权限表:

bash 复制代码
[mysqld]
skip-grant-tables
# 此设置允许 MySQL 在启动时不加载权限系统,从而可以直接登录 MySQL 而不需要输入密码。

2、重启 MySQL 服务

bash 复制代码
systemctl restart mariadb

3、修改user表中的用户密码

bash 复制代码
update mysql.user set password=password("你的新密码") where user="root"; 

4、将my.cnf中加入的配置删掉,并重启服务

bash 复制代码
[mysqld]
skip-grant-tables  # 删掉此项

systemctl restart mariadb # 重启服务

4、 忘记密码操作三(使用脚本)

  • --init-file 是 MySQL 启动时的一个选项,允许指定一个包含 SQL 语句的文件,当 MySQL 启动时,文件中的 SQL 语句会被自动执行。这种方式可以用于在 MySQL 启动时初始化数据库、重置密码或者执行其他重要的数据库操作。这个文件中的 SQL 语句在 MySQL 完全启动之前执行

1、编写一个sql脚本,用于修改用户密码

bash 复制代码
cd /opt
vim reset_password.sql
ALTER USER 'root'@'localhost' IDENTIFIED BY '123';  # mysql 5.6 以上版本使用该命令

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123'); # mysql 5.6 以下版本使用该命令

2、保存后停止当前的MySQL服务,使用mysql_safe命令启动MySQL服务

bash 复制代码
mysqld_safe --init-file=/opt/reset_password.sql &  # &符号表示以后台模式运行

3、测试使用新密码来登录客户端,若登录成功则删除sql脚本,并关闭当前的sql服务,并使用系统命令重启服务

4、注意事项

文件权限 :确保 SQL 文件有足够的权限被 MySQL 服务读取,通常 MySQL 服务以 mysql 用户身份运行,因此 SQL 文件的权限需要至少对 mysql 用户可读。

一次性操作--init-file 是一个一次性操作,SQL 语句在启动时执行完成后文件不再起作用。记得在操作完成后删除 SQL 文件,防止安全问题。

文件内容要求:SQL 文件中的每条 SQL 语句必须完整且符合 MySQL 的语法要求。

5、mysql_secure_installation的使用

  • mysql_secure_installation 是一个 MySQL 提供的安全配置脚本,用于帮助用户强化 MySQL 数据库的安全性。这个脚本可以执行一系列任务,包括设置 root 用户密码、删除匿名用户、禁止远程 root 登录、删除测试数据库等。

使用方法

  1. 运行脚本

    bash 复制代码
    mysql_secure_installation
  2. 输入 MySQL root 密码 : 脚本启动后,首先会要求你输入 MySQL root 用户的密码。如果这是全新安装,可能没有设置密码,你可以直接按 Enter 键跳过。

    bash 复制代码
    Enter current password for root (enter for none): 
  3. 设置 root 密码: 如果 root 用户尚未设置密码,脚本会询问你是否要设置一个密码。输入两次相同的新密码。

    bash 复制代码
    Set root password? [Y/n] Y
    New password: 
    Re-enter new password: 
  4. 删除匿名用户 : 脚本会提示你是否要删除 MySQL 中的匿名用户。选择 Y 以删除匿名用户。

    bash 复制代码
    Remove anonymous users? [Y/n] Y
  5. 禁止远程 root 登录 : 脚本会询问你是否要禁止 root 用户的远程登录。选择 Y,确保只有本地登录的 root 用户可以访问数据库。

    bash 复制代码
    Disallow root login remotely? [Y/n] Y
  6. 删除测试数据库 : 脚本会询问你是否要删除默认的测试数据库。选择 Y 以删除它。

    bash 复制代码
    Remove test database and access to it? [Y/n] Y
  7. 刷新权限表: 脚本会自动刷新 MySQL 的权限表,确保所有更改立即生效。

    bash 复制代码
    Reload privilege tables now? [Y/n] Y

输出示例

在运行完所有步骤之后,脚本会输出类似以下的结果:

bash 复制代码
All done! If you've completed all of the above steps, your MySQL installation should now be secure.

Thanks for using MySQL!
相关推荐
百成Java13 分钟前
基于springboot的旅游网站
java·spring boot·后端·mysql·spring·智能家居·旅游
机器人梦想家19 分钟前
resolvectl和resolvconf的区别及用法(dns问题排查及解决)
linux
来自人间的烟火36 分钟前
centos离线安装nvm
linux·运维·服务器
为java添砖加瓦1 小时前
【读写分离?聊聊Mysql多数据源实现读写分离的几种方案】
java·数据库·spring boot·后端·mysql·spring·mybatis
anddddoooo1 小时前
vulnhub(13):Digitalworld.local JOY(ftp 的未授权文件读写漏洞、文件覆盖提权)
linux·网络·安全·web安全·网络安全
埋头编程~1 小时前
【Linux】常用指令(下)(内含more、less、 head、tail、date、find、grep、zip、tar以及学习笔记)
linux·学习·less
葫芦娃你好我是皮卡丘2 小时前
流浪软件uniaccess agent 删除
linux·操作系统
Vacancy空白2 小时前
tomcat项目【jvm内存溢出】
linux·jvm·tomcat
Smaller、FL2 小时前
linux:chown用法详解
linux·运维·服务器
轻松Ai享生活2 小时前
partprobe 与 partx 的详细比较
linux