无法将MySQL权限授予Debian系统维护用户

我有一个专用的Debian 7服务器,运行多个网站与MySQL作为数据库服务器。 当我试图安装最新的更新时,MySQL无法更新,因为服务器未能停止。

我发现在这个问题中有类似症状的人: https : //superuser.com/questions/268053/debian-cant-stop-mysql-permissions

上述问题的答案build议授予所有数据库的全部特权到'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) 

另一个奇怪的是我现在有两个root用户在我的mysql.user表中。 这是正常的,或者这可能与我的问题? 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 

search这个错误导致我到一个论坛post,暗示可能有更旧的软件包搞砸了,但对我来说,这似乎不是这样的情况:

 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)个post,可以很快解释根本原因

  • Apr 24, 2014 : mysql:将所有权限还原到pipe理员用户
  • Aug 07, 2013 : MySQL – 错误1045(28000):访问拒绝用户:权限问题
  • May 01, 2013 : 我可以从数据文件中找出MySQL的哪个版本?

根本原因

  • 你在mysql.user有37列。 这对MySQL 5.0来说是可以的
  • 你正在运行MySQL 5.5。 你应该有42列。

build议

你将不得不运行MySQL命令

 # mysql_upgrade --upgrade-system-tables 

请记住,您正在跨越两个版本的MySQL。 在这之前备份mysql.user

更新2015-02-10 10:59 EST

根据您的评论 ,我只能提出一件事:请参阅我的文章从MySQL 5.1.73升级到5.6.21的任何已知问题? 在“ISSUE#1:升级path”一节中介绍如何升级两个版本的MySQL。

更新2015-02-11 12:26 EST

这是你的情况

  • 你有一个与MySQL 5.0兼容的mysql.user
  • 你必须让mysql.user升级到MySQL 5.5

我有一个疯狂的想法:手工添加缺less的5列

在我的DBA StackExchange文章中, 不能以root身份授予权限 ,我显示MySQL mysql.user和4.x中的mysql.user表中的所有列。

从这些展示中,我们将做到以下几点:

  • 事先备份mysql.user作为mysql.user_backup
  • 构buildmysql.user与MySQL 5.5具有相同的列,添加五个(5)缺失的列。
  • 确保列的顺序相同
  • Y填写root用户缺less的priv
  • 部署新的特权

修复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; 

试一试 !!!