Skip to content

Instantly share code, notes, and snippets.

@pat
Last active December 17, 2021 09:45
Show Gist options
  • Save pat/a1e8c1b3616cd3ef4a27963e164a27fc to your computer and use it in GitHub Desktop.
Save pat/a1e8c1b3616cd3ef4a27963e164a27fc to your computer and use it in GitHub Desktop.
Using MySQL 5.7 libraries on Heroku

Edit 2021-02-21: I've confirmed this solution works with both heroku-18 and heroku-20 stacks.


What follows is my solution for having mysql2 gem compiled and working against MySQL v5.7 (rather than v8+) on the heroku-20 stack. This is how I've managed to make it work:

  • Add the apt buildstack ahead of your standard buildpack (in my case, that's Ruby):
$ heroku buildpacks:add --index 1 heroku-community/apt
  • Create an Aptfile in the root of your project, and add the MySQL 5.7 client tools (as a URL for the deb file) to it:
# in Aptfile:
https://cdn.mysql.com/Downloads/MySQL-5.7/libmysqlclient-dev_5.7.32-1ubuntu18.04_amd64.deb
  • Ensure that the mysql2 gem compiles using the Apt-provided library (via BUNDLE_BUILD__MYSQL2) and that, when the library loads, it knows how to find libstdc++ (via LD_PRELOAD). I've found that LD_PRELOAD isn't already set to anything in my apps - but yours may be different, so do check before running this command.
$ heroku config:set \
  LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 \
  BUNDLE_BUILD__MYSQL2=--with-mysql-config
  • Update your app to use the heroku-20 stack if you haven't already:
$ heroku stack:set heroku-20
  • Deploy this Aptfile to your app, and it should work. If the gems are cached from a previous build (for example, if you had already changed the stack and deployed other changes), you will need to clear your build cache prior to deploying, to ensure the mysql2 gem is recompiled.

If anyone has any questions or thoughts about this, do let me know.

@Farranco
Copy link

Quick update, the URL for the download changed. If you get a 404 error from curl (22), you need to update to:

https://dev.mysql.com/get/Downloads/MySQL-5.7/libmysqlclient-dev_5.7.32-1ubuntu18.04_amd64.deb

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment