MySQL 서버 백업

MySQL 서버 백업

MySQL 서버의 모든 데이터베이스, 사용자 등을 백업하고 싶습니다.

이 명령을 접했는데 mysqldump이렇게 사용할 수 있다고 생각하시나요? (원격 서버를 로컬 시스템에 백업하려고 시도 중)

mysqldump -h web-server.com -u root -p root --all-databases > "/backups/mysql/`date +%Y%m%d`.sql"

하지만:

  1. 무슨 일이 일어나고 있는지 거의 알지 못한 채 실행하는 것이 두렵습니다. (우리는 MySQL 데이터베이스에 많은 데이터를 가지고 있으며 이를 잃어서는 안 됩니다!) 따라서 첫 번째 질문은 이것이 내가 원하는 효과를 얻을 수 있는가 하는 것입니다. 원격 서버(예: 위치)에 로그인하고 모든 mysql 데이터베이스를 로컬 시스템의 경로에 백업하시겠습니까 web-server.com?/backups/mysql

  2. 나는 이것이 MySQL 서버 장애가 발생할 경우 각 데이터베이스에 대한 모든 사용자 정보를 그대로 유지한다고 믿지 않습니다. 방금 사용자 정보가 MySQL 데이터베이스에 다른 데이터베이스로 저장되어 있나요? 아니면 서버 자체의 기능인가요? 이 경우 사용자 데이터를 포함하도록 데이터베이스를 백업하는 다른 방법이 있습니까?

답변1

1) 예, 이것은 모든 데이터베이스의 내용 을 일련의 INSERT SQL 명령으로 덤프하여 mysql < backup.sql. --all-databases그리고 쉽게 검색할 수 없습니다.

mysqldump사용하려는 다른 옵션이 있는지 알아보려면 매뉴얼 페이지를 확인하는 것이 좋습니다 .

2) 사용자 정보 및 액세스 제어는 이를 포함하여 mysql데이터베이스 에 저장됩니다 .--all-databases

답변2

원격으로 실행 중이고 각 데이터베이스에 대해 별도의 덤프 파일을 원하는 경우 mysqldump백업할 데이터베이스 목록을 유지 관리해야 합니다. 데이터베이스 서버에서 로컬로 실행하는 경우 데이터 디렉터리 (예 : ) mysqldump에 있는 데이터베이스를 반복할 수 있습니다 . 원격으로 실행해야 하는 경우 SSH를 통해 연결하고 데이터베이스 목록을 검색한 다음 연결을 끊고 데이터베이스 이름으로 실행하는 스크립트를 작성할 수 있습니다.mysql/var/lib/mysqlmysqldumpmysqldump

--all-databases단일 데이터베이스 이름을 지정하지 않고는 이를 사용하지 않으며 해당 옵션을 추가로 사용할 것입니다 --add-drop-database. 여기에는 데이터베이스가 존재하지 않는 경우 데이터베이스를 생성하거나 존재하는 경우 데이터베이스를 삭제하고 다시 생성하기 위한 SQL 문이 덤프 파일에 포함됩니다. 에서 man 1 mysqldump:

--add-drop-database
  Add a DROP DATABASE statement before each CREATE DATABASE statement.      
  This option is typically used in conjunction with the --all-databases 
  or --databases option because no CREATE DATABASE statements are written
  unless one of those options is specified.

이는 데이터베이스 서버에서 로컬로 실행되도록 설계된 빠르고 더러운 스크립트로, 변수에 지정된 데이터베이스를 백업하여 $DB각 데이터베이스에 대한 덤프 파일을 생성합니다. 또한 15일이 지난 이전 덤프 파일도 삭제합니다.

#!/bin/sh

PATH=/bin:/usr/bin
DATE="`date +%Y%m%d`"
DB="mysql drupal drupaldev"
DUMP_DIR="/u01/mysql_dump"

for db in `echo $DB`
 do
  mysqldump -u root --password=password --databases --add-drop-database $db > $DUMP_DIR/$db.$DATE.dmp
  gzip -9 $DUMP_DIR/$db.$DATE.dmp
  find $DUMP_DIR/* -mtime +14 -exec rm -f '{}' \;
done

관련 정보