rails + MySQL no OSX: Biblioteca não carregada: libmysqlclient.18.dylib

119

Estou apenas começando com Ruby (e rails). Fiz a configuração de acordo com http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems, usando rvm. Tenho tudo funcionando bem com sqlite.

Agora eu gostaria de tentar converter coisas para MySQL, já que é com isso que faço a maior parte do meu desenvolvimento. Em meu Gemfile, substituí sqlite por mysql2:

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

Mas quando tento criar o banco de dados para trilhos no MySQL, obtenho:

$ 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

Já vi outras postagens recomendando a reinstalação do MySQL via homebrew (o meu foi instalado por meio de um DMG para download), mas prefiro não fazer isso porque já tenho vários outros bancos de dados para outros projetos que não sejam ruby.

Na verdade, tenho o arquivo que Rails está procurando; está instalado em /usr/local/mysql/lib/libmysqlclient.18.dylib. Qual é a melhor maneira de dizer ao Rails como localizá-lo?

George Armhold
fonte
Isso poderia ser uma duplicata disso? stackoverflow.com/questions/4546698/…
gmile
De fato. Eu não posso deletar minha própria pergunta? Votado para fechar como dup.
George Armhold

Respostas:

313

A solução é muito fácil; Adicione o caminho da biblioteca em seu arquivo ~ / .bash_profile ou ~ / .profile:

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

Se ainda não estiver funcionando (isso funciona para mim):

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

Existem muitos blogs com install_name_tool, o que não funcionará para mim porque estou no 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
Atejeda
fonte
16
O link simbólico funcionou para mim (após a atualização para o Mountain Lion). Obrigado!
siannopollo
5
Symlink faz isso, especialmente para casos como rodar trilhos sob RubyMine, onde .bash_profilerealmente não se aplica.
maksimov
2
Eu adicionei seu DYLD_LIBRARY_PATH ao .bash_profile, mas também tive que desinstalar a gem 'mysql2' e reinstalá-la. como: 'gem uninstall mysql2 && gem install mysql2'
brendan
73
Para aqueles que vêm aqui no dia 10/11, você não pode usr/libmais fazer um link simbólico, mas um link simbólico para usr/local/libfuncionará:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons
2
@JonathanSimmons - Você acabou de me salvar de puxar o resto do meu cabelo. A resposta do link simbólico original não funciona no OS X 10.11.5, você simplesmente acaba com o erro "ln: /usr/lib/libmysqlclient.18.dylib: Operação não permitida" - Tudo está funcionando agora e posso finalmente iniciar meu trabalho para o dia ... Obrigado!
Colin Adams
125

Em El Capitan eu tenho ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Em El Capitan, /usr/lib/agora tem um sinalizador restrito e não pode ser escrito sem desativar a segurança, então apenas coloco o link em seu /usr/local/liblugar.

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

O servidor Rails está funcionando bem novamente.

TinMonkey
fonte
2
Não precisava de toda a resposta de Alex. Um link simbólico funcionou.
gitb
Fiz isso e recebi: "conectar ': Não é possível conectar ao servidor MySQL local por meio do soquete' /tmp/mysql.sock '(2) (Mysql2 :: Erro)"
Josh Hunter
1
@JoshHunter Eu acredito que este é um problema separado. Há um tópico aqui stackoverflow.com/questions/18449050/… também pode ser apenas que o servidor MySQL não está rodando.
TinMonkey
sim, o servidor não estava funcionando ... isso corrigiu. sudo /usr/local/mysql/support-files/mysql.server start
Josh Hunter
62

Embora o título desta pergunta descreva precisamente o problema que encontrei, as circunstâncias são diferentes daquelas descritas nas respostas anteriores, assim como a solução.

No meu caso (El Capitan, mysql instalado via homebrew), um brew update && brew upgradefez com que o pacote mysql fosse atualizado para 5.7.10 (de 5.6.x).

A atualização teve libmysqlclient.18.dylibque ser substituída por libmysqlclient.20.dylib, mas a mysql2gema ainda dependia do anterior.

Para resolver o problema, fiz: gem uninstall mysql2 && gem install mysql2

Observe que problemas semelhantes podem ocorrer com diferentes bibliotecas gerenciadas por homebrew ( veja minha própria resposta para isso, por exemplo )

Giuseppe
fonte
Ótimo ! Eu atualizei meu mysql para 5.7 ... enfrentei este problema ... siga as etapas 1. gem uninstall mysql2> opção 3 selecionada 2. gem install mysql2 3. adicionado ao gemfile do projeto ---> gem 'mysql2' , '~> 0.3.21' 4. instalação do pacote
Udit Kapahi
10
Recomendo a todos que experimentem primeiro! Se funcionar, você pode evitar bagunçar seu sistema com qualquer uma das outras soluções alternativas. Às vezes, você precisa confiar em links simbólicos mágicos, etc., mas isso torna seu sistema cada vez mais frágil. (Se não funcionar, nenhum dano é feito e nada para desfazer.)
Tom Wilson
Funcionou para mim também. O problema foi que passei da instalação do mysql w / homebrew para o instalador oficial.
xenetics,
1
Para qualquer usuário python chegando aqui, pip uninstall mysqlcliente pip install mysqlclienttambém funcionou.
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

Isso funcionou para mim. Instalei o MySQL a partir de um arquivo dmg.

Joseph
fonte
Isso funcionou no Mac OS X - Yosemite para mim com MySQL instalado do arquivo dmg. Obrigado Joseph.
racl101
4
Operação não permitida (obviamente com sudo) minha versão do SO é El capitan
ignacio chiazzo
16
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Funcionou para mim. Todos os semelhantes não.

Greg Benner
fonte
Esta é a solução para RubyMine.
Justin
13

Corri para este problema após uma remoção completa e, em seguida, uma nova instalação do MySQL. Especificamente:

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

Eu nem tinha tocado no meu aplicativo Rails.

Reinstalar a mysql2gema resolveu esse problema.

$ 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]

selo local
fonte
9

Se você estiver usando o MySQL instalado do HomeBrew no El Capitan, deverá vinculá-lo da seguinte maneira:

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

Para MySql 5.6 instalado a partir de DMG no Mavericks

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

Eu remendo confirmação de Abhishek faz trabalho.

funciona para Yosemite também.

nota: em vez de vincular a uma versão particular do mysql, use o fato mysql já construído link simbólico:

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

esta solução funciona para Xcode e C API.

ingconti
fonte
3

Para quem está usando cerveja. Apenas vincule sua versão do mysql com a opção "--force".

brew link mysql56 --force
tagaismo
fonte
Esta é a maneira de vincular o arquivo de biblioteca ... em vez de usar a opção ln -s. Use o link brew [email protected] --force para a versão atualizada
Vahid Kowsari
Obrigado. Eu fiz brew link [email protected] --force. Funcionou perfeitamente.
Aye Mon Chit
2

Para ter certeza de qual link simbólico é necessário (depende da versão do mysql e da versão do sistema operacional):

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

e entao :

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

Isso funciona para mim:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Filho
fonte
Acabou sendo uma variação para mim ...ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
treejanitor
1

Estou usando Rails REE (2.3.4) para um sistema legado que temos. Depois de atualizar para o El Capitan, a execução de script / console gerou um erro e meu aplicativo não iniciou mais (usando o 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)


A partir deste mesmo thread, acima, eu determinei que precisava emitir este comando no terminal:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Este comando produziu um erro: "ln: /usr/lib/libmysqlclient.18.dylib: Operação não permitida". Nunca vi esse erro antes.

Depois de pesquisar um pouco, encontrei este artigo: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html e segui o instruções para desligar o SIP (a nova Proteção de Integridade do Sistema da El Capitan). Depois de desligar o SIP e reiniciar, o comando ln funcionou bem. Então desliguei o SIP. Agora está tudo bem. Meu aplicativo é executado novamente usando o pow e nenhum erro ao executar o script / console. Espero que isso ajude você.

GeezerGeek
fonte
1

No Mac Sierra, se estiver usando o Homebrew, faça:

sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Abhishek
fonte
1
gem uninstall -aIx

e

bundle install

trabalhou para mim.

codificador atômico
fonte
1

Isso funcionou para mim. Tudo que eu tive que fazer é desinstalar o gem mysql2 e instalá-lo novamente usando os comandos abaixo

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
Magesh
fonte
1

Estou usando o Mac OS e fiquei preso com esse bug mesmo depois de desinstalar / remover todos os mysql e MAMP. Anteriormente, instalei brew install mysqle também usei MAMP. Addling softlink não funcionou para mim.

Ele só foi resolvido removendo todos os mysql existentes. e depois instale o mysql por meio do MySQL a partir daqui .

Manish Shrivastava
fonte
0

use isso em sua linha de comando:

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

tentado em poucos computadores com maverick sempre funciona

tóxico
fonte
0

Se você estiver usando o Bitnami RubyStack e se deparou com um problema semelhante. Tente este

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

Meu problema com o carregamento desse arquivo de pacote era um link simbólico ruim. Portanto, verifique o link e substitua-o por um novo, se necessário. Tudo se encaixou naquele ponto. Não tenho certeza de como isso aconteceu, mas aconteceu. Primeira vez que um erro de sintaxe aconteceu assim.

Rich_F
fonte
0

Eu estava trabalhando com o comando rails g model e recebi este erro:

Library not loaded: libmysqlclient.18.dylib

Eu tentei isso e funcionou para mim. Eu estava usando o 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

Obrigado!

Agora estou usando o Yosemite 10.10.5 e recebo o mesmo erro, então acabei de executar este comando no terminal e ele foi corrigido com sucesso.

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

você também pode tentar:

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

Ambos funcionam bem para mim. Espero que possa ser útil!

alexventuraio
fonte
0

Eu tenho esse problema "Biblioteca não carregada: libmysqlclient.18.dylib" ao importar MySQLdb do MySQL para 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

A solução funciona para mim: 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
Binh Dang
fonte
@MSU_Bulldog Claro que responde à pergunta. Ele ainda fornece novas informações. Só porque uma resposta inclui o erro que os trouxe até aqui, não significa que a solução que também fornecem não tenha valor.
Artjom B.
0

A única coisa que funcionou para mim foi:

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

Substitua os caminhos do mysql e gems para caber no seu sistema.

Aleksandar Pavić
fonte
0

Depois de muito pesquisar e tentar tudo acima ... a única coisa que resolveu meu problema foi este comando:

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

Estou usando um macbook pro, OSX 10 El Capitan. Darwin xxxx-MacBook-Pro.local 15.6.0 Darwin Kernel Versão 15.6.0: quinta-feira, 23 de junho, 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19

Nuvem vermelha
fonte
0

Obrigado. Uma atualização do Homebrew fez com que meus aplicativos Rails tivessem problemas no meu Mac. Eu reinstalei o MySQL (5.7) da fonte, então tive que fazer isso

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

com base no que li acima e no meu Gemfile

gem 'mysql2', '0.5.3'

e em database.yml

adapter: mysql2
Rodmclaughlin
fonte
0

Já existem muitas respostas para essa pergunta, especialmente esta https://stackoverflow.com/a/10847618/5515861 . Eu só quero adicionar algumas notas. Se vocês usam Mac, não sei como instalam o MySQL, mas a primeira coisa a investigar é onde está localizada a instalação do MySQL. Para mim, o MySQL é instalado usando brewfor version 5.7e o local é /usr/local/opt/[email protected]/, então adicione o seguinte ao meu ~/.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

Espero que você corrija seus problemas 😁

abmap
fonte