好吧,我有个小问题。
我的密码过期了,我的users表被破坏了。我可以通过
mysql -u root -p 但是在我所做的每一个动作中,我都会发现一个错误:
mysql.user的列计数是错误的。预期45,发现46。该表可能已损坏。
我已经读过,您可以使用folowing命令修复mysql.user表:
mysql_upgrade -u root -p 但是当我这样做的时候,我得到了一个错误:
mysql_upgrade: Got错误:1862年:您的密码过期了。要登录,必须使用支持过期密码的客户端更改它。连接到MySQL服务器时,升级过程遇到错误,不会继续。那我该怎么解决这个问题?
我备份了所有的表,所以如果我必须重置所有的数据库,我就不会有问题了。
(为什么是奇怪的格式?Stackoverflow认为这都是代码,希望我把它放在代码块中,否则我无法保存它)
编辑:
我知道我的密码。这根本不是问题所在。
我的问题是密码过期了,我不能做任何事情,因为我的mysql.user被破坏了!
发布于 2017-06-07 22:45:17
尝试禁用密码过期选项:编辑my.cnf并将
[mysqld]
default_password_lifetime=0然后尝试重新启动mysql服务器,然后再次登录。源在这里,https://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html
为了修复数据库,您可以运行mysqlcheck --repair --databases db_name或mysqlcheck --repair --all-databases来修复所有数据库,源在这里,您可以首先尝试修复数据库,然后尝试禁用密码生存期。
发布于 2021-03-28 14:03:46
在从2018年恢复旧备份时,也有同样的问题,正如您在评论中所说的,重新安装MySQL并没有解决这个问题。
我是怎么做到的
mysqld_safe --skip-grant-tables --skip-networking &
(如果遇到错误,可能需要手动创建和编排目录/run/mysqld)
--跳过-授予-表将允许无密码登录,并将禁用密码过期的任何检查。mysql_upgrade --force和mysqlcheck --repair --all-databasesps aux | grep mysql用于查找要关闭的PID ),然后使用service mysql start正常启动服务器。
在我的情况下,它没有工作,我仍然有“预期的45,发现46”错误。在这种情况下,请继续:mysql模式被转储。
因为mysqldump没有--排除-数据库选项,所以我们需要将数据库列表转储。要获取除系统架构之外的现有数据库的列表,请运行:
mysql -Nse "SELECT GROUP_CONCAT(SCHEMA_NAME SEPARATOR ' ') FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql','information_schema','performance_schema','sys');"mysqldump --databases db1 db2 ... db50 > mysqldump.sqlmv /var/lib/mysql /var/lib/mysql-old && mkdir /var/lib/mysql && chown mysql:mysql /var/lib/mysql)service mysql start和一个新的数据集将被填充。mysql_secure_installation设置新的根密码cat mysqldump.sql | mysql -u root -p之后,服务器就可以正常运行了。
https://stackoverflow.com/questions/44423804
复制相似问题