在我搞砸一些事情之前,当我使用$ mysql -u root -p
登录,并显示数据库时。
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| game_data |
| test |
+--------------------+
然后我试图创建一个新的用户,发现PRIVILEGES有问题。
于是我删除了新用户,我想我不小心删除了'root'和'Admin'。
然后我试图再次创建'root',但在做授予所有权限时得到访问拒绝的错误。
mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
mysql> grant all privileges on *.* to 'root'@'localhost' identified by 'password' with grant option;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
如果我再次使用$ mysql -u root -p
登录到MySQL,并显示数据库。
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
所有其他的数据库都不见了。
我现在该如何修复MySQL?
我找不到数据库'mysql',不能创建数据库,创建用户,我尝试做的任何事情都会得到一个错误。
ERROR 1045(28000)。用户'root'@'localhost'(使用密码:YES)的访问被拒绝。
我应该用MacPorts重新安装MySQL吗?如果重新安装,我将失去数据库game_data
,对吗?
按照以下步骤进行。
1.用--skip-grant-tables
选项(安全设置)启动MySQL服务器实例或守护程序。
$ mysqld --skip-grant-tables
2.执行这些语句。
$ mysql -u root mysql
$mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root' 。
$mysql> FLUSH PRIVILEGES。
如果你面临上述未知字段的密码错误,请使用。
update user set authentication_string=password('my_password') where user='root';
3.最后,在没有--skip-grant-tables
选项的情况下重启实例/守护进程。
$ /etc/init.d/mysql restart
现在你应该能够用你的新密码进行连接。
$ mysql -u root -p
输入密码:my_password
。
sudo mv /usr/local/mysql/data/ibdata1 /usr/local/mysql/data/ibdata1.bak
sudo mv /usr/local/mysql/data/ib_logfile0 /usr/local/mysql/data/ib_logfile0.bak
sudo mv /usr/local/mysql/data/ib_logfile1 /usr/local/mysql/data/ib_logfile1.bak
sudo cp -a /usr/local/mysql/data/ibdata1.bak /usr/local/mysql/data/ibdata1
sudo cp -a /usr/local/mysql/data/ib_logfile0.bak /usr/local/mysql/data/ib_logfile0
sudo cp -a /usr/local/mysql/data/ib_logfile1.bak /usr/local/mysql/data/ib_logfile1
sudo /etc/init.d/mysql restart
grep 'temporary password' /var/log/mysqld.log
Sort date (newest date)
你可能会看到类似这样的情况。
[root@SERVER ~]# grep 'temporary password' /var/log/mysqld.log
2016-01-16T18:07:29.688164Z 1 [Note] A temporary password is generated for root@localhost: O,k5.marHfFu
2016-01-22T13:14:17.974391Z 1 [Note] A temporary password is generated for root@localhost: b5nvIu!jh6ql
2016-01-22T15:35:48.496812Z 1 [Note] A temporary password is generated for root@localhost: (B*=T!uWJ7ws
2016-01-22T15:52:21.088610Z 1 [Note] A temporary password is generated for root@localhost: %tJXK7sytMJV
2016-01-22T16:24:41.384205Z 1 [Note] A temporary password is generated for root@localhost: lslQDvgwr3/S
2016-01-22T22:11:24.772275Z 1 [Note] A temporary password is generated for root@localhost: S4u+J,Rce_0t
[root@SERVER ~]# mysql_secure_installation
确保MySQL服务器部署的安全性。
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
Re-enter new password:
如果你看到它说
... Failed! Error: Your password does not satisfy the current policy requirements
That means your password needs to have a character such as ! . # - etc...
mix characters well, upper case, lower case, ! . , # etc...
New password:
Re-enter new password:
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y
New password:
Re-enter new password:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.
All done!
[root@SERVER ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.10 MySQL Community Server (GPL)
请看[这个视频][1]的最后10分钟,它教你如何做。
试试吧。
mysql --no-defaults --force --user=root --host=localhost --database=mysql
UPDATE user SET Password=PASSWORD('NEWPASSWORD') where USER='root';
FLUSH PRIVILEGES;