如何重设MySQL密码

翻译自MySQL 5.5 Reference Manual

如果你没有为MySQL设置root密码,作为root连接此服务器时不需要密码。不过,这是不安全的。Section 2.11.2, “Securing the Initial MySQL Accounts”讲解了如何设置密码。

如果你知道root密码,想改变它,参阅Section 13.7.1.6, “SET PASSWORD Syntax”

如果你先前设置了root密码,但忘记了,可以设置一个新密码。下述章节提供了在Windows和Unix系统,以及任意系统中的处理方法。

1 重设root密码:Windows系统

在Windows下,使用这些步骤重设所有MySQL root账户:

  1. 使用Administrator账户登录系统。
  2. 如果MySQL正在运行,把它停掉。如果作为Windows服务运行,打开服务管理器:在“开始”菜单,选择“控制面板”,再选择“管理工具”,然后选“服务”,在列表中找到MySQL服务,把它停掉。
    如果没有作为服务运行,你可能需要使用“任务管理器”强制停止它。
  3. 创建一个文本文件,包含下面语句。把MyNewPass改为你想用的密码。
    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;

    把UPDATE和FLUSH都写为单独的一行。UPDATE语句重设所有root账户的密码,FLUSH语句告诉服务器把授权表重新加载到内存,这样修改后的密码才能生效。

  4. 保存这个文件,比如保存为C:\mysql-init.txt
  5. 打开一个命令提示符窗口:在“开始”菜单,选择“运行”然后运行cmd命令。
  6. 使用特殊的--init-file选项运行MySQL(注意选项值中是两个反斜杠):
    C:\> C:\mysql\bin\mysqld --init-file=C:\\mysql-init.txt

    如果你没有吧MySQL安装在c:\mysql,根据实际安装路径对命令进行调涨。
    MySQL启动时会执行--init-file选项所提供文件的内容,改变所有root账号的密码。
    你也可以在命令中添加--console选项,这样会把服务器输出显示在命令提示符窗口中,而不是记录在日志文件里。
    如果你使用MySQL安装精灵(Installation Wizard)安装MySQL,可能需要使用一个--defaults-file选项:

    C:\> "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld.exe"
             --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.5\\my.ini"
             --init-file=C:\\mysql-init.txt

    可以使用服务管理器查找合适的--defaults-file设置:在“开始”菜单,选择“控制面板”,再选则“管理工具”,然后选“服务”。在列表中找到MySQL服务,右击,选择“属性”选项。“可执行文件的路径”包含--defaults-file设置。

  7. MySQL成功启动后,删除C:\mysql-init.txt

你现在应该可以使用root账户的新密码连接MySQL服务器了。停止MySQL,然后按平常的方式运行它。如果MySQL作为服务运行,从Windows服务窗口启动它。如果手动启动MySQL,使用你通常使用的命令。

2 重设root密码:Unix系统

在Unix里,使用下述步骤重设所有MySQL root账户的密码。下面的说明,假设你使用通常用来运行MySQL的Unix账户登录并启动它。例如,如果平时使用mysql账户运行MySQL,在操作之前,应使用mysql账户登录系统。你还可以使用root账户登录,但在这种情况下,你必须使用--user=mysql选项启动mysqld。若没有用--user=mysql选项运行MySQL,服务器会在数据目录中创建root所有的文件(如日志文件)这会在将来启动MySQL启动时产生权限相关的问题。如果产生了这样的问题,你需要把文件所有者改为mysql或删除那些文件。

  1. 用运行mysqld的Unix用户登录系统(如mysql用户)。
  2. 找到包含服务进程ID的.pid文件。这个文件的精确路径与名称取决于操作系统的发行版本、主机名以及配置。通常的路径是/var/lib/mysql/、/var/run/mysqld/和/usr/local/mysql/data/。一般说来,文件名后缀是.pid,以mysqld或系统主机名打头。
    你可以使用.pid文件的路径名发送一个普通的kill(不是kill -9)给mysqld进程来停止MySQL:

    shell> kill `cat /mysql-data-directory/host_name.pid`

    使用反引号(不是单引号)结合cat命令,让cat的输出替换到kill命令里。

  3. 创建一个文本文件,包含下面语句。把MyNewPass改为你想用的密码。
    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;

    把UPDATE和FLUSH都写为单独的一行。UPDATE语句重设所有root账户的密码,FLUSH语句告诉服务器把授权表重新加载到内存,这样修改后的密码才能生效。

  4. 保存文件。在本例中,文件会被命名为/home/me/mysql-init。文件包含密码,因此不应保存到其它用户可以读取的位置。如果你没有用mysql账户(运行MySQL服务器的用户)登录,确保文件权限允许mysql账户读取它。
  5. 使用特殊的--init-file选项启动MySQL服务器:
    shell> mysqld_safe --init-file=/home/me/mysql-init &

    MySQL启动时会执行--init-file选项所提供文件的内容,改变所有root账号的密码。

  6. MySQL成功启动后,删除/home/me/mysql-init

你现在应该可以使用root账户的新密码连接MySQL服务器了。停止MySQL,然后按平常的方式运行它。

3 重设root密码:通用方法

前面两节说明了如何在Windows和Unix系统重设密码。在任意平台,你可以使用mysql客户端设置新密码(但这一方法较不安全):

  1. 停止mysqld,使用--skip-grant-tables选项重新运行它。这会允许任何人不需要密码就可以连接数据库,同时拥有所有权限。由于这是不安全的,你可能会希望把--skip-grant-tables和--skip-networking结合使用,以阻止远端客户端的连接。
  2. 用这个命令连接mysqld服务器:
    shell> mysql
  3. 在mysql客户端发出下面指令。把MyNewPass改成你想用的密码。
    mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
        ->                   WHERE User='root';
    mysql> FLUSH PRIVILEGES;

    FLUSH语句告诉服务器把授权表重新加载到内存,这样修改后的密码才能生效。

你现在应该可以使用root账户的新密码连接MySQL服务器了。停止MySQL,然后按平常的方式运行它(不使用--skip-grant-tables和--skip-networking选项)。

Visits: 246

此条目发表在Linux分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

12 + 5 =