답변:
이와 같은 스크립트는 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
이러한 도구를 다운로드하여 사용하여 동일한 작업을 수행 할 수도 있습니다.
시도 해봐 !!!