TablePlus / DBngin

DB Engine
https://dbngin.com
1.06k stars 19 forks source link

mysql 5.7 dev headers are not working correctly #15

Closed runlevel5 closed 4 years ago

runlevel5 commented 5 years ago

Please fill out the detail below, it helps me investigate the bug:

  1. Driver: MySQL 5.7.23

  2. DBngin build number: 1.0 (14)

  3. macOS version: macOS 10.14

  4. The steps to reproduce this issue:

Installing MySQL2 Ruby client: gem install mysql2 --version=0.4.10 -- --with-mysql-dir=/Users/Shared/DBngin/mysql/5.7.23

Attempt to run a rails migration with the driver yield:

$ bundle exec rake db:migrate
dyld: lazy symbol binding failed: Symbol not found: _mysql_server_init
  Referenced from: /usr/local/var/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/mysql2-0.4.10/lib/mysql2/mysql2.bundle
  Expected in: flat namespace

dyld: Symbol not found: _mysql_server_init
  Referenced from: /usr/local/var/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/mysql2-0.4.10/lib/mysql2/mysql2.bundle
  Expected in: flat namespace

Abort trap: 6
huyphams commented 5 years ago

Hi @joneslee85 can you run this command in terminal, and the try rake migrate again?

cd /Users/Shared/DBngin/mysql/5.7.23/lib
install_name_tool -id /Users/Shared/DBngin/mysql/5.7.23/lib/libmysqlclient.20.dylib libmysqlclient.20.dylib
mkhairi commented 5 years ago

same problem here.

cd /Users/Shared/DBngin/mysql/5.7.23/lib
install_name_tool -id /Users/Shared/DBngin/mysql/5.7.23/lib/libmysqlclient.20.dylib libmysqlclient.20.dylib

run this command does not help.

runlevel5 commented 4 years ago

@huyphams it does not really help unfortunately

patsch commented 4 years ago

If anyone is still having this problem - I needed both a recent MariaDB and a 5.x MySQL server running in parallel on my Mac and ran into the same problem described above when I tried to use DBIng for the multi-server setup.

I solved it by installing mysql 5.7 via brew AS WELL as via DBIng. The DBIng option is great for running the server as it works out of the box without any hassles - it also recognised my existing MariaDB install straight away.

To configure the mysql2 gem for the 5.7 server I did:

brew install mysql@5.7
gem install mysql2 -v '0.3.18' -- --with-mysql-config=$MYSQL5/bin/mysql_config

(the MYSQL5 environment variable is set by the brew install, in my case it was /usr/local/Cellar/mysql@5.7/5.7.29)

My last problem was then that the mysql2 gem was linked to the wrong mysql client library - when running the rails server I got

Gem Load Error is: Incorrect MySQL client library version! This gem was compiled for 5.7.29 but the client library is 10.4.12.

To fix that, locate the mysql2.bundle file that was created when the mysql2 gem was installed - I am using RVM, so in my case it was here:

cd /Users/patsch/.rvm/gems/ruby-2.3.8@awsa/gems/mysql2-0.3.18/lib/mysql2

I then checked the libraries it was linked against:

otool -L mysql2.bundle

This then showed that the mysql2.bundle had been told to use the mariadb runtime, instead of the mysql5 runtime:

mysql2.bundle:
    /usr/local/opt/mariadb/lib/libmariadb.3.dylib (compatibility version 3.0.0, current version 3.0.0)

To change that, I then ran

install_name_tool -change /usr/local/opt/mariadb/lib/libmariadb.3.dylib /usr/local/Cellar/mysql@5.7/5.7.29/lib/libmysqlclient.20.dylib  mysql2.bundle       

and now Rails is happy :-)

runlevel5 commented 4 years ago

It's been awhile. I've working around the issue by installing the MySQL DB separately so that its headers can be looked up and used by clients such as mysql2 rubygems.

ahmedalbeiruti commented 4 years ago

This is how I worked around this issue. It might not be the best solution but it suits my needs. The following code is from freshly created rails app.