ราง + MySQL บน OSX: ไม่ได้โหลดไลบรารี: libmysqlclient.18.dylib


119

ฉันเพิ่งเริ่มต้นด้วย Ruby (และราง) ฉันตั้งค่าตาม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

แต่เมื่อฉันพยายามสร้าง DB สำหรับรางใน MySQL ฉันได้รับ:

$ 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 ใหม่ผ่าน homebrew (ของฉันติดตั้งผ่าน DMG ที่ดาวน์โหลดได้) แต่ฉันไม่ต้องการทำเช่นนั้นเนื่องจากฉันมีฐานข้อมูลอื่น ๆ อยู่แล้วสำหรับโครงการอื่น ๆ ที่ไม่ใช่ทับทิม

อันที่จริงฉันมีไฟล์ที่ Rails กำลังมองหา ติดตั้งอยู่ใน/usr/local/mysql/lib/libmysqlclient.18.dylib. วิธีใดที่ดีที่สุดในการบอก Rails ว่าจะหามันได้อย่างไร


สิ่งนี้อาจซ้ำกันหรือไม่ stackoverflow.com/questions/4546698/…
gmile

จริง ฉันไม่สามารถลบคำถามของตัวเองได้? โหวตให้ปิดเป็น dup
George Armhold

คำตอบ:


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
symlink ใช้งานได้สำหรับฉัน (หลังจากอัปเกรดเป็น Mountain Lion) ขอบคุณ!
siannopollo

5
Symlink ทำโดยเฉพาะอย่างยิ่งสำหรับกรณีเช่นการวิ่งรางจากใต้ RubyMine ซึ่งใช้.bash_profileไม่ได้จริงๆ
maksimov

2
ฉันเพิ่ม DYLD_LIBRARY_PATH ของคุณไปที่. bash_profile แล้ว แต่ฉันก็ต้องถอนการติดตั้งอัญมณี 'mysql2' จากนั้นติดตั้งใหม่ like: 'gem uninstall mysql2 && gem install mysql2'
brendan

73
สำหรับผู้ที่มาที่นี่เพื่อ 10.11 คุณไม่สามารถ symlink ได้usr/libอีกต่อไป แต่ symlink usr/local/libจะใช้งานได้:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons

2
@JonathanSimmons - คุณเพิ่งช่วยฉันจากการดึงผมที่เหลือออก คำตอบ symlink เดิมใช้ไม่ได้บน OS X 10.11.5 คุณก็จบลงด้วยข้อผิดพลาด "ln: /usr/lib/libmysqlclient.18.dylib: Operation not per allow" - ทุกอย่างทำงานได้แล้วและในที่สุดฉันก็สามารถเริ่ม ทำงานในวันนี้ ... ขอบคุณ!
Colin Adams

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

ฉันทำสิ่งนี้และได้รับ: "เชื่อมต่อ": ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ในเครื่องผ่านซ็อกเก็ต "/tmp/mysql.sock '(2) (Mysql2 :: Error)"
Josh Hunter

1
@JoshHunter ฉันเชื่อว่านี่เป็นปัญหาที่แยกต่างหาก มีเธรดอยู่ที่นี่stackoverflow.com/questions/18449050/… อาจเป็นไปได้ว่าเซิร์ฟเวอร์ MySQL ไม่ทำงาน
TinMonkey

ใช่เซิร์ฟเวอร์ไม่ทำงาน ... สิ่งนี้ได้รับการแก้ไขแล้ว sudo /usr/local/mysql/support-files/mysql.server start
Josh Hunter

62

แม้ว่าชื่อของคำถามนี้จะอธิบายถึงปัญหาที่ฉันพบอย่างชัดเจน แต่สถานการณ์ก็แตกต่างจากที่อธิบายไว้ในคำตอบก่อนหน้านี้และวิธีแก้ปัญหาก็เช่นกัน

ในกรณีของฉัน (El Capitan, mysql ติดตั้งผ่าน homebrew) brew update && brew upgradeทำให้แพ็คเกจ mysql อัปเกรดเป็น 5.7.10 (จาก 5.6.x)

การอัพเกรดทำให้libmysqlclient.18.dylibถูกแทนที่ด้วยlibmysqlclient.20.dylibแต่mysql2อัญมณียังคงอาศัยอยู่ในอดีต

เพื่อแก้ไขปัญหาที่ฉันทำ: gem uninstall mysql2 && gem install mysql2

โปรดทราบว่าปัญหาที่คล้ายกันอาจเกิดขึ้นได้กับไลบรารีที่มีการจัดการ homebrew ที่แตกต่างกัน ( ดูคำตอบของฉันเองสำหรับเรื่องนี้ )


เยี่ยมมาก! ฉันอัปเกรด mysql เป็น 5.7 ... ประสบปัญหานี้ ..... ทำตามขั้นตอนที่ 1. gem ถอนการติดตั้ง mysql2> ตัวเลือกที่เลือก 3 2. gem install mysql2 3. เพิ่มสิ่งนี้ใน gemfile ของโครงการ ---> gem 'mysql2' , '~> 0.3.21' 4. มัดติดตั้ง
Udit Kapahi

10
ฉันขอแนะนำให้ทุกคนลองสิ่งนี้ก่อน! หากใช้งานได้คุณสามารถหลีกเลี่ยงการขยะในระบบของคุณด้วยวิธีแก้ไขปัญหาอื่น ๆ บางครั้งคุณต้องพึ่งพา symlink ที่มีมนต์ขลัง ฯลฯ แต่มันทำให้ระบบของคุณเปราะมากขึ้นเรื่อย ๆ (หากไม่ได้ผลจะไม่มีการทำอันตรายใด ๆ และไม่มีอะไรจะยกเลิก)
Tom Wilson

ทำงานให้ฉันด้วย ปัญหาคือฉันย้ายจากการติดตั้ง mysql w / homebrew ไปยังโปรแกรมติดตั้งอย่างเป็นทางการ
xenetics

1
สำหรับผู้ใช้ python ที่มาที่นี่pip uninstall mysqlclientและpip install mysqlclientทำงานด้วย
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

ที่ได้ผลสำหรับฉัน ฉันติดตั้ง MySQL จากไฟล์ dmg


สิ่งนี้ใช้ได้กับ MacOS X - Yosemite สำหรับฉันด้วย MySQL ที่ติดตั้งจากไฟล์ dmg ขอบคุณโจเซฟ
racl101

4
ไม่อนุญาตให้ใช้งาน (เห็นได้ชัดกับ sudo) เวอร์ชัน SO ของฉันคือ El capitan
ignacio chiazzo


13

ฉันพบปัญหานี้หลังจากการลบเสร็จสิ้นและติดตั้ง MySQL ใหม่ โดยเฉพาะ:

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

ฉันไม่ได้แตะแอพ Rails เลยด้วยซ้ำ

การติดตั้งmysql2อัญมณีใหม่ช่วยแก้ปัญหานี้ได้

$ 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

หากคุณใช้ MySQL ที่ติดตั้งจาก HomeBrew ใน El Capitan คุณควรเชื่อมโยงดังนี้:

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

6

สำหรับ MySql 5.6 ที่ติดตั้งจาก DMG บน Mavericks

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

4

ฉันยืนยันว่าแพทช์จาก Abhishek ใช้งานได้จริง

มันใช้ได้กับ Yosemite ด้วย

หมายเหตุ: แทนที่จะเชื่อมโยงกับ mysql เวอร์ชันใดรุ่นหนึ่งให้ใช้ symlink ของ 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 ใช้ลิงก์ชง mysql@5.7 - บังคับสำหรับเวอร์ชันอัปเดต
Vahid Kowsari

ขอบคุณ brew link mysql@5.7 --forceฉันไม่ ทำงานได้อย่างสมบูรณ์แบบ
เอยมนต์จิตร

2

เพื่อให้แน่ใจว่าจำเป็นต้องใช้ symlink (ขึ้นอยู่กับเวอร์ชัน mysql และเวอร์ชันของระบบปฏิบัติการ):

$ 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: Operation not per allow" ฉันไม่เคยเห็นข้อผิดพลาดนั้นมาก่อน

หลังจากขุดไปพอสมควรฉันพบบทความนี้: 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

1

ฉันใช้ Mac OS และติดอยู่กับบั๊กนี้แม้ว่าจะถอนการติดตั้ง / ลบ mysql และ MAMP ทั้งหมดแล้วก็ตาม ก่อนหน้านี้ผมติดตั้งและยังใช้brew install mysql MAMPการเพิ่ม softlink ไม่ได้ผลสำหรับฉัน

แก้ไขได้โดยการลบ mysql ที่มีอยู่ทั้งหมดเท่านั้น แล้วติดตั้ง MySQL ผ่าน MySQL จากที่นี่


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

ฉันทำงานกับคำสั่งรุ่น rail 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

ขอบคุณ!

ตอนนี้ฉันใช้ Yosemite 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

ฉันได้รับปัญหานี้ "ไม่ได้โหลดไลบรารี: libmysqlclient.18.dylib" เมื่อนำเข้า MySQLdb จากMySQL สำหรับ 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

โซลูชันใช้ได้กับฉัน: MacOS 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 และอัญมณีเพื่อให้เหมาะกับระบบของคุณ


0

หลังจาก googling และลองทั้งหมดข้างต้น ... สิ่งเดียวที่แก้ปัญหาของฉันคือคำสั่งนี้:

$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 Kernel เวอร์ชัน 15.6.0: พฤ. 23 มิ.ย. 18:25:34 น. PDT 2559; 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/ดังนั้นให้เพิ่มสิ่งต่อไปนี้ใน~/.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

หวังว่าคุณจะแก้ไขปัญหาของคุณ😁

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.