Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mysql 5.7 dev headers are not working correctly #15

Closed
runlevel5 opened this issue Nov 19, 2018 · 6 comments
Closed

mysql 5.7 dev headers are not working correctly #15

runlevel5 opened this issue Nov 19, 2018 · 6 comments

Comments

@runlevel5
Copy link

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
Copy link
Contributor

huyphams commented Nov 20, 2018

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
Copy link

mkhairi commented Nov 30, 2018

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
Copy link
Author

@huyphams it does not really help unfortunately

@patsch
Copy link

patsch commented May 2, 2020

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
Copy link
Author

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
Copy link

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.

  • Added mysql database to the path in .zshrc since it couldn't find the database even after I clicked on exporting the environment variables to terminal.
    export PATH="$HOME/.yarn/bin:$HOME/.rvm/bin:/Users/Shared/DBngin/mysql/8.0.19/bin:$PATH"

  • I am using rvm and I created a gemset for my project.
    rvm use ruby-2.7.0@railsapp --ruby-version --create

  • Then created a local bundle file to set mysql2 with the new mysql_config installed by dbngin
    cd railsapp
    then
    bundle config --local build.mysql2 --with-mysql-config=/Users/Shared/DBngin/mysql/8.0.19/bin/mysql_config
    this will create app/.bundle/config file and it is ignored in .gitignore file.

  • I added the socket option to database.yml file to specify dbngin's socket

  default: &default
  adapter: mysql2
  socket:  "/tmp/mysql_3306.sock"
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: 'root' // I changed the password of root through ALTER USER using tableplus
  host: localhost
  • I ran bundle install. After bundler finished installing the gems, I ran bin/rails db:create and I got my database created successfully.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants