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.