Назад | Перейти на главную страницу

Как я могу скопировать таблицу пользователей MySQL с одного сервера на другой?

Я настраиваю новый сервер MySQL и хочу предоставить ему тот же набор имен пользователей, разрешенных хостов и паролей, что и существующий сервер (который уходит).

Сработает ли просто сделать дамп таблицы пользователей, а затем загрузить ее на новый сервер?

Есть ли способ лучше?

oldserver$ mysqldump mysql > mysql.sql
newserver$ mysql mysql < mysql.sql
newserver$ mysql 'flush privileges;'

Должен сделать это, не забудьте добавить -u $USER и -p$PASSWORD как требуется

Я бы посмотрел на Набор инструментов Percona. Описание pt-show-grants инструмент говорит сам за себя ...

pt-show-grants извлекает, заказывает и затем распечатывает гранты для учетных записей пользователей MySQL.

Зачем тебе это нужно? Причин несколько.

Первый - это простая репликация пользователей с одного сервера на другой; вы можете просто извлечь гранты с первого сервера и направить вывод напрямую на другой сервер.

Второе использование - поместить ваши гранты в систему контроля версий ....

Пока свалка mysql база данных, вероятно, будет работать, по моему опыту, правильно документируя весь доступ и настраивая его снова с помощью GRANT заявления намного лучше. Такой способ дает два преимущества:

  1. Вы поймете безопасность своей базы данных и то, как она реализована.
  2. Вы сможете удалить доступ, который больше не требуется.

Принятый ответ (использование mysqldump для резервного копирования таблицы mysql.user) - очень опасный подход, если вы переходите на новую версию сервера.

Я делал это раньше (переносил пользователей с Mysql 4 на Mysql 5.1), а позже у меня возникли проблемы с попыткой предоставить или изменить привилегии пользователям моей базы данных.

Это происходит потому, что структура таблицы mysql.users различается между версиями сервера mysql, как объясняется здесь:

https://dba.stackexchange.com/a/16441/18472

Итак, будьте осторожны, если вы обновляете версию своего сервера. Еще несколько подсказок:

https://stackoverflow.com/a/13218162/710788

mysqldump будет работать, но поскольку база данных mysql использует ISAM, вы можете просто скопировать каталог на новый сервер. Вы найдете это в разных местах, но наиболее распространенным местом для базы данных mysql будет / var / lib / mysql / mysql. Обязательно остановите mysql на новом сервере, переместите старый каталог в сторону, скопируйте каталог и перезапустите. Пример использования стандартных местоположений как root:

# /etc/init.d/mysqld stop
# cd /var/lib/mysql
# mv mysql ../mysql.backup
# rsync -a root@oldserver:/var/lib/mysql/mysql .
# /etc/init.d/mysql start

так просто запускать команды предоставления. Это похоже на

ПРЕДОСТАВИТЬ ВСЕ в таблице database.table пользователю "@" host ", идентифицированному" password "

так

ПРЕДОСТАВИТЬ ВСЕ в базе данных. * "Jack" @ "localhost", идентифицированному "somepass"