Я знаю, как экспортировать / импортировать базы данных, используя mysqldump, и это нормально, но как мне получить права на новый сервер.
Что касается дополнительных баллов, на новой уже есть пара существующих баз данных, как мне импортировать привилегии старых серверов, не удаляя пару существующих.
Старый сервер: сообщество 5.0.67
Новый сервер: 5.0.51a-24 + lenny1
РЕДАКТИРОВАТЬ: я получил дамп базы данных «mysql» со старого сервера и теперь хочу знать, как правильно объединить с базой данных «mysql» на новом сервере.
Я попытался выполнить прямой импорт с помощью phpMyAdmin, и в результате возникла ошибка, связанная с дубликатом (который я уже перенес вручную).
У кого-нибудь есть элегантный способ объединения двух баз данных «mysql»?
Ответы:
Не связывайтесь с mysql db. Там происходит намного больше, чем просто таблица пользователей. Ваша лучшая ставка - это команда « ПОКАЗАТЬ ГРАНТЫ ДЛЯ». У меня есть много псевдонимов и функций обслуживания CLI в моем .bashrc (на самом деле мой .bash_aliases, который я использую в своем .bashrc). Эта функция:
Первая команда mysql использует SQL для генерации действительного SQL, который передается второй команде mysql. Выходные данные затем передаются через sed, чтобы добавить красивые комментарии.
$ @ В команде позволит вам назвать его так: mygrants --host = prod-db1 --user = admin --password = secret
Вы можете использовать свой полный набор инструментов Unix для этого следующим образом:
Это правильный способ перемещения пользователей. Ваш ACL MySQL модифицируется чистым SQL.
источник
user
таблице есть пользователь с хостом%
, но вdb
таблице у вас есть записи, гдеhost
есть явное значение, эти записи вdb
таблице не будут получены с использованием этого метода.-r
к 2-й команде mysql в функции, и двойные экранированные символы не будут выведеныmysql
. Например:mysql -r $@
Существует два метода извлечения грантов SQL из экземпляра MySQL.
МЕТОД №1
Вы можете использовать pt-show-grants из Percona Toolkit
МЕТОД № 2
Вы можете подражать
pt-show-grants
следующимЛюбой метод будет производить чистый SQL-дамп грантов MySQL. Осталось только выполнить скрипт на новом сервере:
Попробуйте!
источник
Ответ Ричарда Броноски был чрезвычайно полезен для меня. Большое спасибо!!!
Вот небольшой вариант, который был полезен для меня. Это полезно для переноса пользователей, например, между двумя установками Ubuntu, на которых работает phpmyadmin. Просто сохраните привилегии для всех пользователей, кроме root, phpmyadmin и debian-sys-maint. Код тогда
источник
grep rails_admin
вы можете сделать вывод, как это сделать, не делая специальной функции для каждого крайнего случая. Используйте опцию grep "invert-match", например, так:mygrants --host=prod-db1 --user=admin --password=secret | grep -Ev 'root|phpmyadmin|debian-sys-maint' | mysql --host=staging-db1 --user=admin --password=secret
Или используйте percona-toolkit (бывший maatkit) и используйте
pt-show-grants
(илиmk-show-grants
) для этой цели. Нет необходимости в громоздких скриптах и / или хранимых процедурах.источник
Вы можете mysqldump базу данных «mysql» и импортировать в новую; потребуется flush_privileges или перезагрузка, и вы определенно захотите сначала сделать резервную копию существующей базы данных mysq.
Чтобы избежать удаления существующих привилегий, обязательно добавляйте, а не заменяйте строки в таблицах привилегий (db, columns_priv, host, func и т. Д.).
источник
Вы также можете сделать это как хранимую процедуру:
и позвони с
затем передайте вывод через команду Richards sed, чтобы получить резервную копию привилегий.
источник
Хотя, похоже, ответ @Richard Bronosky правильный, я наткнулся на этот вопрос после попытки перенести набор баз данных с одного сервера на другой, и решение оказалось намного проще:
На этом этапе все мои данные были видны, если я вошел в систему как
root
, вmysql.user
таблице было все, что я ожидал, но я не мог войти в систему как любой из других пользователей и нашел этот вопрос, предполагая, что мне придется повторно оформитьGRANT
заявления.Однако оказывается, что сервер mysql просто необходимо было перезапустить, чтобы обновленные привилегии в
mysql.*
таблицах вступили в силу:Надеюсь, это поможет кому-то еще достичь того, что должно быть простой задачей!
источник
Как насчет PHP-скрипта? :)
Просмотрите исходный код этого скрипта, и вы получите все перечисленные привилегии:
источник
создайте файл сценария оболочки со следующим кодом:
############################################## 3 #**** затем запустите его на оболочке следующим образом: вам будет предложено дважды ввести пароль root, а затем на экране отобразится GRANTS SQL. ****
источник
One-liner делает почти то же самое, что и awesome
pt-show-grants
:На основе только инструментов Unix, дополнительное программное обеспечение не требуется.
Выполните из оболочки bash, предполагается, что у вас есть работа,
.my.cnf
гдеmysql root
можно прочитать пароль вашего пользователя.источник