Rails + MySQL unter OSX: Bibliothek nicht geladen: libmysqlclient.18.dylib


119

Ich fange gerade mit Ruby (und Rails) an. Ich habe das Setup gemäß http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems mit durchgeführt rvm. Ich habe alles gut mit SQLite.

Jetzt möchte ich versuchen, Dinge auf MySQL umzustellen, da ich damit den größten Teil meiner Entwicklung mache. In meiner Gemfile habe ich sqlite durch mysql2 ersetzt:

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

Aber wenn ich versuche, die Datenbank für Rails in MySQL zu erstellen, bekomme ich:

$ 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

Ich habe andere Beiträge gesehen, in denen empfohlen wurde, MySQL über Homebrew neu zu installieren (meine wurde über eine herunterladbare DMG installiert), aber ich würde es vorziehen, dies nicht zu tun, da ich bereits mehrere andere Datenbanken für andere Nicht-Ruby-Projekte darin habe.

Ich habe tatsächlich die Datei, nach der Rails sucht; Es ist installiert in /usr/local/mysql/lib/libmysqlclient.18.dylib. Wie kann ich Rails am besten mitteilen, wie es zu finden ist?


Könnte dies ein Duplikat davon sein? stackoverflow.com/questions/4546698/…
gmile

Tatsächlich. Ich kann meine eigene Frage nicht löschen. Gewählt, um als dup zu schließen.
George Armhold

Antworten:


313

Die Lösung ist ziemlich einfach; Fügen Sie den Bibliothekspfad in Ihre Datei ~ / .bash_profile oder ~ / .profile ein:

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

Wenn es immer noch nicht funktioniert (diese Arbeit für mich):

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

Es gibt viele Blogs mit install_name_tool, die für mich nicht funktionieren, weil ich auf OSX Lion bin:

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
Der Symlink funktionierte für mich (nach dem Upgrade auf Mountain Lion). Vielen Dank!
Siannopollo

5
Symlink tut dies insbesondere in Fällen, in denen Schienen unter RubyMine ausgeführt werden, in denen .bash_profiledies nicht wirklich zutrifft.
Maksimov

2
Ich habe Ihr DYLD_LIBRARY_PATH zu .bash_profile hinzugefügt, musste aber auch das Juwel 'mysql2' deinstallieren und dann neu installieren. wie: 'gem deinstallieren mysql2 && gem install mysql2'
brendan

73
Für diejenigen, die für 10.11 hierher kommen, können Sie keinen Symlink usr/libmehr erstellen, aber ein Symlink zu usr/local/libwird funktionieren:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons

2
@ JonathanSimmons - Du hast mich gerade davor bewahrt, den Rest meiner Haare herauszuziehen. Die ursprüngliche Symlink-Antwort funktioniert unter OS X 10.11.5 nicht. Am Ende wird einfach der Fehler "ln: /usr/lib/libmysqlclient.18.dylib: Operation nicht zulässig" angezeigt. Alles funktioniert jetzt und ich kann endlich meine starten Arbeit für den Tag ... Danke!
Colin Adams

125

In El Capitan habe ich bekommen ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

In El Capitan gibt es /usr/lib/jetzt eine eingeschränkte Flagge, auf die nicht geschrieben werden kann, ohne die Sicherheit zu deaktivieren. Deshalb habe ich /usr/local/libstattdessen einfach den Link eingefügt.

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

Der Rails-Server läuft wieder einwandfrei.


2
Ich brauchte nicht die ganze Antwort von Alex. Ein symbolischer Link hat es geschafft.
Gitb

Ich tat dies und bekam: "connect ': Kann keine Verbindung zum lokalen MySQL-Server über Socket' /tmp/mysql.sock '(2) (Mysql2 :: Error) herstellen"
Josh Hunter

1
@ JoshHunter Ich glaube, das ist ein separates Problem. Es gibt hier einen Thread stackoverflow.com/questions/18449050/… könnte auch nur sein, dass der MySQL-Server nicht läuft.
TinMonkey

Ja, der Server lief nicht ... das hat es behoben. sudo /usr/local/mysql/support-files/mysql.server start
Josh Hunter

62

Während der Titel dieser Frage genau das Problem beschreibt, auf das ich gestoßen bin, unterscheiden sich die Umstände von denen, die in den vorherigen Antworten beschrieben wurden, und ebenso die Lösung.

In meinem Fall (El Capitan, MySQL über Homebrew installiert) führte a dazu, brew update && brew upgradedass das MySQL-Paket auf 5.7.10 (von 5.6.x) aktualisiert wurde.

Das Upgrade wurde libmysqlclient.18.dylibersetzt durch libmysqlclient.20.dylib, aber das mysql2Juwel war immer noch auf das erstere angewiesen.

Um das Problem zu beheben, habe ich: gem uninstall mysql2 && gem install mysql2

Bitte beachten Sie, dass ähnliche Probleme bei verschiedenen von Homebrew verwalteten Bibliotheken auftreten können ( siehe beispielsweise meine eigene Antwort darauf ).


Toll ! Ich habe mein MySQL auf 5.7 aktualisiert. , '~> 0.3.21' 4. Bundle-Installation
Udit Kapahi

10
Ich empfehle jedem, dies zuerst zu versuchen! Wenn es funktioniert, können Sie vermeiden, Ihr System mit einer der anderen Problemumgehungen zu verschmutzen. Manchmal müssen Sie sich auf magische Symlinks usw. verlassen, aber dadurch wird Ihr System immer spröder. (Wenn es nicht funktioniert, wird kein Schaden angerichtet und nichts rückgängig gemacht.)
Tom Wilson

Hat auch für mich gearbeitet. Das Problem war, dass ich von der Installation von MySQL mit Homebrew zum offiziellen Installer gewechselt bin.
Xenetics

1
Für alle Python-Benutzer, die hierher kommen pip uninstall mysqlclientund pip install mysqlclientauch gearbeitet haben.
Peter Dolan

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

Das hat bei mir funktioniert. Ich habe MySQL von einer dmg-Datei installiert.


Dies funktionierte unter Mac OS X - Yosemite für mich mit MySQL, das aus einer dmg-Datei installiert wurde. Danke Joseph.
racl101

4
Betrieb nicht erlaubt (offensichtlich mit sudo) meine SO-Version ist El capitan
ignacio chiazzo

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

Hat für mich gearbeitet. Alle ähnlichen taten es nicht.


Dies ist die Lösung für RubyMine.
Justin

13

Ich bin auf dieses Problem gestoßen, nachdem MySQL vollständig entfernt und anschließend neu installiert wurde. Speziell:

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

Ich hatte meine Rails-App noch nicht einmal berührt.

Die Neuinstallation des mysql2Edelsteins löste dieses Problem.

$ 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

Wenn Sie MySQL verwenden, das von HomeBrew in El Capitan installiert wurde, sollten Sie es wie folgt verknüpfen:

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

6

Für MySql 5.6 von DMG auf Mavericks installiert

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

4

Ich bestätige, dass der Patch von Abhishek funktioniert .

es funktioniert auch für Yosemite.

Hinweis: Anstatt auf eine bestimmte Version von MySQL zu verlinken, verwenden Sie die Tatsache, dass MySQL bereits einen Symlink erstellt hat:

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

Diese Lösung funktioniert für Xcode und C API.


3

Für diejenigen, die Gebräu verwenden. Verknüpfen Sie einfach Ihre MySQL-Version mit der Option "--force".

brew link mysql56 --force

Auf diese Weise können Sie die Bibliotheksdatei verknüpfen ... anstatt die Option ln -s zu verwenden. Verwenden Sie Brew Link mysql@5.7 --force für die aktualisierte Version
Vahid Kowsari

Vielen Dank. Ich habe es getan brew link mysql@5.7 --force. Hat perfekt funktioniert.
Aye Mon Chit

2

Um sicherzugehen, welcher Symlink benötigt wird (abhängig von der MySQL-Version und der OS-Version):

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

und so :

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

2

Das funktioniert bei mir:

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

Am Ende war es eine Variation für mich ...ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Treejanitor

1

Ich verwende Rails REE (2.3.4) für ein Legacy-System, das wir haben. Nach dem Upgrade auf El Capitan führte das Ausführen von script / console zu einem Fehler und meine App wurde nicht mehr gestartet (mit 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)


Aus diesem Thread oben habe ich herausgefunden, dass ich diesen Befehl im Terminal ausgeben muss:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Dieser Befehl hat einen Fehler erzeugt: "ln: /usr/lib/libmysqlclient.18.dylib: Operation nicht erlaubt". Ich habe diesen Fehler noch nie gesehen.

Nach einigem Graben fand ich diesen Artikel: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html und folgte dem Anweisungen zum Ausschalten von SIP (El Capitans neuer Systemintegritätsschutz). Nach dem Ausschalten von SIP und nach dem Neustart funktionierte der Befehl ln einwandfrei. Dann habe ich SIP ausgeschaltet. Jetzt ist alles in Ordnung. Meine App läuft erneut mit pow und ohne Fehler beim Ausführen von Skript / Konsole. Ich hoffe das hilft dir.


1

Wenn Sie auf Mac Sierra Homebrew verwenden, gehen Sie wie folgt vor:

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


1

Das hat bei mir funktioniert. Alles was ich tun musste, ist mysql2 gem zu deinstallieren und es mit den folgenden Befehlen erneut zu installieren

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

1

Ich verwende Mac OS und war auch nach dem Deinstallieren / Entfernen aller MySQL- und MAMP-Dateien mit diesem Fehler konfrontiert. Früher habe ich installiert brew install mysqlund auch verwendet MAMP. Addling Softlink hat bei mir nicht funktioniert.

Es wurde nur durch Entfernen aller vorhandenen MySQL gelöst. und installieren Sie dann MySQL über MySQL von hier aus .


0

Verwenden Sie dies über Ihre Befehlszeile:

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

versucht auf wenigen Computern mit Außenseiter funktioniert immer


0

Wenn Sie Bitnami RubyStack verwenden und auf ein ähnliches Problem gestoßen sind. Probier diese

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

0

Mein Problem beim Laden dieser Bundle-Datei war ein schlechter Symlink. Überprüfen Sie also den Link und ersetzen Sie ihn bei Bedarf durch einen neuen. Zu diesem Zeitpunkt passte alles zusammen. Ich bin mir nicht sicher, wie das passiert ist, aber es ist passiert. Zum ersten Mal ist ein Syntaxfehler so aufgetreten.


0

Ich habe mit dem Befehl rail g model gearbeitet und diesen Fehler erhalten:

Library not loaded: libmysqlclient.18.dylib

Ich habe es versucht und es hat für mich funktioniert. Ich habe Mavericks 10.9.5 verwendet

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

Vielen Dank!

Jetzt verwende ich Yosemite 10.10.5 und habe den gleichen Fehler erhalten. Daher habe ich diesen Befehl nur auf dem Terminal ausgeführt und er wurde erfolgreich behoben.

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

Sie können auch versuchen:

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

Beide funktionieren gut für mich. Hoffe es könnte nützlich sein!


0

Ich habe dieses Problem "Bibliothek nicht geladen: libmysqlclient.18.dylib" beim Importieren von MySQLdb aus MySQL For python3 :

    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

Die Lösung funktioniert für mich: 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 Natürlich beantwortet es die Frage. Es bietet sogar neue Informationen. Nur weil eine Antwort den Fehler enthält, der sie hierher gebracht hat, heißt das nicht, dass die Lösung, die sie auch bieten, wertlos ist.
Artjom B.

0

Das einzige, was für mich funktioniert hat, ist:

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

Ersetzen Sie die Pfade von MySQL und Edelsteinen entsprechend Ihrem System.


0

Nachdem ich viel gegoogelt und alles oben versucht hatte ... war das einzige, was mein Problem löste, dieser Befehl:

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

Ich benutze ein MacBook Pro, OSX 10 El Capitan. Darwin xxxx-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Do 23. Juni 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19


0

Vielen Dank. Durch ein Homebrew-Upgrade traten bei meinen Rails-Apps Probleme auf meinem Mac auf. Ich habe MySQL (5.7) von der Quelle neu installiert, dann musste ich dies tun

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

basierend auf dem, was ich oben gelesen habe und in meiner Gemfile

gem 'mysql2', '0.5.3'

und in database.yml

adapter: mysql2

0

Es gibt bereits viele Antworten auf diese Frage, insbesondere auf diese https://stackoverflow.com/a/10847618/5515861 . Ich möchte nur ein paar Notizen hinzufügen. Wenn Sie einen Mac verwenden, weiß ich nicht, wie Sie MySQL installieren, aber als Erstes müssen Sie untersuchen, wo sich Ihre MySQL-Installation befindet. Für mich wird MySQL mit brewfor-Version installiert 5.7, und der Speicherort ist /usr/local/opt/mysql@5.7/, also fügen Sie Folgendes zu meinem hinzu ~/.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

Ich hoffe, Sie beheben Ihre Probleme 😁

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.