ฉันมีการติดตั้ง MySQL ที่มีฐานข้อมูลและผู้ใช้จำนวนมากที่ฉันต้องย้ายไปติดตั้ง MySQL ใหม่ ฉันสามารถใช้ phpMyAdmin เพื่อส่งออกจากนั้นนำเข้าฐานข้อมูล / ตาราง แต่ฉันไม่รู้ว่าจะย้ายผู้ใช้และสิทธิ์ใด ๆ ฉันจะทำสิ่งนี้ได้อย่างง่ายดาย
ฉันมีการติดตั้ง MySQL ที่มีฐานข้อมูลและผู้ใช้จำนวนมากที่ฉันต้องย้ายไปติดตั้ง MySQL ใหม่ ฉันสามารถใช้ phpMyAdmin เพื่อส่งออกจากนั้นนำเข้าฐานข้อมูล / ตาราง แต่ฉันไม่รู้ว่าจะย้ายผู้ใช้และสิทธิ์ใด ๆ ฉันจะทำสิ่งนี้ได้อย่างง่ายดาย
คำตอบ:
สคริปต์เช่นนี้จะใช้ไคลเอนต์ 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")
สิ่งนี้จะสร้าง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
คุณสามารถดาวน์โหลดและใช้เครื่องมือเหล่านี้เพื่อทำสิ่งเดียวกัน:
ให้มันลอง !!!
ฉันเชื่อว่าคุณควรจะสามารถย้ายข้อมูลนี้ได้โดยการสำรองและกู้คืนmysql
ฐานข้อมูล