Saya mengalami masalah dalam mencadangkan basis data setelah pembaruan. Saya telah mencari-cari di sistem saya mencoba mencari tahu mengapa. Satu permintaan yang saya jalankan mengembalikan hasil ini.
Got error: 1449: The user specified as a definer ('cittool'@'%') does not exist when using LOCK TABLES
Setelah beberapa penyelidikan, tampaknya definisi untuk pandangan ini adalah akun pengembang lama yang telah dihapus dari sistem. Basis data dan pandangan dengan masalah ini jarang digunakan, dan sebagian besar disimpan untuk keperluan arsip.
Ada sekitar 40 tampilan dengan definisi yang tidak ada lagi. Apakah ada cara mudah untuk mengubah definisi ke akun berbeda pada semuanya sekaligus? Apakah ada cara untuk mendapatkan mysqldump dengan hanya membuang semua tampilan ke file sehingga saya bisa mengedit file itu dan membuat ulang tampilan?
Jawaban:
Buat file teks dengan semua definisi tampilan:
Anda mengedit AllMyViews.sql dari sana. Lalu, Jatuhkan Tampilan
Setelah mengedit AllMyViews.sql, muat ulang
Cobalah !!!
sumber
The user specified as a definer ('abc'@'1.2.3.4') does not exist
CREATE USER 'abc'@'1.2.3.4';
. Lalu, coba lagi.Anda dapat menggunakan ALTER VIEW bersamaan dengan skema informasi . Anda menyebutkan membuangnya ke file teks, jadi mungkin sesuatu seperti ini:
Campur ini dengan baris perintah mysql (dengan asumsi * nix, tidak akrab dengan windows):
Sidenote: Anda tidak dapat mengubah entri information_schema secara langsung . Note2: Ini hanya berfungsi untuk satu database pada satu waktu, jika Anda pergi dari WHERE table_schema Anda harus memasukkan perintah USE antara masing-masing.
sumber
SELECT table_name,view_definition FROM information_schema.views WHERE table_schema='cittmp';
kembali| Staff | |
echo "SELECT CONCAT("ALTER DEFINER=\`youruser\`@\`host\` VIEW...
Mengotomatiskan pada solusi Derek, ini akan mengubah DEFINER ke
root@localhost
dan mengaturSQL SECURITY INVOKER
(pastikan Anda menginginkannya terlebih dahulu!) Di semua tampilan di semua database:PERINGATAN: pastikan Anda telah membuat cadangan mysql penuh (mis. Dengan menghentikan mysqld, dan mencadangkan semua file di / var / lib / mysql) sebelum Anda menjalankannya - untuk berjaga-jaga ... Itu bekerja untuk saya, tetapi YMMV .
Anda juga harus memeriksa semua tabel / tampilan Anda dengan:
seharusnya tidak lagi mengeluh tentang definisi yang tidak valid dalam tampilan.
sumber
Ekspor semua tampilan basis data
<DB>
:atau:
Edit
views.sql
(ubah definisi) dan buat kembali:Tentukan
-u
dan-p
aktifkan jika perlu.sumber
views.sql
, harus diedit? Juga, bagaimana cara membuatnya kembali?DEFINER = olduser@oldhost
keDEFINER = newuser@newhost
, buatcat views.sql | mysql <DB>
ulang tampilan.