2010. 3. 24. 12:55ㆍ99. 정리전 - IT/15. SQL 따라잡기
테이블 스키마 백업
/mysql/bin/mysqldump -d --compact --default-character-set=utf8 --extended-insert=FALSE --add-drop-table -uTiger -p'scott' database_name -B -e | egrep -v "(^SET|^/\*\!)" > schema.txt
<TIP>
백업시 한글 코멘트가 깨져 있어도 저장된 인코딩방식과 동일한 방식으로 케릭터셋 옵션을 주었다면 복원시 한글이 깨지지 않는다
+------------+
| 각종 옵션들
+------------+
1. DB명으로 덤프 받기
# /usr/local/mysql/bin/mysqldump –u 계정 –p db명 > 덤프파일명.sql
2. 특정 테이블만 덤프 받기
# /usr/local/mysql/bin/mysqldump -u root -p db명 table명 > db명.table명.sql
3. 스키마 정보만 덤프 받기
// DB명 안에 모든 schema
# /usr/local/mysql/mysqldump -u root -p -d db명 > db명_schema.sql
// DB명 안에 모든 특정 table schema
# /usr/local/mysql/mysqldump -u root -p -d db명 table명 > db명_table명_schema.sql
4. 덤프 파일로 복원
# /usr/local/mysql/bin/mysql -u root -p DB명 < 덤프파일.sql
5. mysqldump 명령의 기본 사용법
mysqldump [옵션] db명 [table명] > 백업파일
mysqldump [옵션] –databases [옵션] db명1, db명2, …. > 백업파일
mysqldump [옵션] –all-databases [옵션] > 백업파일
6. mysqldump 옵션
-f, –force : 에러를 무시
-h, –host : 지정한 호스트의 데이터를 덤프
-t : data만 덤프
-d : 데이터를 제외하고 스키마만 덤프
-p : 사용자의 암호를 지정
-P : 포트번호 지정
-u : 사용자명 지정
-A |
모든 DB를 덤프 |
--add-locks |
덤프하기 전에 LOCK table을 이용하여 테이블을 잠그고 덤프후 |
--add-drop-table |
덤프 결과에서 create table 앞에 drop table 절을 추가 |
-B |
여러 DB를 동시에 덤프 할 때 사용 |
--quick |
C API의 mysql_use_result() 함수를 사용하므로 속도가 빠르 |
--extended-insert |
insert 문 하나에서 모든 레코드를 삽입하는 insert 문을 생성 |
--opt |
위에 나온 옵션을 동시에 사용한 것과 같은 결과를 가져옵니다 |
-d |
테이블의 스키마만 덤프 |
-t |
create table을 출력하지 않고 데이터만 덤프 |
--ignore-table=database.table |
특정테이블을 제외하고 백업 |
프로시져 스키마 백업
MySQL Procedure 포함 덤프
mysqldump -R -uroot -p test > test_20120730.sql
MySQL Procedure 만 덤프는 불가 (이하와 같이 하면 펑션,프로시저,트리거 모두 백업됨)
mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt -uroot -p test > test.sql
펑션 스키마 백업
트리거 스키마 뽑기
mysqldump --triggers --no-create-info --no-data --no-create-db --skip-opt -uroot -p test > test.sql
유저추가
or
mysql> GRANT ALL ON *.* TO 유저ID@"localhost"IDENTIFIED BY "패스워드";
mysql> FLUSH PRIVILEGES;
테이블 CREATE 문 뽑기
mysql> SHOW CREATE TABLE TB_LMS_MEMBER;
테이블의 컬럼명 보기(순수컬럼명만)
FROM information_schema.columns
WHERE table_name
IN (
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'DB명'
AND table_name = 'TABLE명'
ORDER BY table_name DESC
)
테이블의 컬럼명 보기(셋팅값포함)
mysql> SHOW COLUMNS FROM 表名
mysql> SHOW INDEXES FROM 表名
mysql> SHOW CREATE TABLE 表名
mysql> SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='表名'
컬럼명은 알고 있는데 어떤 테이블에 속하여있나?
SELECT *
FROM information_schema.columns
WHERE table_name
IN (
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'DB명'
ORDER BY table_name DESC )
AND column_name like '%찾고싶은컬럼명%'
csv의 데이터를 테이블에 넣다 뺐다 넣다 뺐다
넣기
mysql> LOAD DATA LOCAL INFILE 'master_data.csv' INTO TABLE master_data FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
빼기
mysql>
SELECT * FROM data INTO OUTFILE "master_data.csv" FIELDS TERMINATED BY ','OPTIONALLY ENCLOSED BY '"';
DROP TABLE IF EXISTS 테이블명
SELECT '
타이틀' as title;
DROP TABLE IF EXISTS 테이블x;
CREATE TABLE 테이블x SELECT * FROM 테이블x와 같은형식의 테이블명
또는
CREATE TABLE `DB명`.`TABLE명` (
`xxx_id` char( 5 ) NOT NULL COMMENT '沿線ID',
`xxx_name` varchar( 15 ) NOT NULL COMMENT '沿線名称\n',
`xxx_company_id` int( 11 ) default NULL COMMENT '鉄道会社ID',
) ENGINE = MYISAM DEFAULT CHARSET = utf8 COMMENT = '沿線・駅マスタ'";
DUMP BACKUP
백업하기
mysqldump -u [DB사용자] -p [패스워드] [백업할 데이터베이스 이름] > [파일이름]
복구하기
mysql -u [DB사용자] -p [패스워드] [복구할 데이터베이스 이름] < [파일이름]
테이블 이름 바꾸기
ALTER TABLE 변경전이름 RENAME TO 변경후이름;
Table 정보조회 (with comment)
-
명령어를 통한 테이블정보 조회
SHOW TABLE STATUS;
-
Query를 통한 테이블정보 조회
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='database_name';
SELECT TABLE_SCHEMA,TABLE_NAME,AUTO_INCREMENT,TABLE_COMMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='database_name';
COLUMN 정보조회 (with comment)
-
명령어를 통한 컬럼정보 조회
SHOW FULL COLUMNS FROM TABLE_NAME;
-
Query를 통한 테이블정보 조회
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='database_name';
SELECT TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,ORDINAL_POSITION,COLUMN_DEFAULT
,DATA_TYPE,COLUMN_TYPE,COLUMN_KEY,EXTRA,COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='database_name' AND TABLE_NAME='table_name';
TABLE COMMENT 설정
-
테이블 생성시 COMMENT 설정
CREATE TABLE TABLE_NAME (
column1 INT,
...
) COMMENT = 'table comment';
-
TABLE COMMENT 만 별도 수정하는 방법
ALTER TABLE TABLE_NAME COMMENT = '테이블설명';
COLUMNS COMMENT 설정
-
테이블 생성시 COLUMN COMMENT 설정
CREATE TABLE TABLE_NAME (
column1 INT COMMENT 'column1 comment',
...
);
-
TABLE COMMENT 만 별도 수정하는 방법
ALTER TABLE TABLE_NAME CHANGE COLUMN column_name column_name data_type NULL여부 COMMENT 'column comment';
ALTER TABLE `callcenter` CHANGE `regdate``regdate` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
COMMENT 'callcenter 등록일';
ALTER TABLE `테이블명` CHANGE `컬럼명`
`컬럼명` VARCHAR(14) DEFAULT NULL
COMMENT '학습시간(복습도 포함됨)';