MySQL로 사용자 권한을 복사하는 방법은 무엇입니까?

MySQL로 사용자 권한을 복사하는 방법은 무엇입니까?

새로운 MySQL 설치로 마이그레이션해야 하는 많은 데이터베이스와 사용자가 포함된 MySQL 설치가 있습니다. phpMyAdmin을 사용하여 데이터베이스/테이블을 내보낸 다음 가져올 수 있지만 사용자와 권한을 이동하는 방법에 대해서는 아무것도 모릅니다. 어떻게 하면 쉽게 할 수 있나요?

답변1

이와 같은 스크립트는 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 데이터베이스의 스키마는 때때로 업데이트됩니다.

또한 제거하고 싶은 잔인함이 있는 경우 다시 만들고 싶은 계정을 선택하고 선택할 수도 있습니다.


readIFS에는 기본적으로 공백 문자가 구분 기호로 포함되어 있기 때문에 최근에 이름에 공백이 포함된 사용자에게 이것을 사용하고 있었는데 혼란스러웠습니다 . 새롭고 향상된 명령은 시스템의 이상한 사용자 이름에서 더 잘 작동하는 것 같습니다.

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")

답변2

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} -AN < /tmp/ShowGrants.sql | sed 's/$/;/g' > MySQLUserGrants.sql
rm -f /tmp/ShowGrants.sql

다음 도구를 다운로드하여 사용하여 동일한 작업을 수행할 수도 있습니다.

시도 해봐 !!!

답변3

데이터베이스 를 백업하고 복원하여 이 데이터를 마이그레이션할 수 있어야 한다고 생각합니다 mysql.

관련 정보