GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa mengekspor hak istimewa dari MySQL dan kemudian mengimpor ke server baru?

Solusi 1:

Jangan main-main dengan mysql db. Ada lebih banyak hal yang terjadi di sana daripada hanya tabel pengguna. Taruhan terbaik Anda adalah perintah "SHOW GRANTS FOR". Saya memiliki banyak alias pemeliharaan CLI dan fungsi di .bashrc saya (sebenarnya .bash_aliases saya yang saya sumber di .bashrc saya). Fungsi ini:

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

Perintah mysql pertama menggunakan SQL untuk menghasilkan SQL yang valid yang disalurkan ke perintah mysql kedua. Outputnya kemudian disalurkan melalui sed untuk menambahkan komentar cantik.

[email protected] dalam perintah akan memungkinkan Anda untuk menyebutnya sebagai:mygrants --Host=prod-db1 --user=admin --password=secret

Anda dapat menggunakan kit alat unix lengkap Anda seperti ini:

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

Itu adalah cara yang tepat untuk memindahkan pengguna. ACL MySQL Anda dimodifikasi dengan SQL murni.

Solusi 2:

Ada dua metode untuk mengekstraksi SQL Grants dari Instans MySQL

METODE #1

Anda dapat menggunakan pt-show-grants dari Percona Toolkit

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

METODE #2

Anda dapat meniru pt-show-grants dengan yang berikut

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

Metode mana pun akan menghasilkan dump SQL murni dari hibah MySQL. Yang harus dilakukan hanyalah menjalankan skrip di server baru:

mysql -uroot -p -A < MySQLUserGrants.sql

Cobalah !!!

Solusi 3:

Jawaban Richard Bronosky sangat berguna bagi saya. Terima kasih banyak!!!

Ini adalah variasi kecil yang berguna bagi saya. Sangat membantu untuk mentransfer pengguna, mis. antara dua instalasi Ubuntu yang menjalankan phpmyadmin. Buang saja hak istimewa untuk semua pengguna selain dari root, phpmyadmin dan debian-sys-maint. Maka kodenya adalah

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

Solusi 4:

Atau, gunakan percona-toolkit (sebelumnya maatkit) dan gunakan pt-show-grants (atau mk-show-grants ) untuk alasan tersebut. Tidak perlu skrip rumit dan/atau prosedur tersimpan.

Solusi 5:

Anda dapat mysqldump database 'mysql' dan mengimpor ke yang baru; flush_privileges atau restart akan diperlukan dan Anda pasti ingin mencadangkan mysq db yang ada terlebih dahulu.

Untuk menghindari penghapusan hak istimewa Anda yang ada, pastikan untuk menambahkan, bukan mengganti baris di tabel hak istimewa (db, column_priv, host, func, dll.).


Linux
  1. Cara Menambahkan Pengguna MySQL Baru dan Memberikan Hak Akses

  2. Cara Mengimpor Database Ekspor di MYSQL MariaDB

  3. Bagaimana saya bisa melihat ukuran file dan direktori di linux?

  1. Cara Mengekspor dan Mengimpor pengaturan DNS di CloudFlare

  2. Bagaimana Cara Mengunduh File Dari Server Ftp, Kemudian Secara Otomatis Menghapusnya Dari Server Setelah Pengunduhan Selesai?

  3. cara masuk ke mysql dan menanyakan database dari terminal linux

  1. Cara Membuat Pengguna MySQL Baru dan Memberikan Hak Istimewa

  2. Bagaimana saya bisa mengeksekusi kode PHP dari baris perintah?

  3. Bagaimana cara memaksa Linux untuk mendapatkan kembali alamat IP baru dari server DHCP?