इस तरह से एक स्क्रिप्ट 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")