我需要在--skip-grant-tables
啟用該選項的情況下在 Ubuntu 16.04 中重新啟動 MySQL,但要么我不知道我的 root 密碼,要么它不起作用。--skip-grant-tables
沒有密碼如何設定?
當我以普通用戶身份嘗試時:
mysqld --skip-grant-tables
我看到這個:
mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)
因此,我從 /etc/init.d/mysql 中挖出了這個範例並添加了參數--skip-grant-tables
:
su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
Password:
su: Authentication failure
所以 su 不起作用,root 密碼也不起作用。我也嘗試過這個:
sudo su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
No directory, logging in with HOME=/
如何使用 --skip-grant-tables 啟動 mysql?
答案1
當您不知道 root 密碼(或'ERROR 1045 (28000): Access denied for user 'root'@'localhost'
出現阻止存取等錯誤)時,您可以透過將該選項新增至 MySQL 設定檔來獲得存取權限。首先打開它進行編輯:
sudo nano /etc/mysql/my.cnf
然後搜尋[mysqld]
並在其下方輸入以下值:
[mysqld]
# For debugging and recovery only #
skip-grant-tables
skip-networking
###################################
正如您所看到的,在這裡添加命令列參數的技巧是刪除--
參數前面的 。現在重啟mysql服務您可以存取表來重設 root 使用者密碼或幾乎任何您需要執行的操作。 (但是,您無法對授權表執行任何操作,因為它們尚未載入。)
謹防。當您處於此模式時,任何登入使用者都可以存取您的整個資料庫。這就是我添加skip-networking
上面選項的原因,以便遠端用戶在您恢復時無法存取表。
請務必註解掉這些行,並在完成後再次重新啟動 mysql,以重新保護伺服器。
答案2
來自評論。
對於 init.rc 配置:
最簡單的方法是暫時修改 /etc/init.d/mysql 以包含該選項--skip-grant-tables
,然後使用此腳本啟動它 (/etc/init.d/mysql start)。
在像 Ubuntu 16.04 這樣的新興系統上,這需要在
/lib/systemd/system/mysql.service
.