At Hungryroot we use AWS’ Aurora MySQL with some of our Django projects. This morning, a few of our developers, working on Mac OS with Homebrew, reported that their mysqlclient
libraries were erroring out with:
'/opt/homebrew/Cellar/mysql-client/8.3.0/lib/libmysqlclient.22.dylib' (no such file)
Attempts to reinstall the mysqlclient
Python library were failing with:
clang -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -I/opt/homebrew/opt/mysql-client/include "-Dversion_info=(2, 2, 1, 'final', 0)" -D__version__=2.2.1 -I/Users/avishekde/.pyenv/versions/3.11.6/include/python3.11 -c src/MySQLdb/_mysql.c -o build/temp.macosx-14.1-arm64-cpython-311/src/MySQLdb/_mysql.o -I/opt/homebrew/Cellar/mysql-client/8.3.0/include/mysql -std=c99
src/MySQLdb/_mysql.c:527:9: error: call to undeclared function 'mysql_ssl_set'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
mysql_ssl_set(&(self->connection), key, cert, ca, capath, cipher);
^
It turns out that the recently released MySQL 8.3.0 removed some APIs that the Python mysqlclient
depended upon, as documented in this GitHub issue.
It has been fixed in mysqlclient
version 2.2.4, however you shouldn’t just go upgrading a core dependency like that without some testing and examination of the changelog. So to get yourself out of this mess:
- Download this file – the Homebrew formula for MySQL 8.2.0
brew uninstall mysql-client
brew install ~/Downloads/mysql-client.rb
(or modify with whatever path you saved the downloaded file to)brew pin mysql-client
That should get you back in business.
Once you upgrade to 2.2.4, you should brew unpin mysql-client
and let Homebrew resume managing that dependency.