วิธีการคัดลอกสิทธิ์ผู้ใช้กับ 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
Coops

2
คุณต้องตรวจสอบให้แน่ใจว่าอินสแตนซ์ MySQL ทั้งสองเวอร์ชันนั้นทำงานเหมือนกันมิฉะนั้นคุณจะต้องรันสคริปต์อัพเกรดที่มาพร้อมกับเซิร์ฟเวอร์ MySQL เป้าหมาย
Maxwell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.