Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to install and start MySQL 5.7 on macOS BigSur (Apple Silicon) with Homebrew?

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 [email protected]

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

[email protected] 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 [email protected] first in your PATH, run:   echo 'export PATH="/opt/homebrew/opt/[email protected]/bin:$PATH"' >> ~/.zshrc

For compilers to find [email protected] you may need to set:   export LDFLAGS="-L/opt/homebrew/opt/[email protected]/lib"   export CPPFLAGS="-I/opt/homebrew/opt/[email protected]/include"


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

Right after that, I try to run:

echo 'export PATH="/opt/homebrew/opt/[email protected]/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 [email protected]

And also get the error:

Error: Permission denied @ rb_sysopen - /Users/vivanc/Library/LaunchAgents/[email protected]

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

like image 886
Vitalii Avatar asked Mar 13 '21 21:03

Vitalii


People also ask

Does MySQL work on Apple silicon?

Yes (8.0 [homebrew])


2 Answers

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 [email protected].

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 [email protected], 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.

like image 55
1de Avatar answered Oct 18 '22 02:10

1de


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/[email protected]

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

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 [email protected], 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 [email protected] 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 [email protected] 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 [email protected], 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 [email protected] 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 [email protected]
brew link --force [email protected]
brew services start [email protected]

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 [email protected]

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.

like image 8
Kevin Y Avatar answered Oct 18 '22 02:10

Kevin Y