我有一个专用的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命令
# mysql_upgrade --upgrade-system-tables
请记住,您正在跨越两个版本的MySQL。 在这之前备份mysql.user表
根据您的评论 ,我只能提出一件事:请参阅我的文章从MySQL 5.1.73升级到5.6.21的任何已知问题? 在“ISSUE#1:升级path”一节中介绍如何升级两个版本的MySQL。
这是你的情况
mysql.user mysql.user升级到MySQL 5.5 我有一个疯狂的想法:手工添加缺less的5列
在我的DBA StackExchange文章中, 不能以root身份授予权限 ,我显示MySQL mysql.user和4.x中的mysql.user表中的所有列。
从这些展示中,我们将做到以下几点:
mysql.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;