Saya tahu cara mengekspor / mengimpor basis data menggunakan mysqldump & tidak apa-apa, tetapi bagaimana cara mendapatkan hak istimewa ke server baru.
Untuk poin tambahan, sudah ada beberapa database yang sudah ada pada yang baru, bagaimana cara mengimpor hak server lama tanpa menghapus pasangan yang ada.
Server lama: 5.0.67-komunitas
Server baru: 5.0.51a-24 + lenny1
EDIT: Saya mendapat dump db 'mysql' dari Server Lama & sekarang ingin tahu cara yang tepat untuk bergabung dengan db 'mysql' di Server Baru.
Saya mencoba 'Impor' langsung menggunakan phpMyAdmin dan berakhir dengan kesalahan tentang duplikat (yang saya sudah bermigrasi secara manual).
Adakah yang punya cara elegan untuk menggabungkan kedua database 'mysql'?
Jawaban:
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 .bashrc saya (sebenarnya .bash_aliases yang saya sumberkan di .bashrc). Fungsi ini:
Perintah mysql pertama menggunakan SQL untuk menghasilkan SQL yang valid yang disalurkan ke perintah mysql kedua. Hasilnya kemudian disalurkan melalui sed untuk menambahkan komentar cantik.
$ @ Pada perintah akan memungkinkan Anda untuk memanggilnya sebagai: mygrants --host = prod-db1 --user = admin --password = rahasia
Anda dapat menggunakan kit alat unix lengkap Anda pada seperti ini:
Itulah cara yang tepat untuk memindahkan pengguna. ACL MySQL Anda dimodifikasi dengan SQL murni.
sumber
user
tabel pengguna dengan host%
, tetapi kemudian dalamdb
tabel Anda memiliki entrihost
dengan nilai eksplisit, entri-entri dalamdb
tabel tidak diambil menggunakan metode ini.-r
ke perintah mysql ke-2 dalam fungsi dan escapes ganda tidak akan dihasilkan olehmysql
. misal:mysql -r $@
Ada dua metode untuk mengekstrak SQL Grants dari MySQL Instance
METODE # 1
Anda dapat menggunakan pt-show-grants dari Percona Toolkit
METODE # 2
Anda dapat meniru
pt-show-grants
dengan yang berikut iniSalah satu metode akan menghasilkan dump SQL murni dari hibah MySQL. Yang tersisa untuk dilakukan adalah menjalankan skrip di server baru:
Cobalah !!!
sumber
Jawaban Richard Bronosky sangat berguna bagi saya. Terimakasih banyak!!!
Berikut adalah variasi kecil yang bermanfaat bagi saya. Sangat membantu untuk mentransfer pengguna misalnya antara dua instalasi Ubuntu yang menjalankan phpmyadmin. Hanya buang hak istimewa untuk semua pengguna selain dari root, phpmyadmin dan debian-sys-Maint. Kode itu kemudian
sumber
grep rails_admin
dapat menyimpulkan bagaimana melakukan ini tanpa membuat fungsi khusus untuk setiap kasus tepi. Gunakan opsi "invert-match" grep seperti:mygrants --host=prod-db1 --user=admin --password=secret | grep -Ev 'root|phpmyadmin|debian-sys-maint' | mysql --host=staging-db1 --user=admin --password=secret
Atau, gunakan percona-toolkit (mantan maatkit) dan gunakan
pt-show-grants
(ataumk-show-grants
) untuk tujuan itu. Tidak perlu skrip rumit dan / atau prosedur tersimpan.sumber
Anda dapat mysqldump database 'mysql' dan impor ke yang baru; flush_privileges atau restart akan diperlukan dan Anda pasti ingin mencadangkan db mysq yang ada terlebih dahulu.
Untuk menghindari penghapusan hak istimewa yang ada, pastikan untuk menambahkan daripada mengganti baris dalam tabel hak istimewa (db, kolom_priv, host, func, dll.).
sumber
Anda juga bisa melakukannya sebagai prosedur tersimpan:
dan menyebutnya dengan
kemudian menyalurkan output melalui perintah sed Richards untuk mendapatkan cadangan dari hak istimewa.
sumber
Sementara tampaknya jawaban @Richard Bronosky adalah yang benar, saya menemukan pertanyaan ini setelah mencoba memigrasi satu set database dari satu server ke server lain dan solusinya jauh lebih sederhana:
Pada titik ini, semua data saya terlihat jika saya masuk sebagai
root
,mysql.user
tabel memiliki semua yang saya harapkan, tetapi saya tidak bisa masuk sebagai pengguna lain dan menemukan pertanyaan ini dengan asumsi saya harus kembali menerbitkanGRANT
pernyataan.Namun, ternyata server mysql hanya perlu di-restart agar hak istimewa yang diperbarui dalam
mysql.*
tabel berlaku:Semoga itu membantu orang lain mencapai apa yang seharusnya menjadi tugas sederhana!
sumber
Bagaimana dengan skrip PHP? :)
Lihat sumber pada skrip ini dan Anda akan memiliki semua hak istimewa yang terdaftar:
sumber
buat file skrip shell dengan kode berikut:
############################################ 3 #**** kemudian jalankan di shell seperti ini: Anda akan diminta untuk memasukkan kata sandi root dua kali dan kemudian GRANTS SQL akan ditampilkan di layar. ****
sumber
One-liner melakukan hampir sama dengan yang mengagumkan
pt-show-grants
:Hanya berdasarkan alat unix, tidak ada perangkat lunak tambahan yang diperlukan.
Jalankan dari dalam bash shell, diasumsikan Anda memiliki fungsi di
.my.cnf
mana kata sandimysql root
pengguna Anda dapat dibaca.sumber