MySQL 사용자 백업
MySQL 사용자와 해당 권한을 백업하려면 어떻게 해야 합니까?
내 땅바닥 같은 거?
다음과 같은 것을 찾고 있습니다.
mysqldump -d -u root -p MyTable > Schema.sql
mysql -BNe "select concat('\'',user,'\'@\'',host,'\'') from mysql.user where user != 'root'" | \
while read uh; do mysql -BNe "show grants for $uh" | sed 's/$/;/; s/\\\\/\\/g'; done > grants.sql
다음을 사용하여 mysql 데이터베이스를 백업할 수 있습니다.
mysqldump -u root -p mysql > mysql.sql
를 실행하여 mysql 데이터베이스를 복원합니다.
mysql -uroot -p mysql < mysql.sql
잊지말구요
FLUSH PRIVILEGES
쓰레기장을 복구한 후에
도움이 되길...
지금까지 MySQL을 사용해 본 경험으로는 명령줄을 통해 백업 사용자와 사용자의 권한을 확인할 수 없었습니다.
하지만 중요한 데이터는 mysql을 백업함으로써 백업할 수 있습니다.
mysqldump -u root -p mysql > mysql.sql
페르코나는 이를 위한 훌륭한 도구를 가지고 있습니다.pt-show-grants
사용자와 권한을 덤프하여 쉽게 다시 로드할 수 있습니다.
https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html
사용자와 권한은 'mysql'이라는 데이터베이스에 저장됩니다.mysqldump를 사용하여 'mysql'이라는 데이터베이스의 테이블을 백업할 수 있습니다.
MySQL 사용자와 권한을 매일 백업할 때 스크립트를 사용하는 것이 좋습니다.한 가지를 살펴봅니다.
#!/bin/sh
HOSTNAME="localhost"
mysql -h $HOSTNAME -B -N -e "SELECT CONCAT('\'', user,'\'@\'', host, '\'') FROM user WHERE user != 'debian-sys-maint' AND user != 'root' AND user != ''" mysql > mysql_all_users_$HOSTNAME.txt
while read line; do mysql -h $HOSTNAME -B -N -e "SHOW GRANTS FOR $line"; done < mysql_all_users_$HOSTNAME.txt > mysql_all_users_$HOSTNAME.sql
sed -i.bak 's/$/;/' mysql_all_users_$HOSTNAME.sql
rm mysql_all_users_$HOSTNAME.txt
rm mysql_all_users_$HOSTNAME.sql.bak
이 스크립트의 결과는 사용자 및 권한이 있는 mysqldump 파일이 됩니다.
추신. MySQL에 암호가 필요한 경우 - put-p
아니면-u username -p
끝나고mysql -h $HOSTNAME
두 군데에
위에 제시된 스크립트들은 일반적인 개념을 제시하고 있지만, 비효율적입니다.그들은 mysql n+1번을 위조/실행하고 있습니다.mysql로 두번의 호출만으로 가능합니다.
mysql ${logininfo} -B -N -e "SELECT CONCAT('\'',user,'\'@\'',host,'\'') from user where user != 'root'" mysql | \
while read uh
do
echo "SHOW GRANTS FOR ${uh};"
done | mysql ${logininfo} -B -N | sed -e 's/$/;/' > ${outfile}
루트 이외의 사용자가 백업하지 않으려는 경우 첫 번째 mysql 호출의 where 절에 사용자 != 'whatever'을 지정합니다.
아마 mysql 명령 줄에 대해서는 꽤 분명하겠지만 위의 @spirit의 답변에 대해서는 두 mysql 명령 뒤에 -u root -ppassword를 추가해야 했습니다.
mysql -u root -pppassword -BNe "user != 'root' | 를 읽는 동안 mysql.user에서 "concat(''',user''',"@',host,"'를 선택합니다; do mysql -u root -ppassword -BNe "show grants for $uh" | sed 's/$/; s/\/\/g'; done > grants.sql;
언급URL : https://stackoverflow.com/questions/597732/backup-mysql-users
'source' 카테고리의 다른 글
MySQL 쿼리 캐싱: 최대 캐시 크기 128MB로 제한? (0) | 2023.09.21 |
---|---|
워드프레스 - 역할이 없는 모든 사용자 삭제 (0) | 2023.09.21 |
OLD에서 각각의 차이를 확인하는 방법.* MySQL 트리거에서 NEW.* 열로 이동하시겠습니까? (0) | 2023.09.21 |
내부에 추가할 수 있습니까?후손의 이벤트 청취자를 파괴하지 않고 HTML? (0) | 2023.09.21 |
Vim endent xml 파일 (0) | 2023.09.21 |