MySQL | MySQL 데이터베이스 시스템 (4)-데이터베이스 백업 및 복구

MySQL | MySQL 데이터베이스 시스템 (4)-데이터베이스 백업 및 복구

머리말
일상 업무에서 데이터 백업은 실제로 정보 보안 관리의 중요한 작업 중 하나입니다. 따라서이 기사에서는 데이터베이스 백업 및 복구를 소개합니다. MySQL 데이터베이스를 동시에 백업하는 방법에는 여러 가지가 있습니다. 첫째 : 데이터베이스 폴더 / etc / local / mysql / data를 직접 패키징하거나 백업 도구를 사용할 수 있습니다.

1. 백업 데이터베이스
는 mysqldump 명령을 통해 지정된 라이브러리, 지정된 테이블 또는 전체 라이브러리를 SQL 스크립트로 내보낼 수 있습니다. MySQL 서버를 업그레이드해야하는 경우 원본 라이브러리 정보를 내 보낸 다음 업그레이드 된 MySQL 서버로 직접 가져올 수 있습니다.


mysqldump export data 명령을 사용할 때 내보내기를 수행하면 기본값이 터미널에 직접 표시됩니다. 파일에 저장하려면 출력 작업을 결합> 리디렉션해야합니다.

기본 구문 형식
1) 지정된 라이브러리에서 테이블의 일부를 내 보냅니다.

mysqldump [옵션] 라이브러리 이름 [테이블 이름 1] [테이블 이름 2] ···> / backup 경로 / 백업 파일 이름
2) 모든 테이블을 포함하여 하나 이상의 완전한 라이브러리를 내 보냅니다.

mysqldump [옵션] --databases 라이브러리 이름 1 [라이브러리 이름 2] ···> / backup 경로 / 백업 파일 이름
3) MySQL 서버의 모든 데이터베이스 백업

mysqldump [옵션] --all-databases> / backup 경로 / 백업 파일 이름
일반적으로 사용되는 옵션에는 데이터베이스 사용자 이름과 암호를 지정하는 데 사용되는 -u, -p가 있습니다.

위의 기본 구문 형식 1은 MySQL 라이브러리의 사용자 테이블을 mysql-user.sql 파일로 내보내는 데 사용되고 기본 구문 형식 2는 전체 auth 라이브러리를 auth.sql 파일로 내보내는 데 사용됩니다. 두 가지 기본 구문 형식의 작업 둘 다 루트 사용자 인증이 필요합니다.


[root@localhost ~]# mysqldump -u root -p mysql user > mysql-user.sql
Enter password: 
[root@localhost ~]# mysqldump -u root -p --databases auth > auth.sql
Enter password: 

전체 MySQL 서버의 모든 라이브러리를 백업하려면 위의 기본 구문 형식 3을 사용할 수 있습니다. 내 보낸 데이터의 양이 많은 경우 --opt 옵션을 추가하여 실행 속도를 최적화 할 수 있습니다.

백업 파일 all-data.sql이 생성되고 MySQL 서버의 모든 라이브러리가 포함됩니다.


[root@localhost ~]# mysqldump -u root -p --opt --all-databases > all-data.sql
Enter password: 

백업 파일의 내용보기
mysqldump 도구로 내 보낸 SQL 스크립트는 텍스트 파일이고 / ··· / 또는-시작 부분은 주석 정보를 나타냅니다.

자세한 스크립트 내용을 보려면 grep, less, cat 및 기타 도구를 사용하십시오.

auth.sql 스크립트의 데이터베이스 작업 문이 필터링됩니다.


[root@localhost ~]# grep -v "^--" auth.sql | grep -v "^/" | grep -v "^$"
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `auth` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `auth`;
DROP TABLE IF EXISTS `servers`;
CREATE TABLE `servers` (
  `Server_name` char(64) NOT NULL,
  `Host` char(64) NOT NULL,
  `Db` char(64) NOT NULL,
  `Username` char(64) NOT NULL,
  `Password` char(64) NOT NULL,
  `Port` int(4) DEFAULT NULL,
  `Socket` char(64) DEFAULT NULL,
  `Wrapper` char(64) NOT NULL,
  `Owner` char(64) NOT NULL,
  PRIMARY KEY (`Server_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';
LOCK TABLES `servers` WRITE;
UNLOCK TABLES;
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `user_name` char(16) NOT NULL,
  `user_passwd` char(48) DEFAULT '',
  PRIMARY KEY (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOCK TABLES `users` WRITE;
INSERT INTO `users` VALUES ('jacktian','*B2B366CA5C4697F31D4C55D61F0B17E70E5664EC');
UNLOCK TABLES;

2. 데이터베이스를 복구 할 때
mysql 명령을 통해 가져올 수 있습니다.

기본 구문


mysql [选项] [库名] [表名] < /备份路径/备份文件名

백업 파일에 테이블의 백업 만 포함되고 라이브러리 명령문이 포함되지 않은 경우 가져올 때 라이브러리 이름을 지정해야하며 대상 라이브러리가 있어야합니다.

mysql-user.sql 백업 파일에서 테스트 라이브러리로 테이블을 가져올 수 있습니다.


[root@localhost ~]# mysql -u root -p test < mysql-user.sql
Enter password: 
[root@localhost ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.5.22-log Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use test;                                   ## 验证导入结果
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

mysql> 

전체 라이브러리 정보가 이미 백업 파일에 포함되어있는 경우 가져 오기 작업을 수행 할 때 라이브러리 이름을 지정할 필요가 없으며 백업 파일 auth.sql에서 인증 라이브러리를 복원 할 수 있습니다.


[root@localhost ~]# cd /usr/local/mysql/data/
[root@localhost data]# ls
auth     ib_logfile0  localhost.err  mongodb  mysql-bin.000001  mysql-bin.000003  mysql-bin.index  performance_schema
ibdata1  ib_logfile1  localhost.pid  mysql    mysql-bin.000002  mysql-bin.000004  mysql.error.log  test
[root@localhost data]# mv auth /tmp/                           ## 移动 auth 库,进行模拟故障操作。
[root@localhost data]# ls -ld auth
ls: 无法访问auth: 没有那个文件或目录
[root@localhost data]# mysql -u root -p < ~/auth.sql           ## 执行导入恢复操作。
Enter password: 
ERROR 1050 (42S01) at line 63: Table '`auth`.`users`' already exists
[root@localhost data]# ls -ld auth                             ## 确认恢复后的结果。
drwx------. 2 mysql mysql 4096 8月   1 05:17 auth
[root@localhost data]# 

추천

출처blog.51cto.com/15067236/2606202