我需要在--skip-grant-tables启用该选项的情况下在 Ubuntu 16.04 中重新启动 MySQL ,但要么我不知道我的 root 密码,要么它不起作用。--skip-grant-tables没有密码怎么设置?
当我作为普通用户尝试时:
mysqld --skip-grant-tables
Run Code Online (Sandbox Code Playgroud)
我看到这个:
mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)
Run Code Online (Sandbox Code Playgroud)
所以,我从 /etc/init.d/mysql 中挖出了这个例子并添加了--skip-grant-tables参数:
su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
Password:
su: Authentication failure
Run Code Online (Sandbox Code Playgroud)
所以 su 不起作用,root密码也不起作用。我也试过这个:
sudo su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
No directory, logging in with HOME=/
Run Code Online (Sandbox Code Playgroud)
如何使用 --skip-grant-tables 启动 mysql?
小智 16
当您不知道您的 root 密码(或类似'ERROR 1045 (28000): Access denied for user 'root'@'localhost'阻止访问的错误)时,您可以通过将选项添加到 MySQL 配置文件来获得访问权限。首先打开它进行编辑:
sudo nano /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)
然后[mysqld]在其下方搜索并输入以下值:
[mysqld]
# For debugging and recovery only #
skip-grant-tables
skip-networking
###################################
Run Code Online (Sandbox Code Playgroud)
如您所见,在此处添加命令行参数的技巧是--从参数前面删除。现在重新启动 mysql 服务,你可以访问你的表来重置你的 root 用户密码或几乎任何你需要做的事情。(但是,您不能对授权表执行任何操作,因为它们未加载。)
谨防。当您处于此模式时,任何登录用户都可以访问您的整个数据库。这就是我添加上述skip-networking选项的原因,因此在您恢复时远程用户无法访问这些表。
确保将这些行注释掉并在完成后再次重新启动 mysql,以重新保护服务器。
来自评论。
对于 init.rc 配置:
最简单的方法是临时修改 /etc/init.d/mysql 以包含该选项--skip-grant-tables,然后使用此脚本启动它 (/etc/init.d/mysql start)。
在像 Ubuntu 16.04 这样的新兴系统上,这需要在
/lib/systemd/system/mysql.service.
| 归档时间: |
|
| 查看次数: |
31530 次 |
| 最近记录: |