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

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

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

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

39
задан 26 May 2015 в 14:28
7 ответов
oldserver$ mysqldump mysql > mysql.sql
newserver$ mysql mysql < mysql.sql
newserver$ mysql 'flush privileges;'

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

35
ответ дан 28 November 2019 в 19:45

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

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

Почему Вы хотели бы это? Существует несколько причин.

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

Второе использование должно поместить Ваши предоставления в управление версиями....

21
ответ дан 28 November 2019 в 19:45

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

  1. Вы поймете свою безопасность базы данных и как она реализована.
  2. Вы доберетесь для удаления доступа, который больше не требуется.
14
ответ дан 28 November 2019 в 19:45

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

# /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
5
ответ дан 28 November 2019 в 19:45

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

ПРЕДОСТАВЬТЕ ВСЕ на database.table "пользователю" "хост", определенный "паролем"

так

ПРЕДОСТАВЬТЕ ВСЕ на базе данных.* для "поднимания" "localhost" определенный "somepass"

2
ответ дан 28 November 2019 в 19:45

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

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

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

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

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

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

11
ответ дан 28 November 2019 в 19:45

Теги

Похожие вопросы