brew在macOS上安装mysql


343

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

一切顺利,我也成功了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:连接到“ localhost”服务器 
失败的错误:“对用户'root'@'localhost'的访问被拒绝(使用密码:否)'

我也尝试过访问mysqladmin or mysql using -u root -proot
但是使用或不使用密码都无法使用。

这是一台全新机器上的全新安装,据我所知,必须使用root用户密码才能访问该新安装。我也尝试过:

/usr/local/Cellar/mysql/5.1.52/bin/mysql_secure_installation

但我也得到

错误1045(28000):用户'root'@'localhost'的访问被拒绝(使用密码:NO)


另请参阅:apple.stackexchange.com/a/199747/152271 ...这不是brew install,但是当这里没有任何答案时,它对我有用
sudo rm -rf斜杠

1
我使用的FWIW mysql -u root在这里有效:|
rogerdpack

Answers:


683

我认为使用已安装的旧版本mysql可以最终胜任这一职位。我遇到了同样的问题,以上解决方案均不适合我。我这样修复:

使用brew的removecleanup命令,卸载launchctl脚本,然后删除中的mysql目录/usr/local/var,删除我现有的/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. 安装了MySQL brew install 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. 使用了备用安全脚本:

    /usr/local/Cellar/mysql/5.5.10/bin/mysql_secure_installation
  5. 遵循launchctlbrew包脚本输出中的部分,例如,

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

注意:--forcebrew cleanup也将清除过时的小桶,认为这是一种新的自制功能。

请注意第二点:评论者说不需要步骤2。我不想测试它,所以YMMV!


30
好答案,谢谢!要添加的一件事:尽管答案中提到了它,但我还是错过了它,这样就花了大约6个小时试图在Lion OSX上进行设置。如果重新安装之前具有MySql的先前版本,请绝对确保删除/ usr / local / var / mysql上的旧mysql目录。否则,您最初将无法以root用户身份登录以设置密码,并且将花费大量时间大喊大叫。
tronbabylove 2012年

3
进入〜/ Library / LaunchAgents来查看mysql的.plist文件实际上是什么-在我的情况下,它是由Homebrew安装的,因此您需要修改上述卸载过程。
马可(Marco)

7
由于此线程较旧,因此上面的“ launchctl unload”行现在是错误的。自制安装的文件不再称为“ com.mysql.mysqld.plist”,而称为“ homebrew.mxcl.mysql.plist”。该行现在应显示为“ launchctl unload -w〜/ Library / LaunchAgents / homebrew.mxcl.mysql.plist”
Tommy

4
我有[〜/ Library / LaunchAgents] $ ls com.adobe.ARM.202f4087f2bbde52e3ac2df389f53a4f123223c9cc56a8fd83a6f7ae.plist com.mysql.mysqld.plist com.facebook.videochat.ava.plist`homebrew.mx.sql' / LaunchAgents`,但将其卸载会产生launchctl: Couldn't stat("com.mysql.mysqld.plist"): No such file or directory
Ava

9
现在可以省略mysql_install_db,brew在正确的目录中自动创建服务器。
rfreytag 2014年

52

这是详细的说明,结合了从Mac删除所有MySQL,然后按照Sedorner上面的描述安装The Brew Way的方法:

根据技术实验室完全删除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,它不起作用

从此StackOverflow答复中按用户Sedorner进行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 现在应该可以正常工作并一直在运行

上帝的速度。


3
我还因为没有完全删除/tmp/mysql.sock而被上述所有方法所困扰。
TKH 2014年

谢谢,+ 1。几个注释:您对sudo rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist进行了说,然后过了几步便尝试launchctl unload对该文件进行操作...但是该文件将不存在,因为您已将其删除。另外,为我brew install mysql执行此mysql_install_db步骤,无需重复两次。
Madbreaks 2014年

@CorySimmons是否表示我应该使用自己的名称,还是rootwhoami您的命令中使用?
YPCrumble 2015年

1
确认-whoami是我的名字(我使用root)。这很棒。
YPCrumble 2015年

请注意,/etc/hostconfig不能在优胜美地超越(存在superuser.com/questions/850974/...
ecbrodie

44

有同样的问题。似乎设置说明或正在创建的初始表有问题。这就是我的机器上运行mysqld的方式。

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

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和刚设置的新密码登录。


这对我有用!在尝试此操作之前,我开始猜测密码,最终密码为“密码”。所以尝试一下。
cointilt 2011年

在没有授予表的情况下启动mysqld_safe对我有用。但是,由于我在mysql.user的select *上没有任何记录,因此UPDATE无效。由于我们已经以root用户身份登录,因此只需运行GRANT ALL PRIVILEGES ON即可为root用户插入一个TO'root'@'localhost'由'whatever'标识;冲洗特权;
罗珀特

我正在使用停止服务/脚本,并且它不断重新启动。那是因为我从未卸载过LaunchAgent吗?(doh)
reneruiz 2014年

1
对我有用的东西与您所做的类似。在更新用户密码的部分中,我必须做的是:使用mysql; 更新用户集authentication_string = password('1111'),其中user ='root'; 如:stackoverflow.com/a/31122246/1328261
ruhanbidart

16

如果brew安装MySQL 5.7,则此过程与以前的版本有所不同。为了重置根密码,请按照下列步骤操作:

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

临时密码将被打印到控制台,并且只能用于更新root密码:

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

2
我可以看到生成的临时密码,但是当我尝试运行mysql时,我得到了:ERROR! The server quit without updating PID file (/usr/local/var/mysql/XXXXX.local.pid).当我执行mysql -u root时,密码不被接受。
forloop

1
我使用dmg安装程序成功安装了mysql 5.7.9,这提示我一个窗口,该窗口为我生成了临时密码。现在mysql可以正常工作了。太糟糕了,我不得不花大量的时间才能让它在全新的Macbook上运行。:|
forloop

1
@forloop 1. ps -ef | grep mysql 2. kill -9 pid 3. mysql.server start
oshaiken

对我来说,上述重设/更改密码无效。我不得不使用临时密码登录到MySQL然后运行alter命令1 mysql -u root -p <temp-password> 2ALTER USER 'root'@'localhost' IDENTIFIED BY 'New-Password';
测试测试

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'的访问被拒绝(使用密码:否)
Nick Vanderbilt 2010年

您以前在该计算机上安装过MySQL吗?
达伦·牛顿

8

我刚才有同样的问题。如果您brew info mysql按照步骤进行操作,new-password那么如果我没有记错的话,似乎应该是root密码。我看到的是你看到的同样的东西。这篇文章对我的帮助最大。

原来我没有为我创建任何帐户。当我运行后登录时mysqld_safe,没有select * from user;返回任何行。我在mysqld_safe运行时打开了MySQLWorkbench,并添加了一个root具有我期望的所有privs 的帐户。现在这对我来说很好。


7

如果已经安装了mysql

完全停止mysql。

  1. mysql.server stop <-可能需要根据您的版本进行编辑
  2. ps -ef | grep mysql <-列出名称为mysql的进程
  3. kill [PID] <-通过PID终止进程

删除文件。上面的说明很好。我将添加:

  1. sudo find /. -name "*mysql*"
  2. 根据您的判断,rm -rf这些文件。请注意,许多程序都有您不想删除的mysql驱动程序。例如,不要删除PHP安装目录中的内容。不要在自己的mysql目录中删除内容。

安装

希望你有自制的。如果没有,请下载。

我喜欢以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

酿造信息mysql

mysql: stable 5.6.12 (bottled)
http://dev.mysql.com/doc/refman/5.6/en/
Conflicts with: mariadb, mysql-cluster, percona-server
/usr/local/Cellar/mysql/5.6.12 (9363 files, 353M) *
  Poured from bottle
From: https://github.com/mxcl/homebrew/commits/master/Library/Formula/mysql.rb
==> Dependencies
Build: cmake
==> Options
--enable-debug
    Build with debug support
--enable-local-infile
    Build with local infile loading support
--enable-memcached
    Enable innodb-memcached support
--universal
    Build a universal binary
--with-archive-storage-engine
    Compile with the ARCHIVE storage engine enabled
--with-blackhole-storage-engine
    Compile with the BLACKHOLE storage engine enabled
--with-embedded
    Build the embedded server
--with-libedit
    Compile with editline wrapper instead of readline
--with-tests
    Build with unit tests
==> Caveats
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.

To connect:
    mysql -uroot

To reload mysql after an upgrade:
    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

mysql.service启动

. ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid).

或mysql -u root

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

我正在寻找解决方案一段时间,但无法解决我的问题。我在stackoverflow.com上尝试了几种解决方案,但这无济于事。


4
如果您以root身份运行sudo chown -R mysql /usr/local/var/mysql/,请尝试先运行,然后再运行(使用root用户开始时,MySQL服务器会降级为该用户)。mysql.server startmysql.server_mysql
罗里森·弗雷塔斯

嘿,您碰巧找到了解决此问题的方法吗?
KcC0

OMG,题量和1000个回答这个问题......想我就brew install redisTBH
Danyal艾泰金

3

TL; DR

使用Brew安装后,MySQL服务器可能未运行。尝试brew services start mysql或只是mysql.server start不想让MySQL作为后台服务运行。

全文:

我刚刚在运行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像魅力一样运转。


1

通过授予mysql的Grant权限命令来尝试


问题是通过brew安装后,我根本无法访问mysql服务器。我可以启动它,但是无论有没有密码,它都不允许我以root用户身份进入。(因此,我无法创建其他用户或管理权限。。或者我不明白您的意思吗?
nikola 2010年

1

当将brew与最新版本的mysql和yosemite一起使用时,上述答案(或我在其他地方看到的几十个答案中的任何一个)都对我不起作用。我最终通过brew安装了一个不同的mysql版本。

通过说指定旧版本(例如)

brew install mysql56

为我工作。希望这对某人有帮助。这是一个令人沮丧的问题,我觉得自己永远都坚持不懈。


是的,这可以工作,但是如果您想安装MySQL 5.7(目前已由安装brew install mysql),则可以按照我的答案stackoverflow.com/a/33924648/133106
mrucci 2015年

1

这是MySQL 5.7的更新

bash --version
GNU bash版本4.4.12(1)-发行版(x86_64-apple-darwin17.0.0)
版权所有(C)2016自由软件基金会,Inc.
许可证GPLv3 +:GNU GPL版本3或更高版本 

这是免费软件;您可以自由更改和重新分发它。
在法律允许的范围内,没有任何担保。

#========================================
酿造-版本
自制软件1.7.6
Homebrew / homebrew-core(git版本eeb08;上一次提交2018-09-27)
Homebrew / homebrew-cask(git版本c9f62;最后一次提交2018-09-27)

#========================================
mysql --version
使用EditLine包装器的osx10.13(x86_64)的mysql Ver 14.14 Distrib 5.7.23

#========================================
system_profiler SPSoftwareDataType
软件:

    系统软件概述:

      系统版本:macOS 10.13.3(17D47)
      内核版本:达尔文17.4.0
      启动卷:Macintosh HD
      开机模式:正常
      电脑名称:EdisonMacHomeBj
      用户名:Edison(爱迪生)
      安全虚拟内存:已启用
      系统完整性保护:禁用
      自启动以来的时间:6天23:13
brew删除mysql@5.7
冲泡清理
mv / usr / local / var / mysql /usr/local/var/mysql.bak
brew安装mysql@5.7
rm -rf / usr / local / var / mysql

#========================================
mysqld-初始化
2018-09-28T04:54:06.526061Z 0 [警告]不建议使用带隐含DEFAULT值的TIMESTAMP。请使用--explicit_defaults_for_timestamp服务器选项(有关更多详细信息,请参阅文档)。
2018-09-28T04:54:06.542625Z 0 [警告]设置lower_case_table_names = 2是因为/ usr / local / var / mysql /的文件系统不区分大小写
2018-09-28T04:54:07.096637Z 0 [警告] InnoDB:创建了新的日志文件,LSN = 45790
2018-09-28T04:54:07.132950Z 0 [警告] InnoDB:创建外键约束系统表。
2018-09-28T04:54:07.196824Z 0 [警告]找不到现有的UUID,因此我们假定这是此服务器第一次启动。生成新的UUID:87cf2f10-c2da-11e8-ac2d-ba163df10130。
2018-09-28T04:54:07.224871Z 0 [警告] Gtid表尚未准备就绪,无法使用。表'mysql.gtid_exected'无法打开。
2018-09-28T04:54:07.366688Z 0 [警告] CA证书ca.pem是自签名的。
2018-09-28T04:54:07.457954Z 1 [Note]为root @ localhost生成一个临时密码:kq3K = JR8; GqZ

#========================================
mysql_secure_installation -uroot -p“ kq3K = JR8; GqZ”
mysql_secure_installation:[警告]在命令行界面上使用密码可能不安全。

保护MySQL服务器部署。


用户帐户root的现有密码已过期。请设置一个新密码。

新密码:

重新输入新的密码:

验证密码插件可用于测试密码
并提高安全性。它检查密码的强度
并允许用户仅设置以下密码
足够安全。您要设置“验证密码”插件吗?

按y | Y(是),按其他任何键(否):n
使用现有的root密码。
更改root的密码?((按y | Y表示是,按其他任何键表示否):y

新密码:

重新输入新的密码:
默认情况下,MySQL安装有一个匿名用户,
允许任何人都不必登录MySQL
为他们创建的用户帐户。这仅用于
测试,并使安装过程更加顺利。
您应先将其删除,然后再进行生产
环境。

删除匿名用户?(按y | Y表示是,按其他任何键表示否):y
成功。


通常,仅应允许root连接
'本地主机'。这样可以确保有人无法猜测
来自网络的根密码。

禁止远程root登录?(按y | Y表示是,按其他任何键表示否):n

 ...跳过。
默认情况下,MySQL带有一个名为“ test”的数据库,该数据库
任何人都可以访问。这也仅用于测试,
并应在进入生产之前将其删除
环境。


删除测试数据库并访问它?(按y | Y表示是,按其他任何键表示否):n

 ...跳过。
重新加载特权表将确保所有更改
到目前为止,将立即生效。

现在重新加载特权表?(按y | Y表示是,按其他任何键表示否):y
成功。

全做完了!

当从“ mysql.bak”复制所有数据库时,它不起作用:(
Jahirul Islam Mamun

1

只是为以前的答案添加一些内容-从MySql 5.6升级到MySql 8.0时,我按照此处提供的步骤进行了干净的卸载,但出现了以下错误

2019-11-05T07:57:31.359304Z 0 [ERROR] [MY-000077] [Server] /usr/local/Cellar/mysql/8.0.18/bin/mysqld: Error while setting value 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' to 'sql_mode'.
2019-11-05T07:57:31.359330Z 0 [ERROR] [MY-013236] [Server] The designated data directory /usr/local/var/mysql is unusable. You can remove all files that the server added to it.
2019-11-05T07:57:31.359413Z 0 [ERROR] [MY-010119] [Server] Aborting
2019-11-05T07:57:31.359514Z 0 [Note] [MY-010120] [Server] Binlog end

花了我一些时间弄清楚。在这里找到线索:https : //discourse.brew.sh/t/clean-removal-of-mysql/2251

因此,解决我的问题的关键是在卸载后删除/usr/local/etc/my.cnf文件。经过最后一步,MySql终于开始工作。


0

我尝试重新启动mysql后遇到了同样的问题。

为了方便起见,我在.profile中使用以下两个别名

alias mysql-stop='launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist'
alias mysql-start='launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist' 

停止mysql然后尝试重新启动后,我遇到了您遇到的问题。我调查了launchctl加载,它报告了“找不到加载”错误。

快速搜索后,我发现了这个。

http://www.daveoncode.com/2013/02/01/solve-mac-osx-launchctl-nothing-found-to-load-error/

所以我mysql-start如下更新了别名

alias mysql-start='launchctl load -w -F ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist'

这解决了我的问题,可能对您有用。


2
Brew现在支持services命令,因此可以分别用brew services stop mysql和替换它们brew services start mysql
devstuff '16

0

/etc/my.cnf当您进行brew升级时,不会更新Mysql的“基本路径” 。只需打开它并更改basedir值

例如,更改此:

[mysqld]
basedir=/Users/3st/homebrew/Cellar/mysql/5.6.13

指向新版本:

[mysqld]
basedir=/Users/3st/homebrew/Cellar/mysql/5.6.19

用以下命令重启mysql:

mysql.server start
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.