Replication DB 여러개 사용하는 방법은 간단하다.

Replication이 이미 설정이 완료되어 정상적으로 돌아간다는 전제로 설명할 예정이다. 


혹시 설정이 궁금하시다면 아래 설정 설명이 되어 있는 곳을 참조하면 된다.

링크 주소 : http://foxlime.tistory.com/70

 

1. my.cnf 파일 수정 (/etc/my.cnf)

 replicate-do-db=[DB Name]   << 추가 해 놓은 이 부분을 늘려주면 된다.

 

replicate-do-db= no1_data

replicate-do-db= no2_data

replicate-do-db= no3_data

 

저장하면 설정은 끝난다.

 

2. 데이터베이스 준비

우선 mysql 명령어로 접속하여 stop slave;를 해준 뒤

" no1_data, no2_data, no3_data" DB에 dump file을 밀어 넣어준다. 

 

 3. MySQL 재시작 그리고 slave 재시작

#> service mysqld restart

#> mysql -u[계정] -p

>start slave;

 

여러개의 DB를 replication하는 이유는 DB간의 서로 연결이 되어 있는 Query를 사용한다면 Query문제로 에러를 보게 된다. 이러한 에러를 해결하기 위해 필수적으로 Query문에서 Join을 사용한다면 꼭 필수적으로 여러개의 DB는 Replication되어야 한다.

'Databases > MYSQL' 카테고리의 다른 글

mysql - start / stop / restart  (0) 2013.01.03
mysql - 인덱스 정보 정리  (2) 2012.10.05
mysql - BinLog 파일 Text 변환  (0) 2012.02.27
mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23

 MySQL  config flie - my.cnf

 /etc/my.cnf

 

[mysqld]

...............

slave-skip-errors=1062

..............

 

MySQL - start / stop /restart

 /etc/init.d/mysqld

 

# service mysqld start

# service mysqld stop

# service mysqld restart

 

인덱스를 사용해야 하는 경우는?

   - 데이터 양이 많고 검색이 변경보다 빈번한 경우

   - 필드의 값이 다양한 값을 가지는 경우

 

▷ 기존 테이블에 인덱스 추가

ALTER  TABLE  [테이블명]  ADD  INDEX(필드명(크기));

 

▷ 테이블 생성시 인덱스 추가하기
CREATE TABLE 테이블 명 ( 필드명 데이터타입(데이터크기),
INDEX(필드명(크기)) ENGINE MyISAM;

 

▷ FULLTEXT 인덱스 만들기

ALTER TABLE 테이블명 ADD FULLTEXT(필드명);


일반적인 인덱스와는 달리 MySQL의 FULLTEXT는 매우 빠르게 모든 텍스트 열을 검색한다. 검색 엔진과 유사한 방법으로 자연 언어를 이용해 검색할 수 있는 특별한 인덱스로 모든 데이터 문자열의 단어를 저장하기 때문이다.


참고사항
FULLTEXT 인덱스는 MySQL의 기본 저장 엔진 타입인 MyISAM 테이블에만 사용된다.
만약 테이블을 MyISAM 으로 변경해야 된다면
ALTER TABLE 테이블명 ENGINE = MyISAM;
FULLTEXT 인데스는 CHAR 와 VARCHAR, TEXT 열로만 생성 가능하다.

 

▷ 인덱스 정보 보기

SHOW  INDEX  FROM  [테이블명];

 

▷ 인덱스 삭제

ALTER  TABLE  [테이블명]  DROP  INDEX  [인덱스명];

 

 

* 이해를 돕기 위한 링크

http://www.sqler.com/392661


MySQL 로그 파일을 남기려면 다음과 같이 하면 된다.

# vi  /etc/my.cnf

log-bin=mysql-bin             # 한줄 추가하면 BinLog파일이 기록된다.


위의 내용을 저장하고 빠져 나온다음엔 MySQL을 재시작 해주어야 한다.

#service  mysqld restart

=======================================================================
BinLog 파일을 vi editer로 보면 깨지는 부분도 있어 보기 힘들다...ㅡㅡ;;

1. 먼저 BinLog파일을 텍스트로 변환한다.

#mysqlbinlog  [log 파일명]  >>  [파일명].sql


2. 파일이 너무 거대한 경우엔 사이즈에 맞게 나누는 명령어도 있다.

#split  -b  100000  [파일명].sql  [생성될 파일 경로]
=======================================================================

'Databases > MYSQL' 카테고리의 다른 글

mysql - start / stop / restart  (0) 2013.01.03
mysql - 인덱스 정보 정리  (2) 2012.10.05
mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20

1. 테스트에 사용된 소프트웨어 사양
   - CentOS 5.6
   - MySQL 5.0.xx

2. 사전 준비 및 주의 사항
   - master DB에 데이터가 존재하는 경우에는 Write(insert,update,delete 등) 동작을 하지 않는 상태에서 진행한다.

   2.1 계정생성 - Master DB
 # mysql -u root -p
Enter password: [암호 입력]

mysql> grant replication slave on *.* to
      -> 'user_name'@'user_host'  identified by 'user_password';

mysql> flush privileges;
 - 간단하게 설명하자면 replication slave 형태의 계정을 생성해주고 DB에 적용한다.

   2.2  기존 데이터 백업 - Master DB
mysql> flush tables with read lock;                #DB Write를 하지 않는다면 하지 않아도 된다.

#mysqldump -uroot -p [DB명] > xxxxxx.sql
# 백업(dump)를 했다면 Slave DB로 이동시켜 준다.

mysql> unlock tables;
 - Write 기능을 하지 못하도록 방어 후 dump한다라는 내용이다.

   2.3 데이터 적용 - Slave DB
#mysql -uroot -p < xxxxxx.sql 

* Master와 Slave DB가 모두 일치하다면 이제 cnf설정 단계로 넘어간다.
* Master와 Slave DB는 Replication이 다 끝날 때까지 Write(insert, update, delete)기능은 사용하지 않기를 바란다.


3. my.cnf 설정하기
   3.1  Master DB 설정
[mysqld]
log-bin=mysql-bin
server-id=1                                            #1~(2^32)-1 내의 숫자 중 아무거나 설정 가능.
binlog_do_db=  [Replication DB 명]          #여러 개의 DB인 경우 계속 추가하면 된다.

   3.2  Slave DB 설정
 [mysqld]
log-bin=mysql-bin
log-slave-update                                    #로그 업데이트

server-id=2                                            #1~(2^32)-1 내의 숫자 중 아무거나 설정 가능.
master-host = 127.0.0.1                            #마스터 서버의 IP
master-port = 3306                                  # 마스터 mysql 포트 번호
master-user = foxlime                              #마스터에서 만들어준 접속 계정명
master-password = xxxxxx                       #계정 비밀번호
master-connect-retry = 60
replicate-do-db = [Replication DB 명]       #master DB 설정에 입력해준 binlog_do_db 이름과 일치하게 입력
* Master와 Slave DB를 재시작 해준다. (재시작 명령 : service mysqld restart)


4. 정보 확인 및 정보 입력하기
   4.1  Master DB
mysql> show master status;
+------------------+----------+------------------------+------------------+
| File                     | Position   | Binlog_Do_DB               | Binlog_Ignore_DB |
+------------------+----------+------------------------+------------------+
| mysql-bin.000001  |       90     | TestData                       |                           |
+------------------+----------+------------------------+------------------+
1 row in set (0.00 sec)

File = MASTER_LOG_FILE
Position = MASTER_LOG_POS

   4.2  Slave DB
mysql> stop slave;

mysql> CHANGE MASTER TO
      -> MASTER_LOG_FILE= File 컬럼,
      -> MASTER_LOG_POS= Position 컬럼;

   4.3  최종 정보 확인
  - 정보를 확인은 필수이다. 잘 적용이 되었는지 이상없이 동작이 가능한지 여부를 알 수 있기 때문이다.
 * Master에서 명령
 mysql> show master status;

* Slave에서 명령
 mysql> show slave status\G;             # 보기 좋게 정리해서 나온다.

 mysql> start slave;
##################warning 또는 error만 없다면 정상 동작한다는 의미이다.

 mysql> show slave status\G;
      - 정보 확인 중에 [Slave_IO_State: Waiting for master to send event]를 제외한 문구는 오류이다.
        * 주의 : master에서 port또는 IP개방을 해주지 않는 경우가 종종 발생하므로 미리 확인이 필요하다.

 

'Databases > MYSQL' 카테고리의 다른 글

mysql - 인덱스 정보 정리  (2) 2012.10.05
mysql - BinLog 파일 Text 변환  (0) 2012.02.27
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20
mysql - Replication 정의  (0) 2012.01.16
1. my.cnf 설정할 때 참고할 수 있는 샘플 파일 위치

/usr/share/mysql 폴더에 mysql과 관련된 cnf 샘플 파일을 제공하고 있다.
샘플 파일들을 잘 활용하면 DB의 성능 향상에 도움이 된다.

* 리스트 첨부 *
-rw-r--r-- 1 root root   4925 2008-03-04 12:41 my-huge.cnf
-rw-r--r-- 1 root root  20923 2008-03-04 12:41 my-innodb-heavy-4G.cnf
-rw-r--r-- 1 root root   4901 2008-03-04 12:41 my-large.cnf
-rw-r--r-- 1 root root   4908 2008-03-04 12:41 my-medium.cnf
-rw-r--r-- 1 root root   2478 2008-03-04 12:41 my-small.cnf

 1-2. 최근 사용했던 내용 정리
   max_allowed_packet = 1000M      # 용량 큰 dump 파일을 밀어 넣을 때 오류가 생긴다면 이 수치를 높여주면 된다.
   log_bin=mysql-bin                      # mysql log 파일을 남길 때 사용한다. (/var/lib/mysql/파일명.0000001 생성됨)
   max_binlog_size=100M               # mysql log 파일 한개당 용량이며 용량이 다 되면 새로운 파일을 생성한다.
   expire_logs_days=7                    # mysql log 파일 보존 기간이다. (로그가 중요하다면 설정을 피한다)
   

> my.cnf 파일을 수정했다면 다음과 같은 명령어를 이용하여 mysql을 다시 시작해줘야 한다.
   service mysqld restart

'Databases > MYSQL' 카테고리의 다른 글

mysql - BinLog 파일 Text 변환  (0) 2012.02.27
mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20
mysql - Replication 정의  (0) 2012.01.16
mysql - 덤프하기 (mysqldump)  (0) 2011.10.07

회사에서 사용하는 무료툴이다...

리눅스 원격 접속하여 쿼리문을 날리면 알아보기 어렵다... 특히나 자료량이 방대할 때는 더더욱....그래서 HeidiSQL 툴을 사용중이다...

사진 출처 : www.heidisql.com



'Databases > MYSQL' 카테고리의 다른 글

mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23
mysql - Replication 정의  (0) 2012.01.16
mysql - 덤프하기 (mysqldump)  (0) 2011.10.07
mysql - telnet으로 사용하기  (0) 2011.08.24

Replication을 조사하면서 여러가지 내용들을 알게 되었다...

MySQL Replication 이란?
  Master/Slave 서버를 각각 준비해 놓고 실시간으로 Master 데이터를 Slave로 동기화 하는 방법을 의미한다.

MySQL Replication 설계 구조
  - Master/Slaver
  - Master/Master

MySQL Replication 유용할 수 있는 내용
  - 부하 균형
  - 백업 및 복구

MySQL Replication을 왜 사용하는가?
  각자 역할 분담하여 부하 분산 효과를 가지기 위해 사용한다. Master 서버의 경우 INSERT, UPDATE, DELETE만 처리하고 Slave 서버는 SELECT 만 처리하도록 하여 분산 효과를 가질 수 있다. Master서버의 내용을 동기화로 모두 지니고 있는 Slave 서버는 서비스의 상황에 따라 단일 또는 다중으로 이루어질 수 있다.
  Master 서버가 동작 이상을 보였을 때 Slave 서버로 대체할 수 있는 잇점을 지니고 있다. 동기화만 제대로 되어 있다면 Slave 서버가 Master 서버로 변경하여 사용한다. 왜냐하면 Master 내용을 Slave가 모두 지니고 있기 때문이다.

DUMP와 Replication의 차이점
dump 기능은 실시간으로 데이터를 복사본으로 가지고 있을 수 없으므로 실시간으로 데이터 복원이 필요할 때 Replication 기능을 사용한다. 특정 시점으로 복원이 필요한 경우에는 dump를 사용도 유용하게 사용할 수 있다.
Replication에 사용하는 Log를 주기적으로 비워주지 않는다면 용랴으이 압박을 받을 수 있다는 사실도 명심해야 한다.
dump는 반대로 데이터의 누적으로 용량이 지속적으로 불어날 수 있다. 기간에 따라 용량의 압박을 받을 수도 있고 아닐 수도 있다.


마지막으로...
  Replication 도입은 대규모 회원이 존재하고 있는 가정으로 DB의 빠른 데이터 처리를 목적으로 보인다... DB의 경우 튜닝을 제대로 하지 않는 경우 DB 쿼리 밀림 현상이 발생되는 부분을 본적이 있다... 가장 많은 비중을 차지하는 부분을 별도로 떼어 놓고 중요한 write 기능을 수행할 수 있도록 하는 부분은 매력 있는것 같다... 아직은 미숙한 프로그래머이기에 정확히 어떻게 설계를 하는게 옳은지는 모르겠으나... 이 기능을 정확히 알고 활용하면 보다 효율적인 서버와 DB의 관계를 만들어 낼 수 있을 것 같다는 생각은 든다...

'Databases > MYSQL' 카테고리의 다른 글

mysql - my.cnf 설정할 때 참고  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20
mysql - 덤프하기 (mysqldump)  (0) 2011.10.07
mysql - telnet으로 사용하기  (0) 2011.08.24
mysql - 날짜와 관련된 함수 정보 정리  (0) 2011.08.24

▷ mysql 덤프 기본 명령

    mysqldump  -u [계정]  -p [비번]  [DB이름]  >  파일명.sql


▷ mysql 덤프할 때 응용 명령

  // 로컬이 아닌 경우 다른 호스트 DB를 받아올 때 사용
   mysqldump  -u [계정]  -p  [비번]  -h [아이피]  [DB이름]  > 파일명.sql

  // 데이터 삭제 후 생성 금지로 덤프 받기 (데이터만 추가하는 경우에 사용)
   mysqldump  -u [계정]  -p  [비번]  -h [아이피]  [DB이름]  --no-create-info > 파일명.sql

  // 조건문 넣어서 덤프 하기
   mysqldump -u [계정]  -p [비번]  -w'startdate < curdate() and startdate > curdate()-1' [DB이름] > 파일명.sql


▷ mysql 덤프 파일을 밀어 넣기

   mysql  -u [계정]  -p [비번]  [DB이름]  <  파일명.sql


▷ 강제로 옵션주는 경우 (이 부분은 정확히 찾아보지 않고 기존의 코드를 보고 작성한 것임.)

    // 위의 명령이 안먹는 경우 아래 옵션을 해보는 방법을 ...
    -a -c -q -Q -e --no-create-info

'Databases > MYSQL' 카테고리의 다른 글

mysql - HeidiSQL Tool 소개  (0) 2012.01.20
mysql - Replication 정의  (0) 2012.01.16
mysql - telnet으로 사용하기  (0) 2011.08.24
mysql - 날짜와 관련된 함수 정보 정리  (0) 2011.08.24
mysql - 서브 쿼리 사용시 주의  (0) 2011.08.24

▷ mysql 접속
    mysql -u[사용자아이디] -p[비번]

    mysql -u[사용자아이디] -p[비번] [DB명]
    : DB에 바로 접속이 가능한 명령이다....

▷ mysql DB 사용
    USE [DB명]

▷ mysql DB & TABLE 보기
    SHOW databases;   / SHOW tables;

▷ 현재 상태 보기
    status



mysql에 접속하고 DB를 지정하지 않았다면 USE 명령을 사용하면 된다.
쿼리 명령은 동일하므로 패스!!
▷ 어디에선가 펌한거 같은데 사이트가 기억이 안난다... ^^;;;

- DAYOFWEEK(date) : 해당 날짜의 요일을 숫자로 반환한다. 일요일은 1, 토요일은 7 이다.

- : select DAYOFWEEK('1998-02-03');

 

- WEEKDAY(date) : 해당 날짜에 대한 요일을 반환한다. 월요일은 0, 일요일은 6 이다.

- : select WEEKDAY('1997-10-04 22:23:00');

 

- DAYOFYEAR(date) : 해당 날짜의 1 1일부터의 날수를 반환한다. 결과값은 1에서 366 까지이다.

- : select DAYOFYEAR('1998-02-03');

 

- YEAR(date) : 해당 날짜의 년을 반환한다.

- : select YEAR('98-02-03');

 

- MONTH(date) : 해당 날짜의 월을 반환한다.

- : select MONTH('1998-02-03');

 

- DAYOFMONTH(date) : 해당 날짜의 일을 반환한다. 결과값은 1 에서 31 까지이다.

- : select DAYOFMONTH('1998-02-03');

 

- HOUR(time) : 해당날짜의 시간을 반환한다. 결과값은 0 에서 23 이다.

- : select HOUR('10:05:03');

 

- MINUTE(time) : 해당날짜의 분을 반환한다. 결과값은 0 에서 59 이다.

- : select MINUTE('98-02-03 10:05:03');

 

- SECOND(time) : 해당날짜의 초를 반환한다. 결과값은 0 에서 59 이다.

- : select SECOND('10:05:03');

 

- DAYNAME(date) : 해당 날짜의 요일 이름을 반환한다. 일요일은 'Sunday' 이다.

- : select DAYNAME("1998-02-05");

 

- MONTHNAME(date) : 해당 날짜의 월 이름을 반환한다. 2월은 'February' 이다.

- : select MONTHNAME("1998-02-05");

 

- QUARTER(date) : 해당 날짜의 분기를 반환한다. 결과값은 1 에서 4 이다.

 

- WEEK(date,first) : 1 1일부터 해당날가지의 주 수를 반환한다. 주의 시작을 일요일부터 할경우는 두번째 인자를 0, 월요일부터 시작할 경우는 1 을 넣는다. 결과값은 1 에서 52 이다.

- : select WEEK('1998-02-20',1);

 

- PERIOD_ADD(P,N) : P (형식은 YYMM 또는 YYYYMM 이어야 한다.) N 만큼의 달 수를 더한값을 반환한다. 주의할것은 두번째 인자는 숫자라는 것이다.

- : select PERIOD_ADD(9801,2);

 

- PERIOD_DIFF(P1,P2) : 두개의 인자 사이의 달 수를 반환한다. 두개의 인자 모두 형식은 YYMM 또는 YYYYMM 이어야 한다.

 

- DATE_ADD(date,INTERVAL expr type) : 날짜를 더한 날짜를 반환한다.

- DATE_SUB(date,INTERVAL expr type) : 날짜를 뺀 날짜를 반환한다.

- ADDDATE(date,INTERVAL expr type) : DATE_ADD(date,INTERVAL expr type) 와 동일하다.

- SUBDATE(date,INTERVAL expr type) : DATE_SUB(date,INTERVAL expr type) 와 동일하다.

- EXTRACT(type FROM date) : 날짜에서 해당 부분을 추출한다.

- : SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 SECOND);

SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY);

SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND);

SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND);

SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);

SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);

SELECT EXTRACT(YEAR FROM "1999-07-02");

SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");

SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");

- 참고 : type 에 사용되는 키워드는 SECOND, MINUTE, HOUR, DAY, MONTH, YEAR, MINUTE_SECOND, HOUR_MINUTE, DAY_HOUR, YEAR_MONTH, HOUR_SECOND, DAY_MINUTE, DAY_SECOND 이다.

- 주의 : 계산한 달의 날수가 작을 경우는 해당달의 마지막 날을 반환한다. 예를 들어 select DATE_ADD('1998-01-30', Interval 1 month); 의 경우 1998-02-28 을 반환한다.

 

- TO_DAYS(date) : 0 년 부터의 날짜수를 반환한다. 이 함수는 1582 이전 날에 대해서는 계산하지 않는다.

- : select TO_DAYS(950501);

 

- FROM_DAYS(N) : 해당 숫자만큼의 날짜를 반환한다. 이 함수는 1582 이전 날에 대해서는 계산하지 않는다.

- : select FROM_DAYS(729669);

 

- DATE_FORMAT(date,format) : 날짜를 해당 형식의 문자열로 변환하여 반환한다.

- : select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');

select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');

select DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j');

select DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');

- 참고 : 형식은 다음과 같다. %M (달 이름), %W (요일 이름), %Y (YYYY 형식의 년도), %y (YY 형식의 년도), %a (요일 이름의 약자), %d (DD 형식의 날짜), %e (D 형식의 날짜), %m (MM 형식의 날짜), %c (M 형식의 날짜), %H (HH 형식의 시간, 24시간 형식), %k (H 형식의 시간, 24시간 형식), %h (HH 형식의 시간, 12시간 형식), %i (MM 형식의 분), %p (AM 또는 PM)

 

- TIME_FORMAT(time,format) : DATE_FORMAT(date,format) 과 같은 방식으로 사용할수 있으나 날 이상의 것에 대해서는 NULL 이나 0 을 반환한다.

 

- CURDATE() : 현재날짜를 반환한다. 숫자와 연산을 할경우 숫자로 변환된다. 형식은 'YYYY-MM-DD' 또는 YYYYMMDD 이다.

- : select CURDATE();

select CURDATE() + 0;

 

- CURTIME() : 현재시간을 반환한다. 숫자와 연산을 할경우 숫자로 변환된다. 형식은 'HH:MM:SS' 또는 HHMMSS 이다.

- : select CURTIME();

select CURTIME() + 0;

 

- SYSDATE() : 현재날짜시간을 반환한다. 숫자와 연산을 할경우 숫자로 변환된다. 형식은 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS 이다.

- : select NOW();

select NOW() + 0;

 

- NOW() : SYSDATE() 와 동일하다.

 

- UNIX_TIMESTAMP() : '1970-01-01 00:00:00' 부터의 초를 반환한다. 인자가 주어질 경우는 해당 날짜에 대한 유닉스 시간을 반환한다.

- : select UNIX_TIMESTAMP();

select UNIX_TIMESTAMP('1997-10-04 22:23:00');

 

- FROM_UNIXTIME(unix_timestamp) : 유닉스시간에서 날짜 형식으로 변환한다.

- : select FROM_UNIXTIME(875996580);

 

- FROM_UNIXTIME(unix_timestamp,format) : 유닉스시간을 날짜형식으로 변환하고 DATE_FORMAT(date,format) 에서 설명한 포맷으로 변환하여 반환한다.

- : select FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');

 

- TIME_TO_SEC(time) : 해당 시간의 0:0:0 에서부터의 초를 반환한다.

- : select TIME_TO_SEC('22:23:00');

 

- SEC_TO_TIME(seconds) : 초를 시간으로 바꾼다.

- : select SEC_TO_TIME(2378);

Error 1093 (ER_UPDATE_TABLE_USED)

SQLSTATE = HY000

Message = "You can't specify target table 'x'

for update in FROM clause"


이 에러는 다음과 같은 경우에 발생 한다.


UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);


여러분은 UPDATE문 내에서 할당을 위한 서브쿼리를 사용할 수 있는데 그 서브쿼리들은 SELECT문 뿐만 아니라 UPDATE DELETE문들 내에서 적합하기 때문이다. 그러나 서브쿼리의 FROM절과 업데이트 target모두를 위해 같은 테이블을 사용할 수 없다.


정리 : 동일한 테이블을 update하고 select하는건 위반이다!! 스토어드 프로시저를 이용해야 할것 같다.


▷ 한 머신에 다른 데이터베이스 접근 방법
   - [DB명].[테이블명] 형태로 접근이 가능하다.

▷ 각각 머신에 데이터베이스 접근 방법
   - MS-SQL처럼 접근은 불가능하다... 5.0부터 FEDERATED 방법을 사용해 보라는 글들이 많다...
   <링크 주소 : http://www.mysqlkorea.co.kr/sub.html?mcode=develop&scode=01&m_no=21940&cat1=14&cat2=427&cat3=460&lang=k >


▷ mysql 5.0 기준으로 소개된 글
There is a hard limit of 4096 columns per table, but the effective maximum may be less for a given table. The exact limit depends on several interacting factors.

<링크 주소 : http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html>


mysql : 3230 으로 안내하는 분들도 블로그에 보입니다.

아마도 높은 버전으로 상향되면서 지원되는 최대 컬럼수도 점차적으로 늘어난 것 같습니다...

+ Recent posts