GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu exportovat oprávnění z MySQL a poté importovat na nový server?

Řešení 1:

Nezahrávejte si s mysql db. Děje se tam mnohem víc než jen tabulka uživatelů. Nejlepším řešením je příkaz „ZOBRAZIT GRANTY PRO“. V mém .bashrc mám spoustu aliasů údržby CLI a funkcí (ve skutečnosti mých aliasů .bash_aliases, které mám v mém .bashrc). Tato funkce:

mygrants()
{
  mysql -B -N [email protected] -e "SELECT DISTINCT CONCAT(
    'SHOW GRANTS FOR \'', user, '\'@\'', host, '\';'
    ) AS query FROM mysql.user" | \
  mysql [email protected] | \
  sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}'
}

První příkaz mysql používá SQL ke generování platného SQL, který je přenesen do druhého příkazu mysql. Výstup je pak veden přes sed, aby se přidaly pěkné komentáře.

Pří[email protected] v příkazu vám umožní volat jej jako:mygrants --host=prod-db1 --user=admin --password=secret

Na to můžete použít svou úplnou unixovou sadu nástrojů takto:

mygrants --host=prod-db1 --user=admin --password=secret | grep rails_admin | mysql --host=staging-db1 --user=admin --password=secret

To je ten správný způsob, jak přesunout uživatele. Váš MySQL ACL je upraven pomocí čistého SQL.

Řešení 2:

Existují dva způsoby extrahování grantů SQL z instance MySQL

METODA #1

Můžete použít pt-show-grants z Percona Toolkit

MYSQL_CONN="-uroot -ppassword"
pt-show-grants ${MYSQL_CONN} > MySQLUserGrants.sql

METODA #2

Můžete emulovat pt-show-grants s následujícím

MYSQL_CONN="-uroot -ppassword"
mysql ${MYSQL_CONN} --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql ${MYSQL_CONN} --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

Obě metody vytvoří čistý SQL výpis grantů MySQL. Vše, co zbývá udělat, je spustit skript na novém serveru:

mysql -uroot -p -A < MySQLUserGrants.sql

Vyzkoušejte to !!!

Řešení 3:

Odpověď Richarda Bronoského pro mě byla nesmírně užitečná. Mnohokrát děkuji!!!

Zde je malá variace, která se mi hodila. Je to užitečné pro přenos uživatelů, např. mezi dvěma instalacemi Ubuntu se spuštěným phpmyadmin. Stačí vypsat oprávnění pro všechny uživatele kromě root, phpmyadmin a debian-sys-maint. Kód je pak

mygrants()
{
mysql -B -N [email protected] -e "SELECT DISTINCT CONCAT(
'SHOW GRANTS FOR ''', user, '''@''', host, ''';'
) AS query FROM mysql.user WHERE user NOT IN ('root','phpmyadmin','debian-sys-maint')"  | \
mysql [email protected] | \
sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}'
}

Řešení 4:

Nebo použijte percona-toolkit (bývalý maatkit) a použijte pt-show-grants (nebo mk-show-grants ) za tímto účelem. Není potřeba složitých skriptů a/nebo uložených procedur.

Řešení 5:

Můžete mysqldump databázi 'mysql' a importovat do nové; bude vyžadován flush_privileges nebo restart a určitě budete chtít nejprve zálohovat existující mysq db.

Abyste předešli odebrání stávajících oprávnění, nezapomeňte řádky v tabulkách oprávnění (db, columns_priv, host, func atd.) přidávat, nikoli nahrazovat.


Linux
  1. Jak přidat nového uživatele MySQL a udělit přístupová oprávnění

  2. Jak exportovat a importovat nastavení DNS v CloudFlare

  3. Jak mohu spustit kód PHP z příkazového řádku?

  1. Jak stáhnout soubor ze serveru FTP a poté jej po dokončení stahování automaticky odstranit ze serveru?

  2. Jak mohu vidět velikost souborů a adresářů v linuxu?

  3. Jak donutím Linux, aby znovu získal novou IP adresu ze serveru DHCP?

  1. Jak vytvořit nového uživatele MySQL a udělit oprávnění

  2. Jak importovat exportní databázi v MYSQL MariaDB

  3. jak se přihlásit do mysql a dotazovat se na databázi z linuxového terminálu