Mysql membuang pengguna dan hibah

Saya tahu cara mengekspor/mengimpor database menggunakan mysqldump & tidak apa-apa, tetapi bagaimana cara mendapatkan hak istimewa ke server baru

Untuk poin tambahan, sudah ada beberapa database yang ada di yang baru, bagaimana cara mengimpor hak istimewa server lama tanpa menghapus pasangan yang sudah ada

Server lama. 5. 0. 67-komunitas

Server baru. 5. 0. 51a-24+lenny1

EDIT. Saya mendapatkan dump db 'mysql' dari Server Lama & sekarang ingin tahu cara yang tepat untuk bergabung dengan db 'mysql' di Server Baru

Saya mencoba langsung 'Impor' menggunakan phpMyAdmin dan berakhir dengan kesalahan terkait duplikat (yang sudah saya migrasikan secara manual)

Adakah yang punya cara elegan untuk menggabungkan dua database 'mysql'?

Temukan di bawah semua kemungkinan solusi atau saran untuk pertanyaan di atas

Saran. 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 dan fungsi pemeliharaan CLI di file saya. bashrc (sebenarnya milik saya. bash_aliases yang saya sumber di my. bashrc). Fungsi ini

mygrants()
{
  mysql -B -N $@ -e "SELECT DISTINCT CONCAT(
    'SHOW GRANTS FOR \'', user, '\'@\'', host, '\';'
    ) AS query FROM mysql.user" | \
  mysql $@ | \
  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

$@ dalam perintah akan memungkinkan Anda untuk menyebutnya sebagai
mygrants –host=prod-db1 –user=admin –password=rahasia

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

Saran. 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

mygrants --host=prod-db1 --user=admin --password=secret | grep rails_admin | mysql --host=staging-db1 --user=admin --password=secret
_3 dengan yang berikut ini

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

Saran. 3

Jawaban Richard Bronosky sangat berguna bagi saya. Terimakasih banyak

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

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

Saran. 4

Atau, gunakan percona-toolkit (sebelumnya maatkit) dan gunakan

mygrants --host=prod-db1 --user=admin --password=secret | grep rails_admin | mysql --host=staging-db1 --user=admin --password=secret
3 (atau
mygrants --host=prod-db1 --user=admin --password=secret | grep rails_admin | mysql --host=staging-db1 --user=admin --password=secret
5) untuk tujuan itu. Tidak perlu skrip rumit dan/atau prosedur tersimpan

Saran. 5

Anda dapat mysqldump database 'mysql' dan mengimpor ke yang baru;

Untuk menghindari penghapusan hak istimewa yang ada, pastikan untuk menambahkan daripada mengganti baris dalam tabel hak istimewa (db, kolom_priv, host, func, dll. )

Saran. 6

Anda juga bisa melakukannya sebagai prosedur tersimpan

CREATE PROCEDURE spShowGrants()
    READS SQL DATA
    COMMENT 'Show GRANT statements for users'
BEGIN
    DECLARE v VARCHAR(64) CHARACTER SET utf8;
    DECLARE c CURSOR FOR
    SELECT DISTINCT CONCAT(
        'SHOW GRANTS FOR ', user, '@', host, ';'
    ) AS query FROM mysql.user;
    DECLARE EXIT HANDLER FOR NOT FOUND BEGIN END;  
    OPEN c;
    WHILE TRUE DO
        FETCH c INTO v;
        SET @v = v;
        PREPARE stmt FROM @v;
        EXECUTE stmt;
    END WHILE;
    CLOSE c;
END
_

dan menyebutnya dengan

$ mysql -p -e "CALL spShowGrants" mysql

lalu kirimkan output melalui perintah Richards sed untuk mendapatkan cadangan hak istimewa

Saran. 7

Bagaimana dengan skrip PHP?

Lihat sumber pada skrip ini dan Anda akan memiliki semua hak istimewa yang terdaftar

//connect
mysql_select_db("mysql", mysql_connect("localhost","root",""));

//create grants select statements
$rs = mysql_query("SELECT DISTINCT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') AS query FROM user");

//iterate through grants
while ($row=mysql_fetch_array($rs)) {
    //run grant query
    $rs2 = mysql_query($row['query']);
    //iterate through results
    while($row2 = mysql_fetch_array($rs2)){
        //print results
        echo $row2[0] . ";\n\n";
    }
}

Saran. 8

Meskipun tampaknya jawaban @Richard Bronosky adalah yang benar, saya menemukan pertanyaan ini setelah mencoba memigrasikan satu set database dari satu server ke server lain dan solusinya jauh lebih sederhana

server1$ mysqldump -u root -p --all-databases > dbdump.sql

server2$ mysql -u root -p < dbdump.sql

Pada titik ini, semua data saya terlihat jika saya masuk sebagai

mygrants --host=prod-db1 --user=admin --password=secret | grep rails_admin | mysql --host=staging-db1 --user=admin --password=secret
6, tabel
mygrants --host=prod-db1 --user=admin --password=secret | grep rails_admin | mysql --host=staging-db1 --user=admin --password=secret
7 memiliki semua yang saya harapkan, tetapi saya tidak dapat masuk sebagai pengguna lain mana pun dan menemukan pertanyaan ini dengan asumsi saya harus melakukannya

Namun, ternyata server mysql hanya perlu di-restart agar hak istimewa yang diperbarui di tabel

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

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

Semoga itu membantu orang lain mencapai apa yang seharusnya menjadi tugas sederhana

Saran. 9

buat file skrip shell dengan kode berikut

##############################################3

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

#

**** lalu jalankan di shell seperti ini
Anda akan diminta memasukkan kata sandi root dua kali dan kemudian GRANTS SQL akan ditampilkan di layar. ****

Saran. 10

One-liner melakukan hampir sama dengan

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

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

Hanya berdasarkan alat unix, tidak diperlukan perangkat lunak tambahan

Jalankan dari dalam bash Shell, diasumsikan Anda memiliki

MYSQL_CONN="-uroot -ppassword"
pt-show-grants ${MYSQL_CONN} > MySQLUserGrants.sql
1 yang berfungsi di mana kata sandi pengguna
MYSQL_CONN="-uroot -ppassword"
pt-show-grants ${MYSQL_CONN} > MySQLUserGrants.sql
2 Anda dapat dibaca

Penafian. Ini bersumber dari umpan sindikasi pihak ketiga melalui internet. Kami tidak bertanggung jawab atau berkewajiban atas ketergantungan, kepercayaan, keandalan, dan data teksnya. Kami memiliki hak tunggal untuk mengubah, menghapus, atau menghapus (tanpa pemberitahuan) konten atas kebijaksanaan mutlaknya dengan alasan apa pun

Apakah Mysqldump termasuk hibah?

mysql - mysqldump semua database termasuk pengguna/kata sandi dan hibah - Database Administrator Stack Exchange. Stack Overflow untuk Tim – Mulai berkolaborasi dan berbagi pengetahuan organisasi

Bagaimana cara mengambil cadangan pengguna dan hak istimewa MySQL?

Untuk sebagian besar operasi pencadangan, perintah mysqlbackup terhubung ke server MySQL menggunakan kredensial yang disertakan dengan opsi --user dan --password . Pengguna yang ditentukan membutuhkan hak istimewa tertentu. Anda dapat membuat pengguna baru dengan hak istimewa minimal, atau menggunakan akun administratif seperti root.

Bagaimana cara memberi pengguna hibah di MySQL?

Untuk MEMBERIKAN SEMUA hak istimewa kepada pengguna, memungkinkan pengguna tersebut mengontrol penuh basis data tertentu, gunakan sintaks berikut. mysql> BERIKAN SEMUA PRIVILEG PADA nama_database. * TO 'username'@'localhost'; Dengan perintah itu, kami telah memberi tahu MySQL untuk. BERIKAN PRIVILEGES dari tipe SEMUA (dengan demikian semuanya tentu saja).

Hak istimewa apa yang diperlukan untuk Mysqldump?

mysqldump memerlukan setidaknya hak istimewa SELECT untuk tabel yang dibuang, SHOW VIEW untuk tampilan yang dibuang, TRIGGER untuk pemicu yang dibuang, LOCK TABLES jika opsi --single-transaction tidak digunakan, dan (pada MySQL 8. 0. 21) PROSES jika opsi --no-tablespaces tidak digunakan