sourcecode

mysqldump 및 데이터베이스 사용자 사용

copyscript 2023. 10. 16. 22:00
반응형

mysqldump 및 데이터베이스 사용자 사용

애플리케이션 데이터베이스에서 사용하는 모든 것을 하나의 스크립트로 만들기 위해 sqdump에 필요한 모든 옵션을 조립하려고 합니다.여기에는 데이터베이스 자체와 모든 데이터베이스 사용자/비밀번호/특권이 포함됩니다.

사용자 조각을 제외하고는 다 알아냈어요제가 현재 사용하고 있는 것은 다음과 같습니다.

mysqldump -h host -u root -p \
    --add-drop-database --routines -B database_name > backup.sql

그래서, 내가 뭘 놓치고 있는 거지?

데이터베이스 사용자/비밀번호/특권은mysql데이터베이스를 구축하고 덤프 명령에 의해 버려지지 않을 겁니다.덤프할 DB 목록에 해당 데이터베이스도 추가해야 합니다.

mysqldump ... --routines --databases database_name mysql > backup.sql

아니면 모든 걸 버리기만 하면 됩니다.

mysqldump ... --routines --all-databases > backup.sql

mysql 데이터베이스를 덤프할 때 다음을 잊지 마십시오.

 --flush-privileges  Emit a FLUSH PRIVILEGES statement after dumping the mysql
                     database.  This option should be used any time the dump
                     contains the mysql database and any other database that
                     depends on the data in the mysql database for proper
                     restore.

그래서 근본적인 오해가 있었습니다.사용자는 데이터베이스에 특정한 것이 아니라 서버 수준에서 작성됩니다.

다음 쿼리를 사용하여 모든 기존 사용자를 볼 수 있습니다.

SELECT * FROM mysql.user;

이 사실을 알고 있는 제 sqdump가 사용자들에게 아무것도 하지 말아야 한다는 것은 매우 명백합니다.그러나 사용자와 파마를 내보내는 것에 대한 답변이 필요하다면 다음 기사를 확인해 보는 것이 좋습니다.

http://pento.net/2009/03/12/backing-up-permissions-for-individual-databases/

게시판에 잡음이 생긴 것에 대해서는 미안하지만, 다른 사람들도 같은 오해가 생길까 봐 그 자리를 떠나려고 생각했습니다.

하나의 Mac OS X 개발 환경에서 새로운 환경으로 마이그레이션할 때 완벽한 프로세스 제공

0) 새 MacBook에서 MySQL의 새 버전 제거

제가 실수로 MySQL 8을 설치한 적이 있어서 예전 맥북보다 최신 버전이라 제거해야 했습니다.

# Remove binaries
$ brew uninstall mysql

# Remove data/config that is leftover
$ rm -r /usr/local/var/mysql/

1) 새 MacBook에 동일한 버전의 MySQL 설치

# Install version that matched old MacBook
$ brew install mysql@5.7

# Because it is an old version, you have to do a special configuration step
$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

# Start server
$ mysql.server start

2) 이전 MacBook의 데이터 덤프

$ mysqldump -uroot --flush-privileges --routines --all-databases > complete_dump.sql

3) 새 MacBook에서 데이터 복원

$ mysql -p -uroot < complete_dump.sql

를 살펴보고, 모든 데이터베이스를 덤프할 수 있으며, 사용자를 mysql system db + mysql_upgrade에 의존하지 않고 CREATE USER 및 GRANT 문으로 내보낼 수 있습니다.

mysqlpump # Dumps (almost) all databases (see [2])
mysqlpump --exclude-databases=% --users # Dumps all user accounts

당신이 할 수 있는 일인지 서류상으로는 불분명합니다.mysqlpump --users모든 데이터베이스와 사용자를 모두 확보할 수 있습니다.

일부 시스템 테이블은 기본적으로 생략됩니다(제한 사항 참조).

mysqdump 버전 10.19에는 옵션이 포함되어 있습니다.--system=usersGRANT 명령을 사용하여 CREATE USER를 덤프에 추가합니다.

mysqldump -h host -u root -p \
    --add-drop-database --routines -B database_name \
    --system=users > backup.sql

출처 : https://mariadb.com/kb/en/mysqldump/

데이터베이스 서버에 연결하고 다음을 실행합니다.

select concat('show grants for ','\'',user,'\'@\'',host,'\'') from mysql.user;

다음과 같은 것을 얻게 될 것입니다.

+--------------------------------------------------------+
| concat('show grants for ','\'',user,'\'@\'',host,'\'') |
+--------------------------------------------------------+
| show grants for 'mariadb.sys'@'localhost'              |
| show grants for 'mysql'@'localhost'                    |
| show grants for 'root'@'localhost'                     |
+--------------------------------------------------------+

출력을 임시 파일로 캡처합니다.

그리고 그 임시 파일의 각 행을 순환해서 당신의 mysql 서버에 전송하고 출력을 캡처합니다.

출력은 다른 서버에서 사용자를 재구성하는 데 사용할 수 있는 것입니다.

GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING 'invalid' OR unix_socket WITH GRANT OPTION
GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION    

현재 사용 중인 스크립트는 다음과 같습니다.

mysql -u${BACKUP_DB_USER} -p${BACKUP_DB_PASSWORD} -e"select concat('show grants for ','\'',user,'\'@\'',host,'\'') from mysql.user" > user_list_with_header.txt
sed '1d' user_list_with_header.txt > ./user.txt
while read user; do  mysql -u${BACKUP_DB_USER} -p${BACKUP_DB_PASSWORD} -e"$user" > user_grant.txt; echo "-- ${user}" >> user_privileges.txt; sed '1d' user_grant.txt >> user_privileges.txt; done < user.txt
echo "flush privileges" >> user_privileges.txt;
awk '{print $0";"}'  user_privileges.txt > all_user_privileges_final.sql
rm user.txt user_list_with_header.txt user_grant.txt user_privileges.txt

됩니다 all_user_privileges_final.sql.

물론 초기 쿼리를 제한하여 원하는 사용자만 나열할 수도 있습니다.

수.--system=users의 쓰레기를 mysql/MariaDBmysql 클라이언트가 MariaDB용인 경우.

예를 들어,

  1. mysql --version. 출력이 다음과 같은 경우mysql Ver 15.1 Distrib 10.6.8-MariaDB그리고나서

  2. mysqldump -h <hostname> -u <usename> -p --system=users > mysqldb_users.sql

언급URL : https://stackoverflow.com/questions/3982299/using-mysqldump-and-database-users

반응형