আমি কীভাবে মাইকিউএল-তে একটি দর্শকের ডিফাইনার পরিবর্তন করব?


35

আমি যখন মাইএসকিলডাম্প চালাই, তখন আমি একটি ত্রুটি পাই:

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

এটি বোঝা যায় কারণ foobarএকটি উত্তরাধিকারী মেশিন যা এখন আর নেই।

আমি কীভাবে আমার সমস্ত টেবিলের সংজ্ঞাটি 'রুট' @ 'লোকালহোস্ট' এ পরিবর্তন করব?


4
আপনার কি ভিউ আছে? টেবিলগুলির নিশ্চিতকরণ নেই আমি নিশ্চিত ... এছাড়াও dba.stackexchange.com/q/4129/630 দেখুন
gbn

1
@gbn +1 আপনি ঠিক বলেছেন - লিঙ্কটির জন্য তারা মতামত ছিল - তবে আমি এটি বেশ সঠিকভাবে কাজ করতে পারি না। যাইহোক, আমি এসকিউএলজিতে মতামতগুলি সংশোধন করতে সক্ষম হয়েছি যাতে আমি ডাম্পটি করতে পারি।
kfmfe04

এটা আমার জন্য কাজ করে। {{সব দেওয়া অনুগ্রহ বিকল্পের সাহায্যে 'পাসওয়ার্ড' দ্বারা চিহ্নিত 'রুট' @ '%'; }}
মুহাম্মদ আজিম

উত্তর:


33

আমি যা মনে করি তা হ'ল যে ডেটাবেসটি আপনি ডাম্প করার চেষ্টা করছেন সেগুলিতে এমন পদ্ধতি / পদ্ধতি রয়েছে যা ব্যবহারকারীর দ্বারা মূল @ 'ফুবার' হিসাবে লগ ইন করার সময় সংজ্ঞায়িত করা হয়েছিল।

এখন সমাধানটি হ'ল আপনাকে সেই পদ্ধতি / পদ্ধতিগুলির জন্য নির্ধারকগুলি প্রতিস্থাপন করতে হবে

তারপরে আপনি ত্রুটি ছাড়াই ডাম্প তৈরি করতে পারেন।

আপনি এই মত করতে পারেন ..

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

সাবধান থাকুন, কারণ এটি সমস্ত ডাটাবেসের জন্য সমস্ত সংজ্ঞা পরিবর্তন করবে।

চেষ্টা করে দেখুন ....!

আপডেট 9 ফেব্রুয়ারী 2012

আমি যেমন @ জিবিএন দ্বারা প্রদত্ত লিঙ্কটি দেখেছি যা @ রোল্যান্ডোর দেওয়া একটি উত্তর যা কেসও হতে পারে। লিঙ্কটি দেখুন

@ রোল্যান্ডোমাইএসকিউএলডিবিএ 2011-12-16 11:20 ইডিটি দ্বারা সম্পাদনা করুন

ঝুঁকিপূর্ণ থাকাকালীন, এই উত্তরটি ভাল। কেবল স্পষ্ট করে বলতে: আপনি আপনার ক্যোয়ারীতে ডাটাবেসটিকে এভাবে নির্দিষ্ট করতে পারেন:

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

1
উপরের লিঙ্কটি কীভাবে এটি কম ঝুঁকিপূর্ণ হতে পারে এমন বিবৃতিগুলির সাথে কীভাবে করা যায় তা দেখায় ... এছাড়াও, দয়া করে আপনার আপডেটের জন্য সংশোধনকারীদের জন্য আমার আপডেটটি দেখুন
gbn

UPDATEটেবিল পরিবর্তিত কিন্তু mysqldumpএটি দেখতে না: mysqldump: Got error: 1449: The user specified as a definer ('root'@'%') does not exist when using LOCK TABLES। পুনরায় চালু করার পরেও mysql। আমি দৌড়াচ্ছি mysql-5.5.31
এক্স-ইউরি

আমার খারাপ। আমারও ভুল ভুলের সাথে মতামত ছিল। update mysql.procপদ্ধতির সত্যই কাজ করে।
এক্স-ইউরি

কাজ হয়নি ....
カ オ ナ シ

3
এই উত্তরটি পদ্ধতি এবং ফাংশন definers পরিবর্তন করার জন্য কাজ করে কিন্তু একটি এর definer পরিবর্তন করে না দেখুন
অ্যান্টনি জি - মনিকার পক্ষে ন্যায়বিচার

35

--single-transactionস্যুইচটি ব্যবহার করা সহজ :

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

1
দুঃখিত, আসল প্রশ্নে বর্ণিত সমস্যাটি কীভাবে সমাধান করা যায়? দেখে মনে হচ্ছে আপনি ভুল প্রশ্নের উত্তর দিয়েছেন ...
dezso

6
উত্তরের কাঠামোটি ভুল, কারণ - ডাটাবেসের নামের আগে - একচেটিয়া-লেনদেন হওয়া দরকার, তবে উত্তরটি আসলে সঠিক। এই বিকল্পটি নির্দিষ্ট করে mysqldump এর লকিং আচরণ পরিবর্তন করে ইস্যুটির চারপাশে কাজ করে, সুতরাং মূল প্রশ্নে ত্রুটি আর দেখা যায় না।
মাইকেল - sqlbot

আমিও একই সমস্যার মুখোমুখি হয়েছি। কাজ - একসেল-লেনদেন

এটি কী করে তা নিশ্চিত নয়, তবে যদিও এটি কাজ করেছে! ধন্যবাদ
শ্রী হর্ষ কাপ্পাল

17

দ্রুত সমাধানটি হ'ল সুনির্দিষ্টভাবে পুনরায় তৈরি করা হবে যাতে এটি বিদ্যমান থাকে, যতক্ষণ না এটি বিদ্যমান ব্যবহারকারীদের সাথে কোনও বিরোধ সৃষ্টি না করে।

CREATE USER 'root'@'foobar';


যদি ব্যবহারকারী 'রুট' @ '%' থাকতেন? আমরা যে সার্ভারের জন্য দায়বদ্ধ সেগুলিতে আমি কেবল এটিকে অস্বীকার করি।
আটটিলা ফুলপ

@ অ্যাতিলাফুলপ হ্যাঁ, সুরক্ষা অবশ্যই নিশ্চিতভাবে বিবেচনা করা উচিত, তবে আমি বলেছিলাম এটি একটি "দ্রুততম" সমাধান, নিখুঁত সমাধান নয়। একবার আমদানি শেষ হলে অতিরিক্ত ব্যবহারকারী থাকার ঝুঁকি হ্রাস করতে ব্যবহারকারী মোছা যাবে।
কলিনম

তুমি ঠিক তাই আমি কেবল এই বিশেষ দিকটির দিকেও দৃষ্টি আকর্ষণ করতে চেয়েছিলাম। আমার সহকর্মীরা 'রুট' @ '%' যুক্ত করে যতক্ষণ চক নরিস জীবিত থাকবে ততক্ষণ এটিকে সেখানে রেখে দিতেন। চিরকাল;)
আটটিলা ফুলপ

6

ডাটাবেসের সমস্ত দর্শন রফতানি করুন <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

বা:

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

views.sqlএগুলি সম্পাদনা করুন এবং পুনরায় তৈরি করুন:

cat views.sql | mysql <DB>

উল্লেখ করুন -uএবং -pপ্রয়োজনে স্যুইচ করুন।


এটি সবচেয়ে পরিষ্কার উত্তর
ওল্ফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.