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.