it-swarm.asia

Bagaimana cara mengubah DEFINER dari VIEW di Mysql?

Ketika saya menjalankan mysqldump, saya mendapatkan kesalahan:

mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES

Ini masuk akal karena foobar adalah mesin lawas yang tidak ada lagi.

Bagaimana cara mengubah definisi semua tabel saya menjadi 'root' @ 'localhost'?

36
kfmfe04

Apa yang saya pikirkan adalah bahwa database yang Anda coba buang berisi prosedur/metode yang didefinisikan oleh pengguna saat login sebagai root @ 'foobar'.

Sekarang solusinya adalah Anda harus mengganti definisi untuk prosedur/metode tersebut

maka Anda dapat menghasilkan dump tanpa kesalahan.

anda dapat melakukan ini seperti ..

 UPDATE `mysql`.`proc` p SET definer = '[email protected]' WHERE definer='[email protected]'

Hati-hati, karena ini akan mengubah semua definisi untuk semua database.

Cobalah....!

UPDATE pada 9 Feb 2012

Ketika saya melihat tautan yang diberikan oleh @gbn yang merupakan jawaban yang diberikan oleh @Rando yang juga bisa menjadi Kasus. Silakan kunjungi tautan

EDIT oleh @RolandoMySQLDBA 2011-12-16 11:20 EDT

Meskipun berisiko, jawaban ini bagus. Hanya untuk memperjelas: Anda dapat menentukan basis data dalam permintaan Anda seperti ini:

 UPDATE `mysql`.`proc` p SET definer = '[email protected]' WHERE definer='[email protected]' AND db='whateverdbyouwant';
33
Abdul Manaf

Lebih mudah menggunakan --single-transaction beralih:

mysqldump --single-transaction -u username -p db > db.sql
36
rod

Solusi tercepat hanya akan membuat ulang definisi jadi itu ada, asalkan tidak membuat konflik dengan pengguna yang ada.

CREATE USER 'root'@'foobar';

18
ColinM

Ekspor semua tampilan basis data <DB>:

mysql -BNe "SELECT TABLE_NAME FROM TABLES WHERE TABLE_SCHEMA = '<DB>' AND TABLE_TYPE = 'VIEW'" \
    information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql

atau:

mysql -BNe "SELECT TABLE_NAME FROM VIEWS WHERE TABLE_SCHEMA = '<DB>'" \
    information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql

Edit views.sql dan buat ulang:

cat views.sql | mysql <DB>

Tentukan -u dan -p beralih jika perlu.

5
x-yuri