注意:5.7版本 其他的见各个版本文档
How to Reset the Root Password
If you have never assigned a
root
password for MySQL, the server does not require a password at
all for connecting as
root
. However, this is insecure. For instructions on assigning a password, see
Section 2.10.4, “Securing the Initial MySQL Account”
.
If you know the
root
password and want to change it, see
Section 13.7.1.1, “ALTER USER
Statement”
, and
Section 13.7.1.7, “SET PASSWORD Statement”
.
If you assigned a
root
password previously but have forgotten it, you can assign a new password. The
following sections provide instructions for Windows and Unix and Unix-like systems, as well as generic
instructions that apply to any system.
Resetting the Root Password: Windows Systems
略
Resetting the Root Password: Unix and Unix-Like Systems
On Unix, use the following procedure to reset the password for the MySQL
'root'@'localhost'
account. To change the password for a
root
account with a different host name part, modify the
instructions to use that host name.
The instructions assume that you start the MySQL server from the Unix login account that you normally
use for running it. For example, if you run the server using the
mysql
login account, you should log
in as
mysql
before using the instructions. Alternatively, you can log in as
root
, but in this case you
must
start
mysqld
with the
--user=mysql
option. If you start the server as
root
without using
--
user=mysql
, the server may create
root
-owned files in the data directory, such as log files, and
these may cause permission-related problems for future server startups. If that happens, you must
either change the ownership of the files to
mysql
or remove them.
1. Log on to your system as the Unix user that the MySQL server runs as (for example,
mysql
).
2. Stop the MySQL server if it is running. Locate the
.pid
file that contains the server's process ID.
The exact location and name of this file depend on your distribution, host name, and configuration.
Common locations are
/var/lib/mysql/
,
/var/run/mysqld/
, and
/usr/local/mysql/
data/
. Generally, the file name has an extension of
.pid
and begins with either
mysqld
or your
system's host name.
Stop the MySQL server by sending a normal
kill
(not
kill -9
) to the
mysqld
process. Use the
actual path name of the
.pid
file in the following command:
shell>
kill `cat /mysql-data-directory/host_name.pid`
(注:这步的作用是杀掉mysql,执行完该命令后一定要确定mysql被杀掉了;停止mysqld是重置密码的前提;如果杀不掉那么请思考另外的办法,确保在mysql未运行的情况执行后续命令,例如开机后不自动启动mysql)
( 注:
host_name.pid 是记录mysql运行进程号的文件,也可以不通过该文件,而是通过ps获取mysql正在运行的进程号)
Use backticks (not forward quotation marks) with the
cat
command. These cause the output of
cat
to be substituted into the
kill
command.
3. Create a text file containing the password-assignment statement on a single line. Replace the
password with the password that you want to use.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
(注:这条语句是修改密码的语句,需要协助text文本中,如果这条语句在后序操作中执行不成功,或执行后密码没有被重置,则尝试执行另外一条语句(后面会提到))
4. Save the file. This example assumes that you name the file
/home/me/mysql-init
. The file
contains the password, so do not save it where it can be read by other users. If you are not logged
in as
mysql
(the user the server runs as), make sure that the file has permissions that permit
mysql
to read it.
(注:意思是确保上面的文件的可读性)
5
5. Start the MySQL server with the
init_file
system variable set to name the file:
shell>
mysqld --init-file=/home/me/mysql-init &
(注:执行该语句的时候会提示你,是start?stop?restart?。。。
这时候需要补全语句,例如:补全后的效果
/etc/rc.d/init.d/mysqld start --init-file=/home/me/mysql-init
& 根据需要选择保留与否;补充的一般是start 因为我们要启动mysql
)
The server executes the contents of the file named by the
init_file
system variable at startup,
changing the
'root'@'localhost'
account password.
Other options may be necessary as well, depending on how you normally start your server. For
example,
--defaults-file
may be needed before the
init_file
argument.
(注:这步是有可能执行不成功的,可能是文本里面的sql语句有语病(我复制的时候就少了个字母),也有可能是其他原因。如果执行成功了会提示:
successfully;否则要么报错,要么没反应,这说明没有执行成功。这步成功了密码也就重置成功了,否则不成功
)
6. After the server has started successfully, delete
/home/me/mysql-init
.
You should now be able to connect to the MySQL server as
root
using the new password. Stop the
server and restart it normally.
If the
ALTER USER
statement fails to reset the password, try repeating the procedure using the
following statements to modify the
user
table directly:
(注:如果上面的步骤操作之后,密码不对。那么用以下sql替换前面的sql语句,重新安照前面的程序来走一边(我在实际的操作过程中,就遇到了这样的情况,并且这样做,然后成功重置了密码))
(这就是前面提到过的:尝试执行另外一条语句)
UPDATE mysql.user
SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;