◘ MySQL 백업과 복구
▮ mysqldump
mysqldump [옵션] db_name [table_name] > backup_filename
mysqldump [옵션] --databases [옵션] db_name1, db_name2, .... > backup_filename
mysqldump [옵션] --all-databases [옵션] > backup_filename
[옵션]
-A, --all-databases : 모든 DB를 덤프
--add-locks : 덤프 전에 lock 덤프 후에 unlock
--add-drop-table : 덤프 이후에 출력물의 앞에 drop table 명령 추가 (복구 위해)
-B, --databases : 여러 DB를 동시에 덤프할 때 사용
-f, --force : 에러를 무시
-h, --host : 지정한 호스트의 데이터를 덤프
-t : data만 덤프
-d : 데이터를 제외하고 스키마만 덤프
-p : 사용자의 암호를 지정
-P : 포트번호 지정
-u : 사용자명 지정
▮ Data만을 백업
: LOAD DATA INFILE에서 사용한 파일의 경우 Data만 포함하는 것처럼 select 명령을 이용해서 Data만 포함된 형식으로 백업
[문법]
- SELECT column_name, output_type
INTO OUTFILE '경로 및 파일명‘
[FIELDS TERMINATED BY '종단문자‘]
FROM table_name
WHERE 조건구문 ;
ex) student table의 내용을 각 컬럼을 | 로 구분해서 성이 마씨인 학생만 ‘/root/student.dat'로 저장
mysql> select *
-> into outfile '/root/student.dat'
-> fields terminated by '|'
-> from student
-> where sname like '마%';
Query OK, 3 rows affected (0.00 sec)
[root@linux /root]# cat student.dat
012312|마량|남|3|물리|3.50
013213|마초|남|2|화학|2.42
013111|마대|남|1|생물|1.23
※ [= 외부 명령어]
# mysql -p -e "select * from school.student where sname like '마%';"
▮ 복구
: 백업된 내용의 복구는 mysql 명령어나 mysqladmin 명령어를 사용함
ex) root의 password가 12345인 상태에서 database1을 백업한 data.db라는 백업파일을 복구
$ mysqladmin -u root -p12345 drop database1 // database1 삭제
$ mysqladmin -u root -p12345 create database1 // database1 생성
$ mysql -u root -p12345 database1 < data.db // data.db파일로 database1 복구
======================================================================================
백업파일을 생성할 위치로 이동한다.
MySQL 백업
mysqldump -u사용자명 -p패스워드 DB명 > 생성할 파일
예)
/usr/local/mysql/bin/mysqldump -uroot -p패스워드 system > backup.sql
가끔 한글이 깨져서 나올 때가 있다.
이럴 때는 character set 을 지정하여 백업파일을 만들면 된다.
예)
/usr/local/mysql/bin/mysqldump -uroot -p패스워드 system --default-character-set latin1 > backup.sql;
그럼 DB의 character set 은 어떻게 알까?
MySQL에 접속하신 다음 status 치면 된다.
...
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
...
복구할때는
예)
mysqladmin -u root -p패스워드 create database명
mysql -u root -p패스워드 database명 < backup.sql
database 명을 지정하지 않고 전체를 다할 경우,,
-- 전체 백업
/usr/local/mysql/bin/mysqldump -u아이디 -p패스워드 --all-database > backup.sql
-- 전체 복원
/usr/local/mysql/bin/mysql -u아이디 -p패스워드 < backup.sql
==================================================================================
MySQL DUMP 백업 및 복원
백업/복구 모두 cmd모드에서 할것.
====백업====
1.cmd접속
-권한이 있는 계정으로 dump할것 .(보통 root계정)
2.명령어
-p[비밀번호]는 한칸 띄우지 말고 붙여서 할것.
3.저장위치를 파일명 앞에 적지않으면 현재 위치해 있는 폴더에 백업한다.
====복구====
1. Mysql 5.0 계정생성, 디비생성 참조.
-계정 및 계정에 권한을 주고 db까지 셋팅.
2.cmd접속
-권한이 있는 계정으로 dump할것 .(보통 root계정)
2.명령어(밑에)
-u[아이디] -p[비밀번호]는 한칸 띄우지 말고 붙여서 할것.
명령어
== 백업 ==
DB전체 덤프
mysqldump -u[아이디] -p[비밀번호] --all-databases > [저장될 파일명]
DB만 덤프
mysqldump -u[아이디] -p[비밀번호] [디비명] > [저장될 파일명]
테이블 구조만
mysqldump -u[아이디] -p[비밀번호] --no-data [디비명] [테이블명] > [저장될 파일명]
테이블구조를 제외한 데이터만 덤프
mysqldump -u[아이디] -p[비밀번호] --no-create [디비명] [테이블명] > [저장될 파일명]
==복구 ==
덤프파일을 이용한 복구
mysql -u[아이디] -p[암호][디비명] < [파일명]
패스워드 동시 입력시 복구 안되면
mysql -u[아이디] -p[공백][디비명] < [파일명]