24

I need a specific version of MySQL (5.7) to be installed on my MacBook with M1.

I'm trying to do that with Homebrew.

brew install mysql@5.7

The output:

We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
    mysql -uroot

mysql@5.7 is keg-only, which means it was not symlinked into /opt/homebrew, because this is an alternate version of another formula.

If you need to have mysql@5.7 first in your PATH, run:   echo 'export PATH="/opt/homebrew/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc

For compilers to find mysql@5.7 you may need to set:   export LDFLAGS="-L/opt/homebrew/opt/mysql@5.7/lib"   export CPPFLAGS="-I/opt/homebrew/opt/mysql@5.7/include"


To have launchd start mysql@5.7 now and restart at login:   brew services start mysql@5.7 Or, if you don't want/need a background service you can just run:   /opt/homebrew/opt/mysql@5.7/bin/mysql.server start

Right after that, I try to run:

echo 'export PATH="/opt/homebrew/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc
source .zshrc
mysql_secure_installation

And get the error:

Securing the MySQL server deployment.
Enter password for user root: 
Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Also, I've tried: brew services start mysql@5.7

And also get the error:

Error: Permission denied @ rb_sysopen - /Users/vivanc/Library/LaunchAgents/homebrew.mxcl.mysql@5.7.plist

Seems like there is a permissions-related problem. Any advice is appreciated.

Vitalii
  • 383
  • 1
  • 2
  • 8

6 Answers6

22

If you are running into issues like "Can't connect to local MySQL server through socket '/tmp/mysql.sock'" or "The post-install step did not complete successfully MySQL", and you installed a previous version of mysql (e.g. 8.x) previously, you may have been at the point where you need to clean everything before reinstalling your preferred version of mysql@x.x.

If you've already visited these to links: Uninstall all those broken versions of MySQL and re-install it with Brew on Mac Mavericks (Coderwall) + Install MySQL 5.7 on macOS using Homebrew (github) and your're still having trouble with starting your mysql-service, you should try to also remove also /opt/homebrew/etc/my.cnf file.

Remove it together with all the related files too! Summary for an M1 Apple Silcion machine, after uninstalling via brew uninstall mysql or brew uninstall mysql@x.x, please remove:

/opt/homebrew/var/mysql
/opt/homebrew/etc/my.cnf

After this, everything worked like a fresh install (for me). Hope this saved someone's time.

ouflak
  • 2,458
  • 10
  • 44
  • 49
1de
  • 239
  • 2
  • 5
  • I had the same issues, it was just a conflict between MySQL 8 and 5.7. I uninstalled both, then reinstalled 5.7 again and it worked – Hakadel Nov 02 '21 at 14:46
  • 1
    Within the Apple Silicon M1 this solution is enough and works fine for the native/latest version of `mysql` but for different versions like `mysql@5.7` it's needed to follow @seemly solution: edit `my.cnf` then append `tmpdir` and `user` to it. – Jeff Pal Feb 22 '22 at 16:31
  • This worked for me on Apple Silicon M1. – Tuan Nguyen Quoc Feb 28 '22 at 03:21
  • 1
    links are broken – Kraken Apr 08 '22 at 15:44
13

While this question is specific to Apple Silicon and mysql 5.7, and I will address that in this answer, I would like to start by adding some general notes to save others time:

Homebrew supports mysql 5.7 for both intel and apple silicon. https://formulae.brew.sh/formula/mysql@5.7

Homebrew supports mysql 5.6 for the intel chip, but not apple silicon: https://formulae.brew.sh/formula/mysql@5.6

If you need 5.6 on apple silicon, it's probably a good idea to just settle with 5.7 since production will need to be upgraded eventually and the differences aren't that big.

In my situation I originally did brew install mysql and it gave me the latest mysql (currently 8.0). When I tried going back over it and doing brew install mysql@5.6, of course this didn't work due to not being supported on the m1 max (apple silicon). I ran into issues then trying to get brew install mysql@5.7 working. I followed some guides mentioning various suggestions. After playing with it for a while, it seems that running two versions of mysql at once will corrupt your mysql files and make it hard to work with and confuse homebrew.

I came across these guides:
brew install mysql on macOS
https://coderwall.com/p/os6woq/uninstall-all-those-broken-versions-of-mysql-and-re-install-it-with-brew-on-mac-mavericks
https://www.codegrepper.com/code-examples/shell/brew+uninstall+mysql

Before reading further, note that in my situation, I had a zip available for my whole local mysql database needs and could risk destroying what I have.

Warning! Reading further and executing these commands carelessly may delete your mysql storage. Make sure you have a backup.

brew remove mysql is a good command that got rid of my latest install. I also needed brew remove mysql@5.7 even though this is the version I'm trying to install, but they were stepping on each other's foot...

brew cleanup is nice, I noticed it freed up some lock files.

I don't recall having any luck with: launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist but you can try it.

rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist has worked for me. But note there will also be another file in there for your 5.7 setup. I'd recommend: cd ~/Library/LaunchAgents/ then look around to see if you have any mysql* in there. Then if you do, such as homebrew.mxcl.mysql@5.7.plist, then remove it.

These are some that worked for me:

sudo rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf
rm /usr/local/etc/my.cnf.default

Also:

cd opt/homebrew/var

Then if you notice a mysql directory in there, remove it.

It's possible you might have docker or something else similar also running mysql or mysqld.
ps -ax | grep "[m]ysql"
(Note the brackets and quotes in the above is to prevent the grep from showing up in the process list and matching itself unlike the lazier version: ps -ax | grep mysql which will give the impression there's an extra mysql process running)

Once you're ready, please run: brew services list double-check you don't have mysql in there. Then double check you don't have any mysql process running:
ps -ax | grep "[m]ysql" This can happen for example if you enter mysqld for example.... You might need to do brew services stop mysql or brew services stop mysql@5.7 or similar and repeat steps if you see anything on the service list or process list.

Finally, you should be ready for a fresh install. The fresh installation process should be rather straight forward:

brew install mysql@5.7
brew link --force mysql@5.7
brew services start mysql@5.7

Then run brew services list to make sure your installation worked correctly. If you see it's green and "started", your installation was successful!

You should also run: mysql_secure_installation Then choose a password for root and go through the list of questions like validation, etc.

Once you're installed, you might also run into mysql mode issues. cd /opt/homebrew/etc and you should find a my.cnf file. Edit it using either vim or nano. You should see something like:

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1

Edit it and set the mysql mode. For example, I don't want the no_zero_in_date mode, so I use:

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
sql-mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Then restart mysql like so:
brew services restart mysql@5.7

Then double check you still have a green status "started":
brew services list
If you do, then you should have the no_zero_in_date mode disabled.
You can test it with a query:
SELECT @@sql_mode;

You should now have mysql 5.7 running on Apple Silicon and have the sql_mode set.

If you run into more troubleshooting, do your best to get into a known state such as uninstalled, doing a fresh install, or already installed with some version, etc.

Kevin Y
  • 646
  • 5
  • 18
5

I solved it after hours of searching, it was because I had not cleaned everything regarding my previous MySQL 8.X installation. I followed this and got suspicious when I realized I don't have most of the folders there. I then did a search for all folders named mysql on my computer and found a mysql folder in opt/homebrew/var. After removing it, reinstalling MySQL 5.7, and starting the server everything is working as expected.

Daniel Tovesson
  • 2,550
  • 1
  • 30
  • 41
  • So, now you can start/stop MySQL server using `brew services start mysql@5,7` without any permissions errors? I have these errors without any previously installed MySQL on fresh macOS. – Vitalii Mar 15 '21 at 13:58
  • Yes that is correct, maybe we didn't have the same issue then – Daniel Tovesson Mar 17 '21 at 12:31
  • but /opt/homebrew/var/mysql contains the table data! I can't delete that. – malhal Aug 13 '21 at 17:08
5

When setting up my Apple M1 Macbook Pro I was experiencing the issue of the following error message being thrown:

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

My fix was to modify the MySQL config file:

nano /usr/local/etc/my.cnf

Append the following lines:

tmpdir=/tmp
user=root

Then run:

brew services restart mysql@5.7

This fixed my issue, and I was then able to connect successfully with my DB client.

seemly
  • 1,090
  • 10
  • 20
  • 1
    In my case (mysql@5.7 and macOS Monterey 12.2.1) `my.cnf` file was in `/opt/homebrew/etc/my.cnf`. Within the Apple Silicon M1 if we remove mysql installation and just install the latest version with `brew install mysql` it will perfectly work but with a different version like `mysql@5.7` it's needed to append the two lines to the file `my.cnf`. – Jeff Pal Feb 22 '22 at 16:27
1

Seems like I found the solution (or workaround).

After installing the MySQL 5.7 with Homebrew just run:

mysql.server start

MySQL is started and then you are able to run mysql_secure_installation and mysql commands.

Vitalii
  • 383
  • 1
  • 2
  • 8
1

I got this warning:

You should change the ownership of these directories to your user.
  sudo chown -R $(whoami) /usr/local/share/doc /usr/local/share/man /usr/local/share/man/man1

And make sure that your user has write permission.
  chmod u+w /usr/local/share/doc /usr/local/share/man /usr/local/share/man/man1

I run those two command then it works.

Soyaine
  • 107
  • 1
  • 11