在macports中重置mysql root密码

时间:2011-06-06 12:34:09

标签: mysql macos osx-snow-leopard macports

我刚刚在Snow Leopard上通过macports 1.9.2安装了macports。现在我不能使用mysql,因为好像我不知道密码。

$ sudo mysql5 -u root -p 
Enter password:  
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

我不确定这是安装或使用中的错误,还是我忘了密码,但我想我需要重置密码。怎么做?

更新:我可以启动和停止我的MySql服务器,所以它不应该被破坏,但我没有像$ sudo / opt / local / lib / mysql5 / bin / mysqld_safe5这样的命令。

$ ls /opt/local/lib/mysql5/bin/
innochecksum            mysql_client_test       mysql_secure_installation   mysqlbinlog         mysqlimport         ndb_drop_index          ndb_select_all          resolve_stack_dump
msql2mysql          mysql_client_test_embedded  mysql_setpermission     mysqlbug            mysqlshow           ndb_drop_table          ndb_select_count        resolveip
my_print_defaults       mysql_config            mysql_tzinfo_to_sql     mysqlcheck          mysqlslap           ndb_error_reporter      ndb_show_tables
myisam_ftdump           mysql_convert_table_format  mysql_upgrade           mysqld_multi            mysqltest           ndb_mgm             ndb_size.pl
myisamchk           mysql_find_rows         mysql_waitpid           mysqld_safe         mysqltest_embedded      ndb_print_backup_file       ndb_test_platform
myisamlog           mysql_fix_extensions        mysql_zap           mysqldump           ndb_config          ndb_print_schema_file       ndb_waiter
myisampack          mysql_fix_privilege_tables  mysqlaccess         mysqldumpslow           ndb_delete_all          ndb_print_sys_file      perror
mysql               mysql_install_db        mysqladmin          mysqlhotcopy            ndb_desc            ndb_restore         replace

3 个答案:

答案 0 :(得分:16)

首先,您需要确保数据库已停止:

$ sudo /opt/local/share/mysql5/mysql/mysql.server stop 

现在您应该通过 mysqld_safe 命令在后台启动数据库:

$ sudo /opt/local/lib/mysql5/bin/mysqld_safe --skip-grant-tables &

现在服务器正在运行 --skip-grant-tables 标志,你可以在没有密码的情况下连接到它并完成工作:

 $ sudo mysql5 --user=root mysql
 Enter password:

 mysql> update user set Password=PASSWORD('new-password-here') WHERE User='root';
 Query OK, 2 rows affected (0.04 sec)
 Rows matched: 2  Changed: 2  Warnings: 0

 mysql> flush privileges;
 Query OK, 0 rows affected (0.02 sec)

 mysql> exit
 Bye

既然你已经完成了这一点,你只需要停止服务器,这样你就可以回到运行安全的MySQL服务器,并且有密码限制。首先通过输入“ fg ”将您启动的服务器置于前台,然后按“ Ctrl + c ”将其终止。

现在可以启动服务器了:

$ sudo /opt/local/share/mysql5/mysql/mysql.server start

答案 1 :(得分:6)

我遇到了同样的问题。当尝试重置密码时(如同建议的develroot),我也得到了:

Rows matched: 0 Changed: 0 Warnings: 0

所以从来没有创建root用户。除了develroot的答案之外,我还采取了以下步骤:

flush privileges;
CREATE USER 'root'@'localhost' IDENTIFIED BY 'root'
GRANT ALL ON *.* TO 'root'@'localhost'

答案 2 :(得分:2)

这是我的修复。

运行后:sudo -u mysql mysql_install_db5

我收到了这个错误:

ERROR: 1004  Can't create file '/var/tmp/#sql180bd_1_0.frm' (errno: 9)
121221  2:06:21 [ERROR] Aborting

与之前的报告相同,我的用户表是空的---所有的mysql表都是emtpy

最终,我想出了这样做:

  1. 以安全模式运行mysqld。

    sudo / opt / local / bin / mysqld_safe5 --skip-grant-tables&

  2. 登录并删除损坏的mysql数据库

    $ mysql5 $ mysql> DROP TABLE mysql;

  3. 将mysql_install_db5重新运行为ROOT而不是mysql,这样它至少可以完成工作

    $ sudo -u root mysql_install_db5

  4. 然后返回并将/ opt / local / var / db / mysql5中的所有内容chown到mysql:mysql,因为它需要。

    $ sudo chown -R mysql:mysql / opt / local / var / db / mysql5 / $ sudo chown -R mysql:mysql / opt / local / var / run / mysql5 / $ sudo chown -R mysql:mysql / opt / local / var / log / mysql5 /

  5. 之后一切正常,谢谢。