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 암호