source

MySQL 사용자 백업

factcode 2023. 9. 21. 21:33
반응형

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

반응형