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


12

새 데이터베이스로 마이그레이션해야하는 많은 데이터베이스와 사용자가있는 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 데이터베이스의 스키마가 때때로 업데이트됩니다.

또한 제거하고 싶은 부서가있는 경우 다시 만들 계정을 선택하고 선택할 수 있습니다.


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

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.