翻译自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账户:
- 使用Administrator账户登录系统。
- 如果MySQL正在运行,把它停掉。如果作为Windows服务运行,打开服务管理器:在“开始”菜单,选择“控制面板”,再选择“管理工具”,然后选“服务”,在列表中找到MySQL服务,把它停掉。
如果没有作为服务运行,你可能需要使用“任务管理器”强制停止它。 - 创建一个文本文件,包含下面语句。把MyNewPass改为你想用的密码。
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES;
把UPDATE和FLUSH都写为单独的一行。UPDATE语句重设所有root账户的密码,FLUSH语句告诉服务器把授权表重新加载到内存,这样修改后的密码才能生效。
- 保存这个文件,比如保存为
C:\mysql-init.txt
。 - 打开一个命令提示符窗口:在“开始”菜单,选择“运行”然后运行
cmd
命令。 - 使用特殊的--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设置。
- 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或删除那些文件。
- 用运行mysqld的Unix用户登录系统(如mysql用户)。
- 找到包含服务进程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命令里。
- 创建一个文本文件,包含下面语句。把MyNewPass改为你想用的密码。
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES;
把UPDATE和FLUSH都写为单独的一行。UPDATE语句重设所有root账户的密码,FLUSH语句告诉服务器把授权表重新加载到内存,这样修改后的密码才能生效。
- 保存文件。在本例中,文件会被命名为
/home/me/mysql-init
。文件包含密码,因此不应保存到其它用户可以读取的位置。如果你没有用mysql账户(运行MySQL服务器的用户)登录,确保文件权限允许mysql账户读取它。 - 使用特殊的--init-file选项启动MySQL服务器:
shell> mysqld_safe --init-file=/home/me/mysql-init &
MySQL启动时会执行--init-file选项所提供文件的内容,改变所有root账号的密码。
- MySQL成功启动后,删除
/home/me/mysql-init
。
你现在应该可以使用root账户的新密码连接MySQL服务器了。停止MySQL,然后按平常的方式运行它。
3 重设root密码:通用方法
前面两节说明了如何在Windows和Unix系统重设密码。在任意平台,你可以使用mysql客户端设置新密码(但这一方法较不安全):
- 停止mysqld,使用--skip-grant-tables选项重新运行它。这会允许任何人不需要密码就可以连接数据库,同时拥有所有权限。由于这是不安全的,你可能会希望把--skip-grant-tables和--skip-networking结合使用,以阻止远端客户端的连接。
- 用这个命令连接mysqld服务器:
shell> mysql
- 在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选项)。
Views: 248