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.sqlMETODE #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
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" mysqllalu 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.sqlPada 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 _0Semoga 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 _2Hanya 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