無法將 MySQL 權限授予 Debian 系統維護使用者
我有一個專用的 Debian 7 伺服器,執行多個網站,使用 MySQL 作為數據庫伺服器。當我嘗試安裝最新更新時,由於伺服器無法停止,MySQL 無法更新。
我在這個問題中發現了有類似症狀的人:https ://superuser.com/questions/268053/debian-cant-stop-mysql-permissions
上述問題的答案建議授予對所有數據庫的完全權限 to
'debian-sys-maint'@'localhost'
,但是當我嘗試授予權限時,我收到拒絕訪問錯誤。mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '...'; ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost'; ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
另一個奇怪的事情是我的
mysql.user
表中現在有兩個 root 使用者。這是正常的還是與我的問題有關?這個localhost.localdomain
甚至沒有密碼雜湊。對於我執行的每個站點,我也有一個使用者,但為了清楚起見,我將它們排除在外。+-----------------------+------------------+ | Host | User | +-----------------------+------------------+ | localhost | debian-sys-maint | | localhost | root | | localhost.localdomain | root | +-----------------------+------------------+
**編輯:**執行
dpkg-reconfigure mysql-server
是這樣說的:xxx@yyy:~$ sudo dpkg-reconfigure mysql-server /usr/sbin/dpkg-reconfigure: mysql-server is broken or not fully installed
搜尋該錯誤導致我進入論壇文章,暗示可能有較舊的軟體包搞砸了,但對我來說,這裡的情況似乎並非如此:
xxx@yyy:~$ sudo dpkg --get-selections | grep mysql dovecot-mysql install libdbd-mysql-perl install libmysqlclient18:amd64 install mysql-client-5.5 install mysql-common install mysql-server install mysql-server-5.5 install mysql-server-core-5.5 install php5-mysql install
我在 StackExchange 中有三 (3) 個文章,可以快速解釋根本原因
Apr 24, 2014
: mysql: 恢復管理員使用者的所有權限Aug 07, 2013
: MySQL - ERROR 1045 (28000): Access denied for user : 權限問題May 01, 2013
:我可以從數據文件中找出 MySQL 的版本嗎?根本原因
- 您有 37 列在
mysql.user
. 這對 MySQL 5.0 來說沒問題- 您正在執行 MySQL 5.5。你應該有 42 列。
建議
您將必須執行 MySQL 命令
# mysql_upgrade --upgrade-system-tables
請記住,您正在跨越兩個版本的 MySQL。
mysql.user
在這樣做之前備份表更新 2015-02-10 10:59 EST
根據您的評論,我只能建議一件事:參考我的文章Any known questions 從 MySQL 5.1.73 升級到 5.6.21?在“問題 #1:升級路徑”部分下,了解如何升級兩個版本的 MySQL。
更新 2015-02-11 12:26 EST
這是你的情況
- 你有一個
mysql.user
符合 MySQL 5.0的- 您必須
mysql.user
升級才能使用 MySQL 5.5我有一個瘋狂的想法:手動添加缺少的 5 列
在我的 DBA StackExchange 文章Cannot GRANTprivilege as root
mysql.user
中,我顯示了MySQL 5.6、5.5、5.1、5.0 和 4.x的表中的所有列。從這些顯示中,我們將執行以下操作:
- 事先將 mysql.user 備份為 mysql.user_backup
- 構造
mysql.user
為具有與 MySQL 5.5 相同的列,添加五 (5) 個缺失的列。- 確保列的順序相同
- 為 root 使用者填寫缺少的權限
Y
- 部署新的權限
維修步驟
mysql.user
CREATE TABLE mysql.user_backup LIKE mysql.user; INSERT INTO mysql.user_backup SELECT * FROM mysql.user; ALTER TABLE mysql.user ADD Event_priv enum('N','Y') DEFAULT 'N' AFTER Create_user_priv; ALTER TABLE mysql.user ADD Trigger_priv enum('N','Y') DEFAULT 'N' AFTER Event_priv; ALTER TABLE mysql.user ADD Create_tablespace_priv enum('N','Y') DEFAULT 'N' AFTER Trigger_priv; ALTER TABLE mysql.user ADD plugin CHAR(64) DEFAULT NULL AFTER max_user_connections; ALTER TABLE mysql.user ADD authentication_string text DEFAULT 'N' AFTER plugin; UPDATE mysql.user SET Event_priv='Y', Trigger_priv='Y', Create_tablespace_priv ='Y' WHERE user='root' and host='localhost'; FLUSH PRIVILEGES;
如果你想恢復它,你可以這樣做
RENAME TABLE mysql.user TO mysql.user_old,mysql.user_backup TO mysql.user; FLUSH PRIVILEGES;
試試看 !!!