mysql_install_db:如何设置root密码

mur*_*ayc 7 mysql

mysql 5.6 似乎对 mysql_install_db 有一个新的 --random-passwords 选项,它让我发现 root 密码:http ://dev.mysql.com/doc/refman/5.6/en/mysql-install-db.html# option_mysql_install_db_random-passwords

但是我可以用 mysql 5.5 做什么?文档建议 root 密码应该为空,但我似乎无法在没有密码(或空密码)的情况下连接,所以我无法设置真正的 root 密码:

例如:

我像这样初始化数据库:

$ mysql_install_db --no-defaults --user=murrayc --datadir=/tmp/testmysql/data
Run Code Online (Sandbox Code Playgroud)

我像这样启动服务器:

$ mysqld_safe --no-defaults --user=murrayc --port=3308 --datadir='/tmp/testmysql/data' --socket='/tmp/testmysql/mysqld.sock' --pid-file='/tmp/testmysql/pid'
Run Code Online (Sandbox Code Playgroud)

但是当我尝试像这样设置 root 密码时(我相信在这种情况下 --user 指的是 mysql 用户,而不是 linux 用户):

$ mysqladmin --no-defaults --port=3308 --user=root --password='' password 'somenewpassword'
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
Run Code Online (Sandbox Code Playgroud)

Rol*_*DBA 6

安装时,root@localhost没有密码。

只需执行以下操作,您就应该能够在没有密码的情况下进行连接:

$ mysql -uroot
Run Code Online (Sandbox Code Playgroud)

请尝试以下操作:

$ mysqladmin --no-defaults --port=3308 --user=root password 'somenewpassword'
Run Code Online (Sandbox Code Playgroud)

或者你可以用顽固的方式做到:

$ service mysql restart --skip-grant-tables --skip-networking
$ mysql -e"UPDATE mysql.user SET password=password('somenewpassword') WHERE user='root'"
$ service mysql restart
$ mysql -uroot -p
Run Code Online (Sandbox Code Playgroud)

更新 2013-01-02 16:47 EDT

对不起,我忽略了端口号。

问题是:除非您使用 TCP/IP 协议,否则您不能对非 3306 端口使用 root@localhost。请试试这个:

$ mysqladmin --no-defaults --port=3308 --user=root --protocol=tcp password 'somenewpassword'
Run Code Online (Sandbox Code Playgroud)