This is a short overview on how to completely remove any old mysql server installs in OSX and upgrade to MariaDB without conflicts. Things can get a bit weird when you have various old installs of MySQL server floating around, and utilizing homebrew to install and upgrade MariaDB as a drop in replacement for MySQL has worked well, especially if you're used to managing MySQL installs via yum in linux.
Backup all of your current databases with mysqldump
This isn't a tutorial on backups, and there are many ways to do it. You should know how to backup your data anyway. For this example, we'll do a full backup of our InnoDB databases.
$ mysqldump -uroot -p --all-databases --flush-logs --master-data=2 > all_databases.sql
Within the msyqldump above, make sure you have dumped the mysql.users table. Either do this, or dump your mysql table data independently, or make note of your existing mysql user permissions if you just want to manually add them to your clean new MariaDB server later. If you have a lot of different permissions setup, you will probably want to migrate them. If you don't have many db users, you may want to add them manually later so you can get a refresher of how your user permissions are setup. Either way, you should understand your user permissions before removing your old database.
Dump your existing mysql table:
$ mysqldump -uroot -p mysql > mysql.sql
After installing your new MariaDB server, you can restore the mysql database by executing:
$ mysql -uroot -p mysql < mysql.sql
then make sure to flush privileges for the new user permissions to take effect:
FLUSH PRIVILEGES
You are now ready to remove everywhere MySQL has put itself into your OSX system. You may opt to move these folders to a backup folder instead of removing them, but for our case, we want to remove MySQL completely so there are no conflicts later.
First, check where mysql is running on your system:
$ which mysql
You should see something like: /usr/local/mysql
Now, stop the database server:
$ sudo /usr/local/mysql/support-files/mysql.server stop
And move/backup or remove the following folders/files:
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
rm -rf ~/Library/PreferencePanes/My*
- edit /etc/hostconfig and remove the line MYSQLCOM=-YES-
These may not exist, but if they do, remove them to avoid any conflicts with other versions of MySQL:
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /private/var/db/receipts/*mysql*
First, make sure you have homebrew installed and running, and make sure everything is up to date:
$ brew update
You can then run searches (brew search mariadb) , and if you would like to get more information about it, you could do: brew info mariadb. When you're ready to install MariaDB, simply execute:
$ brew install mariadb
After homebrew installs MariaDB server, follow the onscreen instructions on how to install the database (mysql_install_db
) and add your startup scripts if you want MariaDB to load on boot. You should also run mysql_secure_installation
to lock down your install and set your root password.
You should now be able to login to mysql with your new root user and see the MariaDB message from the server:
$ mysql -uroot -p
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 48
Server version: 10.0.14-MariaDB Homebrew
You can now import your mysql users and dumped databases file as needed.
True story, learning Docker is on my to-do list!
Maybe it's helpful for others, I'll post here the solution that worked for me.
ISSUE AND DEBUGGING
My issue was due to a previous Homebrew MySQL installation. I came up with a solution thanks to this post, the problem wasn't with (or wasn't just with)
my.cnf
.This
post-install
step was failing with no useful hint on the true problem:Trying to run
mysql -u root mysql
, I received the following error:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
This post suggested that it was because MySQL is installed but not yet running. It seemed to be true, as trying a
mysql.server start
I received this:I thus decided to take a look at the suggested log file, finding the following error repeating several times:
[ERROR] Could not open mysql.plugin table. Some plugins may be not loaded
Through an internet research of this error, I found the previously mentioned post and implemented the solution provided below. In the post, people with similar problems were saying that to solve it they had to delete some log files (in a different folder compared to the one I deleted, but they weren't using homebrew).
PROBLEM SOLUTION
brew uninstall mariadb
[uninstall MariaDB]rm -rf /usr/local/var/mysql/
[remove mysql log folder]rm -rf /usr/local/etc/my.cnf
[remove mysql global option files]rm -rf /usr/local/etc/my.cnf.d
[remove mysql global option files]rm -rf /usr/local/etc/my.cnf.default
[remove mysql global option files]brew install mariadb
[install MariaDB]Not sure if steps 3 to 5 (removing
my.cnf
and related) are needed, as I got this message even with the successful installation :But
post-install
was correctly completed during installation, and everything seems to be working fine now!