在 macOS 上安装 MySQL 的方法

412

我正在尝试使用Homebrew通过brew install mysql 5.1.52在Mac OS 10.6上设置MySQL。

一切进行的都很顺利,我也成功运行了mysql_install_db
但是当我尝试使用以下命令连接服务器时:

/usr/local/Cellar/mysql/5.1.52/bin/mysqladmin -u root password 'mypass'
我收到以下错误信息:
/usr/local/Cellar/mysql/5.1.52/bin/mysqladmin: connect to server at 'localhost' 
failed error: 'Access denied for user 'root'@'localhost' (using password: NO)'
我已尝试使用-u root -proot访问mysqladminmysql,但无论是否输入密码都无法正常工作。
这是在全新的机器上进行的全新安装,据我所知新安装必须在没有根密码的情况下可访问。我还尝试了:
/usr/local/Cellar/mysql/5.1.52/bin/mysql_secure_installation

但同时也出现了以下错误:

ERROR 1045(28000):访问被拒绝,因为使用者“root@localhost”(未提供密码)

参见:http://apple.stackexchange.com/a/199747/152271 ... 它不是brew install,但当这里的所有答案都无法解决问题时,它对我有用。 - sudo rm -rf slash
1
就我个人而言,我使用了 mysql -u root 并且在这里工作了 :| - rogerdpack
17个回答

764

我认为在安装较旧版本的MySQL时,可能会遇到这种情况。我曾经遇到过同样的问题,上面提到的解决方案都不起作用。我通过以下方法解决了它:

使用brew的removecleanup命令,卸载launchctl脚本,然后删除/usr/local/var中的mysql目录,删除现有的/etc/my.cnf文件(如果适用则由你决定),以及launchctl plist。

更新plist文件的字符串。此外,你的替代安全脚本目录将基于你安装的MySQL版本而定。

步骤如下:

brew remove mysql

brew cleanup

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

sudo rm -rf /usr/local/var/mysql

我然后从头开始:

  1. 使用 brew install mysql 安装了 MySQL。
  2. 执行了 brew 命令建议的命令:(见注释:下面)

    unset TMPDIR
    
    mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
    
  3. 使用mysql.server start命令启动mysql,以便能够登录

  4. 使用备用安全脚本:

  5. /usr/local/Cellar/mysql/5.5.10/bin/mysql_secure_installation
    
  6. 按照brew软件包脚本输出中的launchctl部分进行操作,例如:

    #start
    launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
    
    #stop
    launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
    

    注意:brew cleanup命令中的--force选项也会清理过时的依赖包,这是Homebrew的一个比较新的功能。

    第二个注意事项:某位评论者称步骤2不是必需的。我没有进行测试,所以可能因人而异!


38
非常好的回答,谢谢!有一件事要补充:虽然在回答中提到了这一点,但我错过了它,结果花了大约6个小时才在Lion OSX上完成设置。确保在重新安装之前删除位于 /usr/local/var/mysql 的旧 mysql 目录。否则,您将无法最初以 root 身份登录以设置密码,并且您将花费很多时间在电脑前叫嚷。 - tronbabylove
3
进入~/Library/LaunchAgents文件夹,查看实际上MySQL的.plist文件叫什么 - 在我的情况下,它是由Homebrew安装的,所以你需要修改上述的卸载步骤。 - Marco
8
由于此线程已经过时,上面的“launchctl unload”行不再正确。 Homebrew安装的文件不再称为“com.mysql.mysqld.plist”,而是称为“homebrew.mxcl.mysql.plist”。现在应该将该行更改为“launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist”。 - Tommy
4
我在 ~/Library/LaunchAgents 下有以下文件:com.adobe.ARM.202f4087f2bbde52e3ac2df389f53a4f123223c9cc56a8fd83a6f7ae.plistcom.mysql.mysqld.plistcom.facebook.videochat.ava.plist。但是卸载它们时出现了 launchctl: Couldn't stat("com.mysql.mysqld.plist"): No such file or directory 的错误提示。 - Ava
14
现在可以省略mysql_install_db,brew会自动在正确的目录下创建服务器。 - rfreytag
显示剩余17条评论

80

以下是将从您的Mac中彻底删除所有MySQL,然后按照Sedorner在上面写的方法通过Brew安装它的详细说明:

根据Tech Lab完全删除MySQL

  • ps -ax | grep mysql
  • 停止并kill任何MySQL进程
  • sudo rm /usr/local/mysql
  • sudo rm -rf /usr/local/var/mysql
  • sudo rm -rf /usr/local/mysql*
  • sudo rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
  • sudo rm -rf /Library/StartupItems/MySQLCOM
  • sudo rm -rf /Library/PreferencePanes/My*
  • launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
  • 编辑/etc/hostconfig并删除行MYSQLCOM=-YES-
  • rm -rf ~/Library/PreferencePanes/My*
  • sudo rm -rf /Library/Receipts/mysql*
  • sudo rm -rf /Library/Receipts/MySQL*
  • sudo rm -rf /private/var/db/receipts/*mysql*
  • sudo rm -rf /tmp/mysql*
  • 尝试运行mysql,它不应该起作用

根据用户Sedorner在StackOverflow答案中使用Brew安装MySQL

  • brew doctor并修复任何错误

  • brew remove mysql

  • brew cleanup

  • brew update

  • brew install mysql

  • unset TMPDIR

      mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp # whoami is executed inline
    
  • mysql.server start

  • 运行Brew建议的命令,将MySQL添加到launchctl,使其在启动时自动启动

mysql现在应该可以正常工作并一直运行

祝你好运。


5
在没有先移除 /tmp/mysql.sock 的情况下执行以上操作,我也遇到了麻烦。 - TKH
1
确认 - whoami 是我的名字(我使用了 root)。这非常有效。 - YPCrumble
2
请注意,Yosemite及更高版本中不存在/etc/hostconfig文件(http://superuser.com/questions/850974/has-etc-hostconfig-actually-gone-away) - ecbrodie
1
这个方法对我也起作用了,当我尝试 mysql -u root 时,我遇到了“插件未安装”的问题。唯一似乎对我无效的步骤是 mysql_install_db --verbose --user=whoami--basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp,因为它包含了无法识别的选项。 - Matt Rowles
将您的数据库备份,然后导入到新安装中。 - corysimmons
显示剩余7条评论

46

遇到了同样的问题。看起来设置说明或正在创建的初始表格存在问题。以下是我在我的机器上运行mysqld的方法。

如果mysqld服务器已经在您的Mac上运行,请使用以下命令停止它:

launchctl unload -w ~/Library/LaunchAgents/com.mysql.mysqld.plist

使用下面的命令启动mysqld服务器,该命令允许任何人以完全权限登录。

mysqld_safe --skip-grant-tables

然后运行 mysql -u root,现在应该可以成功登录而无需密码。接下来的命令应该重置所有root密码。

UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root'; FLUSH PRIVILEGES;

现在,如果您杀死运行中的mysqld_safe副本并重新启动它而不带skip-grant-tables选项,则应该能够使用mysql -u root -p和您刚刚设置的新密码登录。


1
这对我有用!在尝试这个方法之前,我也开始猜测密码,结果密码是“password”。所以你可以试试。 - cointilt
启动 mysqld_safe 没有授权表对我有效。然而,更新操作没有成功,因为我在 select * from mysql.user 中没有任何记录。既然我们已经作为 root 用户登录了,我们可以通过运行 GRANT ALL PRIVILEGES ON . TO 'root'@'localhost' IDENTIFIED BY 'whatever'; FLUSH PRIVILEGES; 来为 root 用户插入一个。 - rup3rt
我正在使用停止服务/脚本,但它一直重新启动。那是因为我从未卸载LaunchAgent吗?(哎呀) - reneruiz
1
对我有效的是类似于你所做的事情。在你更新用户密码的部分,我必须执行以下操作:use mysql; update user set authentication_string=password('1111') where user='root'; 就像这样:https://dev59.com/m10a5IYBdhLWcg3wHlik#31122246 - ruhanbidart

21

Homebrew

  1. 首先,请确保您已安装Homebrew
  2. 运行brew doctor并解决Homebrew要求您修复的任何问题
  3. 运行brew install mysql
  4. 运行brew services restart mysql
  5. 运行mysql.server start
  6. 运行mysql_secure_installation

19
如果brew安装的是MySQL 5.7版本,则重置root密码的过程与以前的版本有所不同。要重置密码,请按照以下步骤进行:
sudo rm -rf /usr/local/var/mysql
mysqld --initialize

一个临时密码将会被打印到控制台上,它只能用于更新根密码:

mysql.server start
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'my-new-password';" | mysql -uroot --password=TEMPORARY_PASSWORD

3
我能看到生成的临时密码,但当我尝试运行mysql时,出现了以下错误:ERROR!The server quit without updating PID file (/usr/local/var/mysql/XXXXX.local.pid)。当我尝试使用mysql -u root命令时,密码无法被接受。 - markphd
1
我使用dmg安装程序成功安装了mysql 5.7.9,它弹出了一个窗口并生成了一个临时密码。现在mysql正常工作。很遗憾,我不得不花费大量时间才能让它在全新的Macbook上运行。 :| - markphd
1
@forloop
  1. ps -ef | grep mysql
  2. kill -9 pid
  3. mysql.server start
  4. ps -ef | grep mysql
  5. kill -9 pid
  6. mysql.server start
- oshaiken
对我来说,重置/更改密码的方法都不起作用。我必须使用临时密码登录mysql,然后运行alter命令:1. mysql -u root -p <temp-password> 2. ALTER USER 'root'@'localhost' IDENTIFIED BY 'New-Password'; - Test Test

8
我刚刚遇到了同样的问题。如果你运行brew info mysql并按照步骤操作,那么根密码应该是new-password,如果我没记错的话。我看到了和你一样的情况。这篇文章对我帮助很大。
结果发现我没有任何一个账户被创建。当我运行mysqld_safe后登录并执行select * from user;时,没有返回任何行。我打开MySQLWorkbench并使用正在运行的mysqld_safe添加了一个拥有我期望的所有权限的root账户。现在我的问题已经解决了。

8

好的,我遇到了同样的问题并解决了它。由于某种原因,当使用Homebrew安装mysql时,mysql_secure_installation脚本不能直接使用,因此我手动进行了操作。在CLI中输入:

mysql -u root

那应该可以让你进入mysql。现在按照以下步骤进行操作(来自mysql_secure_installation):
UPDATE mysql.user SET Password=PASSWORD('your_new_pass') WHERE User='root';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'
DROP DATABASE test;
FLUSH PRIVILEGES;

现在退出并重新进入mysql: mysql -u root -p

1
这个解决方案对我不起作用,因为mysql -u root没有带我进入mysql提示符。它说访问被拒绝,用户'root'@'localhost'(使用密码:NO)。 - Nick Vanderbilt
你之前在这台机器上安装过MySQL吗? - Darren Newton

7

如果MySQL已经被安装

彻底停止MySQL。

  1. mysql.server stop <-- 根据你的版本进行必要的修改
  2. ps -ef | grep mysql <-- 列出所有名字中带有MySQL的进程
  3. kill [PID] <-- 通过进程ID杀掉进程

删除文件。上面的指令是正确的,我会再添加以下内容:

  1. sudo find /. -name "*mysql*"
  2. 按照自己的判断,rm -rf 这些文件。请注意许多程序都含有与MySQL相关的驱动程序,请不要删除这些内容,比如PHP安装目录下的文件就不能删除,但MySQL的目录下的内容可以删除。

安装

希望你已经有了Homebrew,如果没有请下载。

我喜欢以root身份运行brew,但我认为这不是必须的。2018年更新:你现在无法以root身份运行brew。

  1. sudo brew update
  2. sudo brew install cmake <-- MySQL依赖项,非常有用
  3. sudo brew install openssl <-- MySQL依赖项,非常有用
  4. sudo brew info mysql <-- 过一遍这个指令...了解即将发生的事情
  5. sudo brew install mysql --with-embedded; say done <-- 安装带嵌入式服务器的MySQL。会在安装完成时通知你。(我的安装花费了10分钟)

安装之后

  1. sudo chown -R mysql /usr/local/var/mysql/ <-- 在我运行这个命令之前,MySQL无法正常工作
  2. sudo mysql.server start <-- 语法可能略有不同,请根据自己的情况进行修改
  3. 在MySQL中创建用户(http://dev.mysql.com/doc/refman/5.7/en/create-user.html)。记住为root用户添加密码。

3

TL;DR

在使用Brew安装MySQL后,MySQL服务器可能没有运行。尝试使用brew services start mysql或者mysql.server start命令启动MySQL服务。

Full Story:

我在一台新的运行Sierra操作系统的MacBook Pro上安装了MySQL(稳定版)5.7.17,并在运行mysql_secure_installation时遇到了错误:

Securing the MySQL server deployment.

Enter password for user root: 
Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

什么?

根据Brew提供的安装信息,mysql_secure_installation应该提示我...保护安装。我猜测MySQL服务器可能没有运行,果然如此。运行brew services start mysql,然后再运行mysql_secure_installation就可以完美解决。


2

这是MySQL 5.7的更新:

bash --version
GNU bash,版本4.4.12(1)-release(x86_64-apple-darwin17.0.0)
版权所有(C)2016自由软件基金会
许可证GPLv3 +:GNU GPL第3版或更高版本
这是免费软件;您可以自由更改和重新发布它。 在法律允许的范围内,没有保修。
#======================================== brew --version Homebrew 1.7.6 Homebrew / homebrew-core(git修订版eeb08;最后提交日期2018-09-27) Homebrew / homebrew-cask(git修订版c9f62;最后提交日期2018-09-27)
#======================================== mysql --version mysql Ver 14.14 Distrib 5.7.23,for osx10.13(x86_64)using EditLine wrapper #======================================== system_profiler SPSoftwareDataType 软件:
系统软件概述:
系统版本:macOS 10.13.3(17D47) 内核版本:Darwin 17.4.0 引导卷:Macintosh HD 引导模式:正常 计算机名称:EdisonMacHomeBj 用户名:Edison(edison) 安全虚拟内存:已启用 系统完整性保护:已禁用 启动后时间:6天23:13
brew remove mysql@5.7
brew cleanup
mv /usr/local/var/mysql /usr/local/var/mysql.bak
brew install mysql@5.7
rm -rf /usr/local/var/mysql
#======================================== mysqld --initialize 2018-09-28T04:54:06.526061Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2018-09-28T04:54:06.542625Z 0 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive 2018-09-28T04:54:07.096637Z 0 [Warning] InnoDB: New log files created, LSN=45790 2018-09-28T04:54:07.132950Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2018-09-28T04:54:07.196824Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 87cf2f10-c2da-11e8-ac2d-ba163df10130. 2018-09-28T04:54:07.224871Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2018-09-28T04:54:07.366688Z 0 [Warning] CA certificate ca.pem is self signed. 2018-09-28T04:54:07.457954Z 1 [Note] A temporary password is generated for root@localhost: kq3K=JR8;GqZ
#======================================== mysql_secure_installation -uroot -p"kq3K=JR8;GqZ" mysql_secure_installation: [Warning] Using a password on the command line interface can be insecure.
保护MySQL服务器部署。
用户帐户root的现有密码已过期。请设置新密码。
新密码:
重新输入新密码:
VALIDATE PASSWORD PLUGIN可用于测试密码并提高安全性。它检查密码的强度,并允许用户仅设置足够安全的密码。您是否要设置VALIDATE PASSWORD插件?
按y | Y表示是,按其他键表示否:n 使用root的现有密码。 更改root的密码?(按y | Y表示是,按其他键表示否):y
新密码:
重新输入新密码: 默认情况下,MySQL安装具有匿名用户,允许任何人登录MySQL而无需为他们创建用户帐户。这仅用于测试,并使安装变得更加顺畅。在进入生产环境之前,应将其删除。
删除匿名用户?(按y | Y表示是,按其他键表示否):y 成功。
通常,root只应允许从'localhost'连接。这可以确保某人不能从网络猜测根密码。
禁止远程登录root?(按y | Y表示是,按其他键表示否):n
... 跳过。 默认情况下,MySQL带有一个名为'test'的数据库,任何人都可以访问它。这也仅用于测试,在进入生产环境之前应将其删除。
删除测试数据库及其访问权限?(按y | Y表示是,按其他键表示否):n
... 跳过。 重新加载权限表将确保所有已进行的更改立即生效。
现在重新加载权限表吗?(按y | Y表示是,按其他键表示否):y 成功。
全部完成!

当从“mysql.bak”复制整个数据库时,它无法工作 :( - Jahirul Islam Mamun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接