MySQL के साथ उपयोगकर्ता विशेषाधिकार कैसे कॉपी करें?


12

मेरे पास कई डेटाबेस और उपयोगकर्ताओं के साथ एक MySQL स्थापना है जिसे मुझे एक नए MySQL स्थापना में माइग्रेट करने की आवश्यकता है। मैं निर्यात करने के लिए phpMyAdmin का उपयोग कर सकता हूं फिर डेटाबेस / तालिकाओं को आयात कर सकता हूं, लेकिन मुझे उपयोगकर्ताओं और अनुमतियों को स्थानांतरित करने के लिए कुछ भी नहीं पता है। मैं इसे आसानी से कैसे कर सकता हूं?

जवाबों:


17

इस तरह से एक स्क्रिप्ट mysql cli क्लाइंट का उपयोग करके आपके द्वारा उपयोगकर्ता खातों को फिर से बनाने के लिए उपयोग किए जाने वाले अनुदान कथनों की एक श्रृंखला का प्रिंट आउट लेगी। यदि आप अपने डेटाबेस क्रेडेंशियल को .my.cnf में संग्रहीत करते हैं तो यह कमांड सबसे अच्छा काम करेगा

#!/bin/bash
# adapted from (http://www.pyrosoft.co.uk/blog/2006/10/18/show-grants-for-all-users-on-mysql/)
(
 mysql --batch --skip-column-names -e "SELECT user, host FROM user" mysql 
) | while read user host
do
  echo "# $user @ $host"
  mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
done

यदि आप mysql के एक संस्करण से दूसरे में जा रहे हैं, तो आप mysql डेटाबेस के बस डंप के बजाय इसका उपयोग करना चाह सकते हैं। Mysql डेटाबेस का स्कीमा कभी-कभार अपडेट हो जाता है।

यह आपको उन खातों को चुनने और चुनने की भी अनुमति देगा, जिन्हें आप फिर से बनाना चाहते हैं, अगर कुछ क्रॉफ्ट हैं जिन्हें आप समाप्त करना चाहते हैं।


मैं हाल ही में एक उपयोगकर्ता पर इसका उपयोग कर रहा था जिसमें नामों में रिक्त स्थान शामिल था, जो भ्रमित था read, क्योंकि IFS डिफ़ॉल्ट रूप से अंतरिक्ष वर्ण को विभाजक के रूप में शामिल करता है। मेरा नया और बेहतर कमांड, जो सिस्टम अजीब उपयोगकर्ता नाम पर बेहतर काम करता है।

IFS=$'\t'; while read user host; do
  echo "user:$user host:$host"
  mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
  echo ""
done < <(mysql --batch --skip-column-names -e "SELECT user, host FROM mysql.user")

3

यह SHOW GRANTS;प्रत्येक उपयोगकर्ता के लिए एक फ़ाइल बनाएगा ।

फिर, प्रत्येक उपयोगकर्ता को प्रतिध्वनित करें SHOW GRANTS;और प्रत्येक पंक्ति में एक अर्धविराम संलग्न करें।

MYSQL_CONN="-uroot -prootpassword"
SQLSTMT="SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';')"
SQLSTMT="${SQLSTMT} FROM mysql.user WHERE user<>''"
mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" > /tmp/ShowGrants.sql
mysql ${MYSQL_CONN} -ANe < /tmp/ShowGrants.sql | sed 's/$/;/g' > MySQLUserGrants.sql
rm -f /tmp/ShowGrants.sql

आप एक ही काम करने के लिए इन उपकरणों को डाउनलोड और उपयोग कर सकते हैं:

कोशिश तो करो !!!


2

मेरा मानना ​​है कि आपको इस डेटा का बैकअप लेने और mysqlडेटाबेस को पुनर्स्थापित करने में सक्षम होना चाहिए ।


विशेष रूप से mysql.user टेबल
कोप्स

2
आपको यह सुनिश्चित करने की आवश्यकता है कि दोनों MySQL उदाहरण एक ही मुख्य संस्करण चला रहे हैं, अन्यथा आपको लक्ष्य MySQL सर्वर के साथ बंडल अपग्रेड स्क्रिप्ट चलाने की आवश्यकता होगी।
मैक्सवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.