GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso esportare i privilegi da MySQL e quindi importarli su un nuovo server?

Soluzione 1:

Non scherzare con il database mysql. C'è molto di più in corso oltre al semplice tavolo degli utenti. La soluzione migliore è il comando "MOSTRA SOVVENZIONI PER". Ho molti alias e funzioni di manutenzione della CLI nel mio .bashrc (in realtà i miei .bash_aliases che ho trovato nel mio .bashrc). Questa funzione:

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;}'
}

Il primo comando mysql utilizza SQL per generare SQL valido che viene reindirizzato al secondo comando mysql. L'output viene quindi reindirizzato attraverso sed per aggiungere commenti carini.

Il [email protected] nel comando ti permetterà di chiamarlo come:mygrants --host=prod-db1 --user=admin --password=secret

Puoi usare il tuo kit di strumenti unix completo su questo in questo modo:

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

Questo è IL modo giusto per spostare gli utenti. Il tuo MySQL ACL viene modificato con puro SQL.

Soluzione 2:

Esistono due metodi per estrarre le concessioni SQL da un'istanza MySQL

METODO N. 1

Puoi utilizzare pt-show-grants da Percona Toolkit

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

METODO N. 2

Puoi emulare pt-show-grants con quanto segue

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

Entrambi i metodi produrranno un dump SQL puro delle concessioni MySQL. Tutto ciò che resta da fare è eseguire lo script su un nuovo server:

mysql -uroot -p -A < MySQLUserGrants.sql

Fai un tentativo!!!

Soluzione 3:

La risposta di Richard Bronosky mi è stata estremamente utile. Molte grazie!!!

Ecco una piccola variazione che mi è stata utile. È utile per il trasferimento di utenti, ad es. tra due installazioni di Ubuntu che eseguono phpmyadmin. Basta eseguire il dump dei privilegi per tutti gli utenti tranne root, phpmyadmin e debian-sys-maint. Il codice è quindi

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;}'
}

Soluzione 4:

Oppure, utilizza percona-toolkit (ex maatkit) e usa pt-show-grants (o mk-show-grants ) per quello scopo. Non sono necessari script ingombranti e/o stored procedure.

Soluzione 5:

Puoi eseguire il mysqldump del database "mysql" e importarlo in quello nuovo; sarà richiesto un flush_privileges o un riavvio e vorrai sicuramente eseguire prima il backup del database mysq esistente.

Per evitare di rimuovere i tuoi privilegi esistenti, assicurati di aggiungere anziché sostituire le righe nelle tabelle dei privilegi (db, columns_priv, host, func, ecc.).


Linux
  1. Come aggiungere un nuovo utente MySQL e concedere privilegi di accesso

  2. Come esportare e importare le impostazioni DNS in CloudFlare

  3. Come scaricare un file da un server FTP, quindi eliminarlo automaticamente dal server una volta completato il download?

  4. come accedere a mysql e interrogare il database dal terminale linux

  5. Come posso eseguire il codice PHP dalla riga di comando?

Come esportare e importare macchine virtuali VirtualBox

Come ottenere le migliori prestazioni dal server Nginx

Come installare Nginx, MySQL e PHP (LEMP) su un server Ubuntu 15.04

Come importare un'esportazione di macchine virtuali su Windows Server 2012

Come installare e utilizzare MySQL Workbench su Ubuntu 18.04

Come posso ottenere messaggi di registro dal server LAMP su Ubuntu 10.04?