OSX上的rails + MySQL:未加载库:libmysqlclient.18.dylib


119

我只是从Ruby(和Rails)开始。我根据进行了设置 http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems,使用rvm。我让sqlite一切正常。

现在,我想尝试将其转换为MySQL,因为这是我大部分开发工作所使用的。在我的Gemfile中,我已将sqlite替换为mysql2:

group :development, :test do
#  gem 'sqlite3', '1.3.5'
  gem 'mysql2'
  gem 'rspec-rails', '2.9.0'
end

但是,当我尝试在MySQL中为Rails创建数据库时,我得到了:

$ rake db:create --trace
rake aborted!
dlopen(/Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle

我看过其他一些文章,建议通过自制软件重新安装MySQL(我的数据库是通过可下载的DMG安装的),但我不想这样做,因为我已经在其中有其他非红宝石项目的其他几个数据库。

实际上,我确实有Rails正在寻找的文件;它安装在中/usr/local/mysql/lib/libmysqlclient.18.dylib。告诉Rails如何定位的最佳方法是什么?



确实。我无法删除自己的问题?投票结束为dup。
乔治·阿姆霍尔德

Answers:


313

解决方案非常简单;将库路径添加到〜/ .bash_profile或〜/ .profile文件中:

MYSQL=/usr/local/mysql/bin
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

如果仍然无法正常工作(对我来说这样):

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

有许多带有的博客install_name_tool,它们对我不起作用,因为我在OSX Lion上:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/indexer
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/search

16
该符号链接对我有用(升级到Mountain Lion之后)。谢谢!
siannopollo 2012年

5
Symlink做到了这一点,特别是对于从RubyMine下运行rails的情况,这种情况.bash_profile实际上并不适用。
maksimov

2
我将您的DYLD_LIBRARY_PATH添加到.bash_profile,但我还必须卸载'mysql2'gem,然后重新安装它。像:“宝石卸载mysql2 &&创业板安装mysql2”
布伦丹

73
对于那些来到10.11的用户,您不能再符号链接到usr/lib,而可以使用符号链接usr/local/libsudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons

2
@JonathanSimmons-您只是救了我免于拔出其余头发。原始的符号链接答案在OS X 10.11.5上不起作用,您仅会得到以下错误:“ ln:/usr/lib/libmysqlclient.18.dylib:不允许操作”-现在一切正常,我终于可以开始工作一天...谢谢!
科林·亚当斯

125

在El Capitan,我得到了 ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

在El Capitan中,/usr/lib/现在有一个受限制的标志,在不禁用安全性的情况下无法写入,因此我只是将链接放入其中/usr/local/lib

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

Rails服务器再次正常运行。


2
不需要亚历克斯的所有答案。一个符号链接就成功了。
gitb 2015年

我做到了,得到了:“连接”:无法通过套接字'/tmp/mysql.sock'(2)(Mysql2 :: Error)连接到本地MySQL服务器”
Josh Hunter

1
@JoshHunter我相信这是一个单独的问题。这里有一个线程stackoverflow.com/questions/18449050/… 也可能只是MySQL服务器未运行。
TinMonkey

是的,服务器未运行...这已将其修复。sudo /usr/local/mysql/support-files/mysql.server start
Josh Hunter

62

尽管此问题的标题恰好描述了我遇到的问题,但情况与先前答案中所描述的情况有所不同,解决方案也是如此。

在我的情况下(El Capitan,通过brew update && brew upgrade自家安装的mysql ),导致mysql软件包升级到5.7.10(从5.6.x)。

升级导致libmysqlclient.18.dylib被替换为libmysqlclient.20.dylib,但是mysql2gem仍然依赖前者。

要解决此问题,我做了: gem uninstall mysql2 && gem install mysql2

请注意,不同的自制软件管理的库也可能发生类似的问题(例如,请参阅我对此的回答


太好了!我将mysql升级到5.7 ...面对此问题.....做了以下步骤1. gem卸载mysql2>选择的选项3 2. gem安装mysql2 3.将其添加到项目的gemfile ---> gem'mysql2' ,'〜> 0.3.21'4.捆绑安装
Udit Kapahi

10
我建议大家先尝试一下! 如果可行,您可以避免使用其他任何替代方法来使系统混乱。有时您必须依靠神奇的符号链接等,但这会使您的系统越来越脆弱。(如果它不起作用,则不会造成任何伤害,也无法撤消。)
汤姆·威尔逊

也为我工作。问题是我从从本地安装mysql到正式安装程序转移了。
xenetics '18

1
对于任何Python用户到达这里,pip uninstall mysqlclient并且pip install mysqlclient还曾。
彼得·多兰

26
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

那对我有用。我从dmg文件安装了MySQL。


这适用于Mac OS X-Yosemite对我来说是从dmg文件安装MySQL的。谢谢约瑟夫。
racl101

4
不允许进行操作(显然是使用sudo进行操作),我的SO版本是El capitan
ignacio chiazzo 2015年

16
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

为我工作。所有类似的人都没有。


这是RubyMine的解决方案。
贾斯汀

13

完全删除然后重新安装MySQL之后,我遇到了这个问题。特别:

Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib

我什至没有碰过我的Rails应用程序。

重新安装mysql2gem可解决此问题。

$ gem uninstall mysql2
$ gem install mysql2 -v 0.3.18 # (specifying the version found in my Gemfile.lock)

[MySQL 5.7.10,Rails 4.0.0,Ruby 2.0.0,Mac OS X Yosemite 10.10]


9

如果您使用的是从El Capitan的HomeBrew安装的MySQL,则应按如下所示进行链接:

sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib


4

我确认来自Abhishek的补丁程序可以正常工作。

它也适用于优胜美地。

注意:不要链接到特定版本的mysql,而要使用mysql已经建立的符号链接这一事实:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

该解决方案确实适用于Xcode和C API。


3

对于那些使用酿造的人。只需将您的mysql版本与“ --force”选项链接即可。

brew link mysql56 --force

这是链接库文件的方式...而不是使用ln -s选项。使用brew brew mysql@5.7 --force作为更新版本
Vahid Kowsari,

谢谢。我做到了brew link mysql@5.7 --force。工作完美。
Aye Mon Chit

2

确保需要什么符号链接(取决于mysql版本和os版本):

$ locate libmysqlclient.18.dylib
/usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib

所以 :

ln -s /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

2

这对我有用:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

最终对我来说是一个变化……ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
treejanitor

1

我将Rails REE(2.3.4)用于我们拥有的旧系统。升级到El Capitan后,运行脚本/控制台引发错误,并且我的应用程序将不再启动(使用pow):

$ script/console
Loading development environment (Rails 2.3.4)
/blah-blah/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_specification.rb:76:in establish_connection:RuntimeError: Please install the mysql2 adapter: gem install activerecord-mysql2-adapter (dlopen(/blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle
  Reason: image not found - /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle)


通过上面的这个线程,我确定需要在终端中发出以下命令:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
该命令产生了一个错误:“ ln:/usr/lib/libmysqlclient.18.dylib:不允许操作”。我以前从未见过该错误。

经过大量的挖掘之后,我发现了这篇文章:http : //www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html,然后按照有关关闭SIP(El Capitan的新系统完整性保护)的说明。关闭SIP之后,重新启动后,ln命令可以正常工作。然后我关闭了SIP。现在一切都很好。我的应用程序再次使用pow运行,没有错误运行脚本/控制台。我希望这可以帮助你。


1

在Mac Sierra上,如果使用Homebrew,请执行以下操作:

sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib


1

这对我有用。我要做的就是卸载mysql2 gem并使用以下命令再次安装

gem uninstall mysql2
gem install mysql2 -v '0.3.18' -- --with-mysql-config=/usr/local/Cellar/mysql@5.7/5.7.28/bin/mysql_config


0

从命令行使用它:

sudo install_name_tool -id /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib

在带有特立独行的少数计算机上尝试过总是可以的


0

如果您使用Bitnami RubyStack并遇到类似的问题。试试这个

sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

0

我加载该捆绑文件的问题是错误的符号链接。因此,请检查链接,并在需要时将其替换为新的链接。那时一切都准备就绪。不知道那是怎么发生的,但是确实如此。第一次发生这样的语法错误。


0

我正在使用rails g模型命令,但出现此错误:

Library not loaded: libmysqlclient.18.dylib

我已经尝试过了,它对我有用。我正在使用Mavericks 10.9.5

sudo ln -s /usr/local/mysql-5.6.19-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

谢谢!

现在我正在使用优胜美地10.10.5,并且遇到了相同的错误,因此我只在终端上运行了该命令,并成功修复了该命令。

$ sudo ln -s /usr/local/mysql-5.6.26-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

您也可以尝试:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

他们两个都对我很好。希望它会有用!


0

MySQL导入python3的 MySQLdb时出现此问题“库未加载:libmysqlclient.18.dylib” :

    Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so
  Reason: image not found

解决方案适合我:Mac OS X 10.11.1 Python3.5

Edit ~/.bash_profile:
export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin:$PATH"
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH="/usr/local/mysql/bin:$PATH"
export PATH="/usr/local/mysql/lib:$PATH"
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

@MSU_Bulldog当然,它回答了这个问题。它甚至提供了新的信息。仅仅因为答案中包含了导致他们误入歧途的错误,并不意味着他们提供的解决方案没有价值。
Artjom B.

0

唯一对我有用的是:

sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql-5.6.23-osx10.8-x86_64/lib/libmysqlclient.18.dylib \
/Library/Ruby/Gems/2.0.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle

替换mysql和gems的路径以适合您的系统。


0

经过大量的搜索和尝试以上所有操作后,唯一解决我问题的方法是以下命令:

$install_name_tool -id /usr/local/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

我正在使用Macbook Pro OSX 10 El Capitan。Darwin xxxx-MacBook-Pro.local 15.6.0 Darwin内核版本15.6.0:2016年6月23日星期四18:25:34;XXX:xnu-3248.60.10〜1 / RELEASE_X86_64 x86_64 Perl:v5.18.2 Mysql:5.6.19


0

谢谢。Homebrew升级使我的Rails应用程序在Mac上出现问题。我从源代码重新安装了MySQL(5.7),然后不得不这样做

sudo ln -s /usr/local/mysql-5.7.28-macos10.14-x86_64/lib/libmysqlclient.20.dylib /usr/lib/libmysqlclient.20bdylib

根据我在上面和我的Gemfile中阅读的内容

gem 'mysql2', '0.5.3'

并在database.yml中

adapter: mysql2

0

这个问题已经有很多答案了,尤其是这个https://stackoverflow.com/a/10847618/5515861。我只想添加几个注释。如果您使用的是Mac,我不知道如何安装MySQL,但是首先要调查的是MySQL安装的位置。对我来说,MySQL是使用brew版本安装的5.7,位置是/usr/local/opt/mysql@5.7/,因此将以下内容添加到my中~/.zshrc

MYSQL=/usr/local/opt/mysql@5.7/bin/
MYSQL_LIB=/usr/local/opt/mysql@5.7/lib/
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=$MYSQL_LIB:$DYLD_LIBRARY_PATH

希望你能解决你的问题😁

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.