myhome_bakcup 셀스크립트
#!/bin/bash
T=$(echo `date +%Y%m%d%H%M`)
MY=$(echo /home/nalabi/backup)
echo "nalabi 의 데이타가 백업 되었습니다. $T"
mysqldump myhome > $MY/myhome$T.sql
gzip $MY/myhome$T.sql
|
/etc/crontab 사용하기
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
|
형식 :
a b c d e id runparts directory
분(0~59) 시(0~24) 날짜(0~31) 달(0~12) 요일(0~7) id(크론이 사용할 계정) directory(실행하게될 파일 놓이게 될 경로)
예제 :
15 14 1 * * root /home/nalabi/backup/myhome_backup
매달 1일 오후 2시 15에 myhome_backup을 실행한다.
0 22 * * 1-5 root /home/nalabi/backup/myhome_backup
월요일 부터 금요일까지 매일 오후 8시에 myhome_backup을 실행한다.
23 0-23/2 * * * root /home/nalabi/backup/myhome_backup
매일 0, 2, 4, ....시 23분에 실행한다.
mysql 중지한다.
/etc/init.d/mysql stop
데몬을 아무나 들어갈수 있게 다시 실행한다.
safe_mysqld --skip-grant &
|
루트 패스워드를 변경한다.
mysql> update user set password='' where user='root';
|
mysql 을 재시동 합니다.
/etc/init.d/mysql stop
/etc/init.d/mysql start
|
수치 데이터 타입
* INTEGER (INT)
* SMALLINT
* NUMBER
* DECIMAL(DEC) (x,y) : x는 실수자리, y는 소수점 이하자리
* FLOAT
|
문자 데이터 타입
* VARCHAR (n) : 8비트 문자 길이가 최대 n개인 문자열
*CHARACTER(CHAR) (n) : n개의 8비트 문자열
* LONG
|
그외의데이터 타입
* DATE/TIME : 날짜/시간
* LONG RAW
|
mysqlshow
+-----------+
|Databases |
+-----------+
| board |
| kedu |
| mysql |
| test |
+-----------+
|
mysql test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with-A
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 7 to server version: 3.22.23b
Type 'help' for help.
mysql>
|
mysqldump 를 이용해서 sql 데이타를 백업 받을수 있으며 DB이름만 지정하면 전체 테이블이, 테이블 이름 까지 지정하면 해당 테이블만 백업을 할수 있다.
mysqldump DB이름 (table이름) > 화일이름
mysqldump test test > test.sql
# MySQL dump 6.0
#
# Host: localhost Database: test
#--------------------------------------------------------
# Server version 3.22.23b
#
# Table structure for table 'test'
#
CREATE TABLE test (
no int(11),
name char(10),
tel char(15),
addr char(20),
sex char(1),
birth date
);
#
# Dumping data for table 'test'
#
INSERT INTO test VALUES (2,'이주상','02-504-xxxx','과천시','m','1971-02-02');
INSERT INTO test VALUES (3,'임정남','02-420-xxxx','송파구','f','1971-03-03');
INSERT INTO test VALUES (4,'강행모','02-856-xxxx','관악구','f','1971-04-04');
INSERT INTO test VALUES (5,'이현영','0342-718-xxxx','분당구','m','1971-05-05');
INSERT INTO test VALUES (6,'이병환','02-891-xxxx','하안동','m','1980-06-06');
INSERT INTO test VALUES (1,'남상욱','333-4444','동작구','m','1971-01-01');
|
mysql test < test.sql
참고로 데이타 확인은 mysql -e "select * from test" test
+------+--------+---------------+--------+------+------------+
| no | name | tel | addr | sex | birth |
+------+--------+---------------+--------+------+------------+
| 2 |이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 |
| 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 |
| 4 | 강행모 | 02-856-xxxx | 관악구 | f | 1971-04-04 |
| 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 |
| 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 |
| 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 |
+------+--------+---------------+--------+------+------------+
|
aaaa라는 사용자(user)를 만듭니다.
mysql mysql(mysql db로 들어갑니다.)
mysql>insert into user values ('localhost','aaaa','','y','y','y','y','y','y','y','y','y','y','y','y','y','y');
Query OK, 1 row affected (0.04 sec)
|
reload 를 꼭 실행시킵니다.(쉘에서)
mysqladmin reload
aaaa라는 사용자에게 aaaa라는 비밀번호를 부여합니다.
mysqladmin -u aaaa password aaaa
mysqladmin reload
데이타 베이스 만들기
사용자가 없을 경우 : mysqladmin create aaaa
사용자와 비밀번호가 있는 경우 : mysqladmin -u aaaa -p create aaaa (or) mysqladmin -u aaaa -paaaa create aaaa
서버의 데이타 베이스 끌어오기
서버 상의 데이타 베이스를 나의 컴의 프로그램으로 가져 올때 사용합니다.
서버의 mysql mysql 을 실행 합니다.
INSERT INTO db VALUES ('나의 컴 아이피','DB이름','사용자','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO user VALUES ('나의 컴 아이피 '사용자 ','비밀번호 ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
그리고, 위의 퀘리문을 편집해서 실행 합니다.
그려면 나의 컴에 DB가 없어도 서버의 DB를 가져와서 사용을 할수가 있습니다.
사용법 : create table 테이블이름(변수명 변수값, ......);
mysql> create table test (no int, name char(10), age int, tel char(15));
Query OK, 0 rows affected (0.00 sec)
|
사용법 : show tables;
mysql> show tables;
+-----------------+
| Tables in test |
+-----------------+
| test |
+-----------------+
2 rows in set (0.00 sec)
mysql> show tables like 'ad_%';
+-------------------------+
| Tables_in_dbkedu (ad_%) |
+-------------------------+
| ad_expose |
| ad_img |
| ad_redirect |
| address |
+-------------------------+
4 rows in set (0.00 sec)
|
mysql > insert into test values(1,'김용일','29','02-825-xxxx');
Query OK, 1 row affected (0.00 sec)
|
mysql> insert into test (no,name) values ('7','남상욱');
Query OK,1 row affected (0.00 sec)
|
select 문을 이용한다.
mysql> select * from test;
+------+--------+------+---------------+
| no | name | age | tel |
+------+--------+------+---------------+
| 1 | 김용일 | 29 | 02-825-xxxx |
| 2 | 이주상 | 29 | 02-504-xxxx |
| 3 | 임정남 | 29 | 02-420-xxxx |
| 4 | 강행모| 29 | 02-856-xxxx |
| 5 | 이현영 | 29 | 0342-718-xxxx |
| 6 |이병환 | 12 |02-891-xxxx |
| 7 | 남상욱 | NULL | NULL |
+------+--------+------+---------------+
7 rows in set (0.00 sec)
|
alter 문을 이용한다.
mysql> alter table test add addr char(20);
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> desc test;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| no |int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| tel | char(15) | YES | | NULL | |
| addr | char(20) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)
|
alter 문을 이용한다.
mysql> alter table test drop age;
Query OK, 6 rows affected (0.01 sec)
Records: 6 Duplicates: 0 Warnings: 0
|
alter 문을 이용한다.
ALTER TABLE에는 다음 세가지 형식이 있습니다.
ALTER TABLE table_name ADD ( ... ) ;
ALTER TABLE table_name MODIFY( ... ) ;
ALTER TABLE table_name DROP PRIMARYKEY ;
ALTER TABLE t1 RENAME t2;
테이블 이름을 t1에서 t2로 바꿈
ALTER TABLE t2 CHANGE a a TINYINT NOT NULL, CHANGE b c CHAR(20);
테이블 내의 컬럼 속성을 바꿈
원래 컬럼 a는 INTEGER였는데 TINYINT로,
컬럼b는 CHAR(10)이었는데 컬럼이름은 c로 이타 타입은 CHAR(20)으로 수정
ALTER TABLE t2 ADD d TIMESTAMP;
테이블 t2에 d라는이름으로 TIMESTAMP 형으로 추가
ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
새로운 인텍스를 생성 컬럼 a에 primary key 생성.
ALTER TABLE test MODIFY (age NUMBER NULL );
NOT NULL을 NULL로 바꾸기
ALTER TABLE test MODIFY (age NUMBER NOT NULL );
NULL을 NOT NULL로 바꾸기
ALTER TABLEtest MODIFY (name VARCHAR2( 20 ) );
열의 폭 늘이기
ALTER TABLE test MODIFY (name VARCHAR2( 15 ) );
열의 폭 줄이기
ALTER TABLE t2 DROP COLUMN c;
컬럼 c를 없애버리고
ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);
t2 테이블에 c라는 컬럼을 새로 생성시키는데
INT (INTEGER) : 정수
UNSIGNED : 양수
NOT NULL : 아무데이타가 없으면 '0'
AUTO_INCREMENT : 데이타가 자동적으로 입력됨...
ADD INDEX (c) : 컬럼 c에 대해서 인텍스 생성
delete 를 이용한다.
mysql>delete from test where name='김용일';
Query OK, 1 row affected(0.00 sec)
|
update를 이용한다.
mysql> update test set no=1,tel='333-4444' where name='남상욱';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
|
mysql> update test set addr='동작구' where no='1';
|
order문을 이용
mysql> select * from test order by no desc;
+------+--------+------+---------------+--------+
| no | name | age | tel | addr |
+------+--------+------+---------------+--------+
| 6 | 이병환 |12 | 02-891-xxxx | NULL |
| 5 | 이현영 | 29 | 0342-718-xxxx | NULL |
| 4 | 강행모 | 29 | 02-856-xxxx | NULL |
| 3 | 임정남 | 29 | 02-420-xxxx | NULL |
| 2| 이주상 | 29 | 02-504-xxxx | NULL |
| 1 | 남상욱 | NULL | 333-4444 | 동작구 |
+------+--------+------+---------------+--------+
6 rows in set (0.01 sec)
|
rand문을 이용
mysql> select * from test order by rand();
+------+--------+---------------+--------+------+------------+
| no | name | tel | addr | sex | birth |
+------+--------+---------------+--------+------+------------+
| 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 |
| 4 | 강행모 | 02-856-xxxx | 관악구 | f | 1971-04-04 |
| 2 | 이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 |
| 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 |
| 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 |
| 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 |
+------+--------+---------------+--------+------+------------+
6 rows in set (0.01 sec)
|
year문 이용
mysql> select * from test order by year(birth) desc;
+------+--------+---------------+--------+------+------------+
| no | name | tel | addr | sex | birth |
+------+--------+---------------+--------+------+------------+
| 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 |
| 2 | 이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 |
| 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 |
| 4 | 강행모 | 02-856-xxxx | 관악구 | f | 1971-04-04 |
| 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 |
| 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 |
+------+--------+---------------+--------+------+------------+
6 rows in set (0.00 sec)
|
year 문 이용
mysql> select * from test order by year(birth) desc, no desc;
+------+--------+---------------+--------+------+------------+
| no | name | tel | addr | sex | birth |
+------+--------+---------------+--------+------+------------+
| 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 |
| 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 |
| 4 | 강행모 | 02-856-xxxx | 관악구 | f | 1971-04-04|
| 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 |
| 2 | 이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 |
| 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 |
+------+--------+---------------+--------+------+------------+
|
where 절 이용
mysql> select count(*) from test where age >=20;
+----------+
| count(*) |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)
|
null 문 이용
mysql> select * from test where addr is not null;
+------+--------+------+----------+--------+
| no | name | age | tel | addr |
+------+--------+------+----------+--------+
| 1 | 남상욱 | NULL | 333-4444 | 동작구 |
+------+--------+------+----------+--------+
1 row in set (0.00 sec)
|
null 문 이용
mysql> select * from test whereaddr is null;
+------+--------+------+---------------+------+
| no | name | age | tel | addr |
+------+--------+------+---------------+------+
| 2 | 이주상 | 29 | 02-504-xxxx | NULL |
| 3 | 임정남 | 29| 02-420-xxxx | NULL |
| 4 | 강행모 | 29 | 02-856-xxxx | NULL |
| 5 | 이현영 | 29 | 0342-718-xxxx | NULL |
| 6 | 이병환 | 12| 02-891-xxxx | NULL |
+------+--------+------+---------------+------+
5 rows in set (0.01 sec)
|
like 이용
mysql> select * from test where name like '%이%';
+------+--------+------+---------------+------+
| no | name | age | tel | addr |
+------+--------+------+---------------+------+
| 2 | 이주상 | 29 | 02-504-xxxx | NULL |
| 5 | 이현영 | 29 | 0342-718-xxxx | NULL |
| 6 | 이병환 | 12 | 02-891-xxxx | NULL |
+------+--------+------+---------------+------+
3 rows in set (0.00 sec)
|
등호, 부등호 를 이용해서 검색
mysql> select * from test where age>=10 and age <=20;
+------+--------+------+-------------+------+
| no | name | age | tel | addr |
+------+--------+------+-------------+------+
| 6 | 이병환 | 12 | 02-891-xxxx | NULL |
+------+--------+------+-------------+------+
1 row in set (0.00 sec)
|
in 문을 이용해서 검색
mysql> select * from test where addr in('동작구','관악구');
+------+--------+------+-------------+--------+
| no | name | age | tel | addr |
+------+--------+------+-------------+--------+
| 4 | 강행모 | 29 | 02-856-xxxx | 관악구 |
| 1 | 남상욱 | NULL | 333-4444 | 동작구 |
+------+--------+------+-------------+--------+
2 rows in set (0.00 sec)
|
not in문을 이용해서 검색
mysql> select * from test where addr not in('동작구','관악구');
+------+--------+------+---------------+--------+
| no | name | age | tel | addr |
+------+--------+------+---------------+--------+
| 2 | 이주상 | 29 |02-504-xxxx | 과천시 |
| 3 | 임정남 | 29 | 02-420-xxxx | 송파구 |
| 5 | 이현영 | 29 | 0342-718-xxxx | 분당구 |
| 6 | 이병환 | 12 | 02-891-xxxx | 하안동 |
+------+--------+------+---------------+--------+
4 rows in set (0.00 sec)
|
치환 검색
mysql> select * from cls_class as a, cls_member as b where b.g_code = 'h0001_3_2' and b.g_code=a.g_code; |
where 절 이용
mysql> SELECT COUNT(no) FROM brd_free WHERE date = '2000-02-17';
+-----------+
| COUNT(no) |
+-----------+
| 1 |
+-----------+
1 row in set (0.03 sec)
|
꼭 경로를 지정해야함
mysql> select * from test into outfile '/root/test.txt';
|
결과
2 이주상 02-504-xxxx 과천시 m 1971-02-02
3 임정남 02-420-xxxx 송파구 f 1971-03-03
4 강행모 02-856-xxxx 관악구 f 1971-04-04
5 이현영 0342-718-xxxx 분당구 m 1971-05-05
6 이병환 02-891-xxxx 하안동 m 1980-06-06
1 남상욱 333-4444 동작구 m 1971-01-01
|
terminated 문을 쓴다.
mysql> select * from test into outfile '/root/test.txt' fields terminated by '|';
|
결과
2|이주상|02-504-xxxx|과천시|m|1971-02-02
3|임정남|02-420-xxxx|송파구|f|1971-03-03
4|강행모|02-856-xxxx|관악구|f|1971-04-04
5|이현영|0342-718-xxxx|분당구|m|1971-05-05
6|이병환|02-891-xxxx|하안동|m|1980-06-06
1|남상욱|333-4444|동작구|m|1971-01-01
|
load 명령어를 쓴다.
mysql> load data infile '/root/test.txt' replace into table test fields terminated by '|';
Query OK, 6 rows affected (0.02 sec)
Records: 6 Deleted: 0 Skipped: 0 Warnings: 0
|
결과
mysql> select * from test;
+------+--------+---------------+--------+------+------------+
| no | name | tel | addr | sex | birth |
+------+--------+---------------+--------+------+------------+
| 2 |이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 |
| 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 |
| 4 | 강행모 | 02-856-xxxx | 관악구| f | 1971-04-04 |
| 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 |
| 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 |
| 1 |남상욱 | 333-4444 | 동작구 | m | 1971-01-01 |
+------+--------+---------------+--------+------+------------+
|
* SUM (Column_name) : 특정 컬럼에서 조건에 만족하는 모든열의 값을 다더함
* AVG (Column_name) : 평균값 추출
* MAX (Column_name) : 최대값추출
* MIN (Column_name) : 최소값 추출
* COUNT (Column_name): 열의수를 추출
sum 문 사용하기
mysql> select sum(age) from test;
+----------+
| sum(age) |
+----------+
| 128 |
+----------+
1 row in set (0.00 sec)
|
/기 사용하기
mysql> select no, age, (no+age), (no+age)/2 from test;
+------+------+----------+------------+
| no | age | (no+age) | (no+age)/2 |
+------+------+----------+------------+
| 2 | 29 | 31 | 15.50 |
| 3 | 29 | 32 | 16.00|
| 4 | 29 | 33 | 16.50 |
|5 | 29 | 34 | 17.00 |
| 6 | 12 | 18 | 9.00 |
| 1 | NULL | NULL | NULL |
+------+------+----------+------------+
6 rows in set (0.00 sec)
|
yser 문 사용하기
mysql> select *, year(curdate())-year(birth)+1 as age from test;
+------+--------+---------------+--------+------+------------+------+
| no | name | tel | addr | sex | birth | age |
+------+--------+---------------+--------+------+------------+------+
| 2 | 이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 |29 |
| 3 | 임정남 | 02-420-xxxx | 송파구 |f | 1971-03-03 | 29 |
| 4 | 강행모 | 02-856-xxxx | 관악구 | f | 1971-04-04 | 29 |
| 5 |이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 | 29 |
| 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 | 20 |
| 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 | 29 |
+------+--------+---------------+--------+------+------------+------+
6 rows in set (0.01 sec)
|
unix_timestamp문을 사용한다.
mysql> select unix_timestamp(curdate());
+---------------------------+
| unix_timestamp(curdate()) |
+---------------------------+
| 934210800 |
+---------------------------+
1 row in set (0.05 sec)
|
A라는 서버에 DB가 있고, 210.180.56.204에서 프로그램을 돌릴때
A라는 서에있는 mysql mysql 에 다음과 같이 입력을 합니다.
INSERT INTO db VALUES ('210.180.56.204','dbname','user','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO host VALUES ('210.180.56.204','dbname','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO user VALUES ('210.180.56.204','user','passwd','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
210.180.56.204 의 컴에서 프로그램을 할때 다음과 같이 설정을 해주면 원격 DB 를 사용할수 있습니다.
$db_server ="servername"; // DB 서버 주소
$db_user = "root"; // DB 사용자
$db_name = ""; // DB 이름
$db_pass = ""; // DB 암호