Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

How to Reinstall MySQL (And Bring Your Grants and Users With You)

DZone's Guide to

How to Reinstall MySQL (And Bring Your Grants and Users With You)

Reinstalling MySQL while preserving permissions and users can be a headache. Fortunately, the Percona Toolkit has a way to bring what you need along for the ride.

· Database Zone ·
Free Resource

MariaDB TX, proven in production and driven by the community, is a complete database solution for any and every enterprise — a modern database for modern applications.

MySQL Grants and Users

Every so often, I need to reinstall a MySQL version from scratch and preserve all the user accounts and their permissions (or move the same users and privileges to another server).

As of MySQL 5.7, MySQL does not make this easy! MySQL SHOW GRANTS only shows permissions for one user, and the method suggested on StackExchange — dumping tables containing grants information directly — is not robust (as Rick James mentions in the comments). It also doesn’t work between different MySQL versions.

This problem is easily solved, however, with the pt-show-grants tool from the Percona Toolkit (which serves pretty much as a mysqldump for user privileges).  

All you need to do is:

  1. On the source, or to backup MySQL privileges, run:
pt-show-grants > grants.sql
  1. On the target, or to restore MySQL privileges, run:
mysql  < grants.sql
  1. If you would like to clean up the old privileges from MySQL before loading new ones, use:
pt-show-grants --drop  --ignore root@localhost | grep "^DROP USER " | mysql


This removes all the users (except the root user, which you will need to connect back and load new privileges).

MariaDB AX is an open source database for modern analytics: distributed, columnar and easy to use.

Topics:
grants ,privileges ,database ,mysql ,tutorial

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}