2012-09-17

DBMS/MySQL]FreeBSD5.3.1R 에서 mysql4.x 설치하기


이글은 FreeBSD 5.3R 에서의 포트시스템으로의 설치를 기본으로 합니다.
1. 디렉토리 이동
  # cd /usr/ports/databases/mysql41-server

--> mysql 버전이 5.x 가 있지만 proftpd포트 설치시 mysql4.x 클라이언트

를 설치하므로 버전을 맞추기 위해 4.x 를 설치하기로 합니다.

  # make install clean WITH_CHARSET=euc_kr BUILD_OPTIMIZED=yes

(
 mysql41-server 의 경우 WITH_CHARSET옵션의 값이 euckr로 변경됨.
 mysql 4.1버전의 경우
 # make install clean WITH_CHARSET=euckr BUILD_OPTIMIZED=yes
)

  # /usr/local/bin/mysql_install_db

==> 처음으로 mysql을 사용하기 전에 시스템 DB를 만들기 위한 스크립트를
실행합니다.

위 명령은 mysql을 설치한 후 반드시 한번만 하시기 바랍니다.



2. 설치 확인 작업

  # /usr/local/bin : mysql바이너리 파일들이 있나 확인

  # /usr/local/etc/rc.d/mysql-server.sh : mysql 기동 스크립트

  # /var/db/mysql : mysql 데이터베이스 파일



3. 데몬 시작및 중지하기

3.1. 시작하기

  # /usr/local/etc/rc.d/mysql-server.sh start 혹은

  /usr/local/bin/mysqld_safe -user=mysql &



3.2 중지하기

  # /usr/local/etc/rc.d/mysql-server.sh stop 혹은

  /usr/local/bin/mysqladmin -u root shutdown



4. mysql 데이터베이스를 사용하기 전에

반드시 루트 암호를 생성하고 사용하시기 바랍니다.

  #/usr/local/bin/mysqladmin -u root password '새로운 비밀번호'

  #/usr/local/bin/mysqladmin -u root -h 호스트명 password '새로운 비밀번호'



5. 데이터베이스 사용하기

  #/usr/local/bin/mysql -u root -p

password :




** 만약 위와같이 작업시 에러발생하는 경우


4번 작업시 에러발생시에는

1. 우선 mysql서버 데몬을 죽인다.

  # kill mysql_pid 혹은

/usr/local/etc/rc.d/mysql-server.sh stop


2. /usr/local/etc/rc.d/mysql-server.sh 파일을 편집해서

========================

편집내용.

  /usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} --language=korean > /dev/null &

를 다음과 같이 수정합니다 .

  /usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} --language=korean --skip-grant > /dev/null &


========================



3. mysql서버 데몬을 다시 시작한다.

  # /usr/local/etc/rc.d/mysql-server.sh start



4. 위와같이 하면 권한 테이블을 사용하고 데몬을 띄우게 됩니다.

5. mysql에 접속하여

  # /usr/local/bin/mysql -u root -p

6. root의 암호를 변경합니다.

  mysql> use mysql;

  mysql> select * from user where user = 'root';

  mysql> update user SET password = PASSWORD('newpassword');

7. 권한 테이블을 다시 읽는다.

  mysql> flush privileges;

8. mysql을 종료

  mysql> \q



9. mysql 서버 데몬 죽입니다.

  #/usr/local/etc/rc.d/mysql-server.sh stop



10./usr/local/etc/rc.d/mysql-server.sh 파일을 편집해서

========================
편집내용.

  /usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} -language=korean --skip-grant > /dev/null &

를 다음과 같이 수정합니다 .

  /usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} -language=korean > /dev/null &

========================

다시 원상복귀 합니다.



11. mysql 서버를 다시 시작합니다.

  #/usr/local/etc/rc.d/mysql-server.sh start



12. 정상적으로 mysql을 사용가능합니다.

DBMS/MySQL]FreeBSD 5.4R 에서 mysql-server41 설치후 한글 입력 문제


FreeBSD 5.4R에서 ports 에서 mysql-server41 을 설치시

make install clean WITH_CHARSET=euckr로 설치후

한글 입력이 안되는 문제가 발생한다

그런경우 아래와 같이 해당 계정에서 작업을 한다.


///////////////////////////////////////////////////////////////////////////////

MySQL 클라이언트 프로그램(mysql)에서 한글 입력에 문제가 있을 수 있습니다.

mysql은 readline 라이브러리를 사용하므로, 사용자 디렉토리의 .inputrc에

다음 내용을 넣어주면 됩니다.


set meta-flag On

set convert-meta Off

set output-meta On


///////////////////////////////////////////////////////////////////////////////

이글은 최준호님이 답해주셨습니다

DBMS/MySQL] 원격지의 MySQL서버에 접속하기


 쉘 상태에서 원격지의 MySQL 서버에 접속을 하고자 하는 경우
         
 # ./bin/mysql -h 호스트명(혹은 ip주소) -u 계정 -p DB명

 물론 원격지 MySQL서버에 다음과 같이 등록이 되어 있어야 가능합니다.

 mysql> insert into db values ('ip주소', 'user_db', 'user_name', ...);

 mysql> insert into user values ('ip주소', 'user_name', PASSWORD('user_password'));


 위와 같이 등록이 먼저 되어 있어야 하겠지요 ^^

APM 에서 UTF-8 사용하기.(database.sarang.net)의 글


APM 에서 UTF-8 사용하기 입니다.
아래 링크를 클릭하시면 해당 글 목록으로 이동합니다.


DBMS/MySQL] 4.1.x 에서 Default character set 변경하기...



안녕하세요. 신규로 4.1.7버전의 MySQL 를 설치했는데 character set 의 변경이 잘 되지 않아서 질문 올립니다.
아래에 버전 및 시도해본 방법을 적었습니다. 함 확인해보시고요 해결책 알려주시면 감사하겠습니다~

0. 버전
버전 : 4.1.7, source compile 해서 설치 (my.cnf 에서 수정하려고 configure 할때 character set 설정 하지 않았습니다.)

1. 현재 character 정보
mysql> show variables like 'char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+

2. 변경하려고 시도해본 방법
1) my.cnf 변경
[mysqld] 아래에
default-character-set=euckr
를 추가하고 mysql을 재시작하면 에러가 납니다.
/mysql/var/***.err 에서 에러를 확인하면 아래와 같습니다.
/usr/local/mysql/libexec/mysqld: Character set 'euckr' is not a compiled character set and is not specified in the '/usr/local/mysql/share/mysql/charsets/Index.xml' file

"Character set 'euckr' is not a compiled character set" 이라면 compile할때 euckr 이 빠졌다는 것인가요?
'/usr/local/mysql/share/mysql/charsets/Index.xml' file 에는 euckr 항목이 있습니다.

<charset name="euckr">
<family>Korean</family>
<description>EUC-KR Korean</description>
<alias>euc_kr</alias>
<alias>euc-kr</alias>
<collation name="euckr_korean_ci" id="19" order="Korean">
<flag>primary</flag>
<flag>compiled</flag>
</collation>
<collation name="euckr_bin" id="85">
<flag>binary</flag>
<flag>compiled</flag>
</collation>
</charset>

2) database의 character set을 직접 변경
mysql> ALTER DATABASE tv DEFAULT CHARACTER SET euckr;
ERROR 1115 (42000): Unknown character set: 'euckr'

3) 지원하는 character set 확인
설치한 mysql 서버에서 지원하는 character set을 확인해 보았습니다만 euckr 이 없네요.
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | ISO 8859-1 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
| macce | Mac Central European | macce_general_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| binary | Binary pseudo charset | binary | 1 |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
+----------+-----------------------------+---------------------+--------+

1)의 에러메시지에서 처럼 euckr character set 이 compile 되지 않았다는 것 같은데요,
그럼 어떻게 추가할수 있을까요.

DBMS/SQL] 쿼리문의 속도 향상 시리즈.1


부분범위처리를 사용한다.
부분범위처리란
   - 조건을 만족하는 전체집합이 아닌 일부분만을 Access 하게 하는것
   - Data량이 많아도 퍼포먼스에는 지장이 없고, 오히려 향상을 가져올 수도 있다.
   - 인덱스나 클러스트를 적절히 활용하여 sort를 대체가능하다.
   - table은 액세스하지 않고 index만 사용하도록 유도
   - exists를 활용한다.
   - query를 이원화 하여 일부분씩 scan하도록 유도
위의 것들을 조합하여 활용하면 쿼리문을 작성하여 대량의 데이터를 처리할 경우에도 무리없이
원하는 속도를 얻을 수 있을 것이다.

DBMS/SQL]인덱스를 이용한 조건검색


인덱스란 데이터베이스에서 데이터를 빠르게 찾을 수 있게 도와주는 도구로 흔히 책의 차례에 비유된다.
인덱스의 유무에 따라서 데이터를 찾는 성능의 차이가 천차만별이 될 수도 있으나 또한 너무 남용을 하게 되면 데이터의 크기보다 인덱스의 크기가 커지는 배보다 배꼽이 더 큰경우가 발생하는 경우도 있으니 유의해서 사용을 해야된다.
인덱스는 테이블에서 어느 하나의 필드, 혹은 필드들의 조합으로 생성을 할 수 있다.
이 생성된 인덱스를 사용하게 하는 것이 쿼리 작성자의 능력이다.

이제 조건 검색에서 주의할 사항을 알아보자.

1. 조건검색시 ''='' 은 모든 인덱스검색중 최우선 순위를 가진다.
2. 조건 검색시 좌변인덱스는 가공하지 말고, 우변을 가공해서 조건을 생성할 것.
    단, 의도적인 인덱스 사용을 막고자 하는 경우는 예외.
3. 조건 검색시 부정의 표현을 사용하지 말고 긍정표현 및 범위 조건을 사용할것. 
     다시말해,  ''not'', ''<>'', ''or'' 이런 조건들은 될 수 있으면 긍정적인 표현으로 바꾸어서 사용할 것.
     ''<>'' => exists로 대체,  ''not'' A => not (A) 대체 
4. 인덱스가 있는 곳과 없는곳의 테이블을 조인하여 결과 검색시, 인덱스가 없는곳의 데이터가 먼저 읽혀지고 다음에 인덱스가 있는 테이블의 데이터가 읽혀진다.
5. 가급적 조건에 ''Null'', ''Not Null'' 을 없애기 위해 테이블 설계시, 결합인덱스의 구성컬럼이 된다면 Not Null로, 또한 입력조건값으로 자주 사용되는 것이면 Not Null로 설계를 하여서 조건검색시 Not Null, Null이란 조건을 가급적 없앤다.