修改思路: 停止数据库服务,配置跳过登录认证,进入交互终端重置密码,恢复登录认证,启动数据库服务
下面以mariadb为例,注意mysql和mariadb以及同数据库不同版本修改密码语句可能不一样
一、编辑/usr/lib/systemd/system/mariadb.service
添加–skip-grant-tables参数
ExecStart=/usr/bin/mysqld_safe --basedir=/usr --skip-grant-tables --skip-networking
二、重启服务
sudo systemctl restart mariadb.service
三、修改密码
mysql -uroot
flush privileges;
set password for 'root'@'localhost'=password('123456');
flush privileges;
四、去掉–skip-grant-tables参数
五、刷新服务
systemctl daemon-reload
六、重启服务,跟二一样
sudo systemctl restart mariadb.service
flush privileges; 命令说明:
在MySQL和MariaDB中,FLUSH PRIVILEGES;
是一个SQL命令,用于重新加载授权表,使对系统授权表的任何更改立即生效。当你在MySQL或MariaDB中修改了用户权限(例如,通过修改mysql.user
表或使用GRANT
、REVOKE
等命令),这些更改不会立即生效,除非你重新连接到数据库服务器或执行FLUSH PRIVILEGES;
命令。
执行FLUSH PRIVILEGES;
会告诉服务器重新读取授权表,从而应用任何最近的更改。这通常在你手动编辑了授权表或执行了某些需要立即生效的权限更改时使用。
例如,如果你直接编辑了mysql.user
表来更改用户的密码或权限,你需要执行FLUSH PRIVILEGES;
来确保这些更改被服务器识别和应用。同样,如果你使用GRANT
或REVOKE
命令来更改权限,这些更改通常会在执行命令时立即生效,但在某些情况下,执行FLUSH PRIVILEGES;
可以确保没有延迟。
需要注意的是,直接编辑授权表通常不是推荐的做法,因为这可能导致权限设置不一致或其他问题。相反,应该使用GRANT
、REVOKE
和其他专门的SQL命令来管理用户权限。
最后,请确保在执行FLUSH PRIVILEGES;
或任何权限更改操作时具有足够的权限,并且了解这些更改的影响。不正确的权限设置可能会导致安全漏洞或其他问题。
一直显示 “->”
说明
当你在 MySQL 命令行客户端中输入命令后,如果它显示 ->
而不是执行该命令或显示查询结果,这通常意味着 MySQL 客户端正在等待你输入更多的命令或查询的一部分。这可能是因为:
- 命令未完整:你可能只输入了命令的一部分,而 MySQL 正在等待你完成它。例如,如果你正在输入一个多行的命令或查询,MySQL 会等待你输入完整个命令。
- 引号未闭合:如果你在查询中使用了引号(单引号或双引号),但没有正确闭合它们,MySQL 会等待你输入闭合的引号。
- 复制粘贴问题:有时从其他源复制命令到 MySQL 客户端时,可能会带入一些不可见的字符或格式,导致 MySQL 等待额外的输入。
要解决这个问题,你可以尝试以下方法:
- 检查命令:确保你输入的命令是完整的,并且没有语法错误。
- 使用分号:在 MySQL 中,每个命令或查询的末尾都应该有一个分号 (
;
)。确保你的命令或查询以分号结尾。 - 重新输入:尝试重新输入整个命令或查询,确保没有遗漏或错误。
- 退出并重新登录:有时,简单地退出 MySQL 客户端并重新登录可以解决问题。
- 检查复制粘贴:如果你从其他地方复制了命令,尝试直接在 MySQL 客户端中手动输入它,而不是使用复制粘贴。
暂无评论内容