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!
相关推荐
是小崔啊2 小时前
事务03之MVCC机制
数据库·mysql·事务·
涛ing3 小时前
32. C 语言 安全函数( _s 尾缀)
linux·c语言·c++·vscode·算法·安全·vim
__雨夜星辰__3 小时前
Linux 学习笔记__Day2
linux·服务器·笔记·学习·centos 7
大耳朵土土垚3 小时前
【Linux】日志设计模式与实现
linux·运维·设计模式
深度Linux8 小时前
Linux网络编程中的零拷贝:提升性能的秘密武器
linux·linux内核·零拷贝技术
fajianchen8 小时前
MySQL 索引存储结构
数据库·mysql
xianwu54310 小时前
反向代理模块jmh
开发语言·网络·数据库·c++·mysql
geovindu11 小时前
neo4j-community-5.26.0 create new database
数据库·mysql·neo4j
MyY_DO11 小时前
maven mysql jdk nvm node npm 环境安装
java·mysql·maven
chian-ocean11 小时前
从理论到实践:Linux 进程替换与 exec 系列函数
linux·运维·服务器