Mysql’deki BİR GÖRÜNÜMÜN TANICI’sini nasıl değiştiririm?


35

Mysqldump çalıştırdığımda, bir hata alıyorum:

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

Bu mantıklı çünkü foobarartık var olmayan eski bir makine.

Tüm tablolarımın tanımlayıcısını 'root' @ 'localhost' olarak nasıl değiştiririm?


4
Görüşlerin var mı? Tabloların tanımları yok
gbn

1
@gbn +1 haklıydınız - görünümdeydiler - bağlantı için teşekkürler, ama tam olarak çalışamadığını gördüm. Ancak, dökümü yapabilmek için SQLyog'daki görünümleri değiştirebildim.
kfmfe04

Bu benim için çalışıyor. {{hepsini ver . hibe seçeneğiyle 'şifre' ile tanımlanan 'kök' @ '%'; }}
Muhammad Azeem

Yanıtlar:


33

Düşündüğüm şey, dökmeye çalıştığınız veritabanının root @ 'foobar' olarak giriş yaparken bir kullanıcı tarafından tanımlanan prosedürleri / yöntemleri içermesidir.

Şimdi çözüm, bu prosedürler / yöntemler için tanımlayıcıyı değiştirmek zorunda olmanızdır.

daha sonra hatasız dökümü oluşturabilirsiniz.

böyle yapabilirsin ..

 UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@foobar'

Dikkatli olun, çünkü bu tüm veritabanları için tüm tanımları değiştirecektir.

Dene....!

9 Şubat 2012 tarihinde GÜNCELLEME

@ Rolando tarafından verilen bir cevap olan gbn tarafından verilen bağlantıyı gördüğüm gibi bu da olabilir. Lütfen linki ziyaret edin

@RolandoMySQLDBA tarafından EDIT 2011-12-16 11:20 EDT

Riskli olsa da, bu cevap iyidir. Sadece netleştirmek için: Sorgunuzdaki veritabanını şöyle belirtebilirsiniz:

 UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@foobar' AND db='whateverdbyouwant';

1
Yukarıdaki bağlantı, daha az riskli olabilecek ALTER ifadeleriyle nasıl yapılacağını gösterir ... Ayrıca, lütfen GÜNCELLEME'deki
tanımlarımı

UPDATEtablo değişti, ama mysqldumpgörmüyor: mysqldump: Got error: 1449: The user specified as a definer ('root'@'%') does not exist when using LOCK TABLES. Yeniden başlattıktan sonra bile mysql. Koşuyorum mysql-5.5.31.
x-yuri

Benim hatam. Ben de yanlış tanımlayıcılı görüşlere sahiptim. update mysql.procyaklaşım gerçekten işe yarıyor.
x-yuri

İşe yaramadı ....
カ オ ナ シ

3
Bu cevap prosedürlerin ve fonksiyonların tanımlarını değiştirmek için çalışır, ancak bir Görünümün tanımlayıcısını değiştirmez .
Anthony G -

35

--single-transactionAnahtarı kullanmak daha kolay :

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

1
Maalesef, asıl soruda açıklanan sorunu nasıl çözüyor? Yanlış soruyu cevaplamış
gibisin

6
Cevabın yapısı yanlıştır, çünkü - tek işlemin veritabanı adından önce olması gerekir, ancak cevap aslında doğrudur. Bu seçeneğin belirtilmesi, mysqldump'ın kilitleme davranışını değiştirerek bu sorunu giderir, böylece orijinal sorudaki hata artık oluşmaz.
Michael - sqlbot

Ben de aynı problemle karşılaştım. çalıştı - tek işlem.

Ne yaptığından emin değilim, ama yine de çalıştı! Thanks
Sri Harsha Kappala 4: 09'da

17

En hızlı çözüm, tanımlayıcıyı yeniden oluşturmaktır, böylece var olan kullanıcılarla herhangi bir çatışma yaratmadığı sürece var olur.

CREATE USER 'root'@'foobar';


Kullanıcı 'root' @ '%' ise? Sorumlu olduğumuz bir sunucuda böyle bir şeyi inkar ediyorum.
Attila Fulop

@AttilaFulop Evet, güvenlik kesinlikle göz önünde bulundurulmalı, ancak bunun "en hızlı" çözüm olduğunu söyledim, mükemmel değil. Alma işlemi tamamlandıktan sonra, fazladan kullanıcı olma riskini azaltmak için kullanıcı silinebilir.
ColinM

Bu konuda haklısın. Sadece bu özel konuya da dikkat çekmek istedim. Çalışma arkadaşlarım 'root' @ '%' öğesini ekler ve Chuck Norris hayatta olduğu sürece orada bırakırdı. sonsuza dek;)
Attila Fulop 23:16

6

Veritabanının tüm görünümlerini dışa aktar <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

veya:

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

Düzen views.sqlve bunları yeniden:

cat views.sql | mysql <DB>

Gerekirse belirtin -uve -pdeğiştirin.


Bu en temiz cevaptır
Wolfe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.