블로그 이미지
:: OTL ≠ 좌절 :: OTL = 운(運) ::
coriahn

Notice

Archive

  • 19,286total
  • 12today
  • 58yesterday
2010/09/01 23:14 3-4. DATABASE/MySQL
Multi-Master Replication Manager for MySQL

대박임.. ㅡ,.ㅡ

마스터 서버를 여러개두고 이를 실시간으로 이중화 하는.. 대박 유틸인듯..

http://mysql-mmm.org/

더불어..

mysql을 통해 dns서버를 구축하는 프로그램?

dns서버에서 mysql의 자료를 호출하는 프로그램.. 대박임..

http://mysql-bind.sourceforge.net/index.php

실제 해보지 못했기 때문에..  잘되는지는 의문임.. 하여튼 대박..
저작자 표시
posted by coriahn
2010/04/07 21:18 3-4. DATABASE/Oracle
Oracle Client 10G EX Edition을 설치 후,

[프로그램]- [Oracle Client 10G Express Edition] - [SQL 명령줄 실행]
아래와 같은 에러메시지(?)가 발생하게 된다..

/usr/lib/oracle/xe/app/oracle/product/10.2.0/client(server)/bin/nls_lang.sh: 112: [[: not found
/usr/lib/oracle/xe/app/oracle/product/10.2.0/client(server)/bin/nls_lang.sh: 112: [[: not found

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Apr 7 21:04:10 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL>

해결 방법은.. 오류난 파일을 열어서..

 test@Oracle-srv:/usr/lib/oracle/xe/app/oracle/product/10.2.0/client(server)/bin$ sudo vim nls_lang.sh

 #!/bin/sh
 #
 # NAME
 #   nlslang.sh
에서 #!/bin/sh 를 아래와 같이 #!/bin/bash로 변경한다.

 #!/bin/bash
 #
 # NAME
 #   nlslang.sh


저작자 표시
posted by coriahn
2009/05/26 17:22 3-4. DATABASE/MySQL
0. Mysql Replication
    0.1. CentOs 4.7, mysql 4.1.22를 기준으로 작성하였습니다.
[root@DB_master ~]# uname -a
Linux DB_master 2.6.9-78.EL #1 Thu Jul 24 23:46:01 EDT 2008 i686 i686 i386 GNU/Linux
[root@DB_master ~]# mysql --version
mysql  Ver 14.7 Distrib 4.1.22, for redhat-linux-gnu (i686) using readline 4.3

     0.2. 동일 버전에서 2회 성공하였고, 급조해서 만든 메뉴얼이니.. 안되면 당신탓.. ㅋㅋ
리플은 남겨주셈.. 안되는 경우라도 알게..

1. DB_master에서의 설정
    1.1. my.cnf 의 [mysqld] 섹션에 굵은 글씨로 된 2줄을 추가.
[root@DB_master ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
log-bin
server-id=1
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 
    1.2. 변경된 설정파일 적용을 위해 mysqld 재시작
[root@DB_master ~]# /etc/init.d/mysqld restart
MySQL 를 정지함:  [  확인  ]
MySQL (을)를 시작함:  [  확인  ]
 
    1.3. DB에 접속하여 마스터 설정(연결 계정 추가, 상태 확인)
[root@DB_master ~]# mysql -uroot -p
Enter password:

mysql> GRANT SELECT , RELOAD , LOCK TABLES , REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO ReplicationID@"%" IDENTIFIED by 'ReplicationPW';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+----------------------+----------+--------------+------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| DB_master-bin.000001 |       79 |              |                  |
+----------------------+----------+--------------+------------------+
1 row in set (0.01 sec) 
 
    1.4. DB_master 백업을 위해 해당 폴더 압축
[root@DB_master ~]# cd /var/lib
[root@DB_master lib]# tar cvf DB_master.tar mysql/
mysql/
mysql/ib_logfile1
mysql/ibdata1
mysql/mysql/
mysql/mysql/help_relation.frm


2. DB_slave에서의 설정
    2.1. DB_master에서 압축한 DB 복사
[root@DB_salve ~]# cd /var/lib/
[root@DB_salve lib]# scp 192.168.0.175:/var/lib/DB_master.tar .
The authenticity of host '192.168.0.175 (192.168.0.175)' can't be established.
RSA key fingerprint is 5f:88:50:f1:62:a0:3a:d2:a2:89:d7:a7:fd:60:fc:3b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.175' (RSA) to the list of known hosts.
root@192.168.0.175's password:
DB_master.tar                                           100%   21MB   1.6MB/s   00:13   

[root@DB_salve lib]# tar xvf DB_master.tar
mysql/
mysql/ib_logfile1
mysql/ibdata1
mysql/mysql/
mysql/mysql/help_relation.frm

 
    2.2. my.cnf 의 [mysqld] 섹션에 굵은 글씨로 된 5줄을 추가.
[root@DB_salve lib]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
log-bin
server-id=2
log-slave-updates
log-warning
replicate-ignore-db=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

    2.3. 변경된 설정파일 적용을 위해 mysqld 재시작
[root@DB_salve lib]# /etc/init.d/mysqld restart
MySQL 를 정지함:  [  확인  ]
MySQL (을)를 시작함:  [  확인  ]

    2.4. DB에 접속하여 슬레이브 설정(마스터 연결정보, 슬레이브 시작)
[root@DB_salve lib]# mysql -u root -p
Enter password:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.175',
MASTER_USER='ReplicationID', MASTER_PASSWORD='ReplicationPW';
Query OK, 0 rows affected (0.05 sec)

mysql> slave start;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW SLAVE STATUS;
+----------------------------------+---------------+-------------+-------------+-----------
| Slave_IO_State                   | Master_Host   | Master_User | Master_Port | Connect_Re
+----------------------------------+---------------+-------------+-------------+-----------
| Waiting for master to send event | 192.168.0.175 | ReplicationID|        3306 |          
+----------------------------------+---------------+-------------+-------------+-----------
1 row in set (0.00 sec)

3. 설정 확인
    3.1. DB_master에서 값입력
[root@DB_master ~]# mysql -uroot -p
Enter password:

mysql> use radius
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','tpw1');
Query OK, 1 row affected (0.06 sec)

mysql> insert into radcheck (username,attribute,op,value) values ('test1','User-Password',':=','tpw1');
Query OK, 1 row affected (0.00 sec)

mysql> select * from radcheck;
+----+----------+---------------+----+-------+
| id | UserName | Attribute     | op | Value |
+----+----------+---------------+----+-------+
|  1 | test     | User-Password | := | tpw1  |
|  2 | test1    | User-Password | := | tpw1  |
+----+----------+---------------+----+-------+
2 rows in set (0.00 sec)

    3.2. DB_slave에서 변경된 값 확인
[root@DB_slave ~]# mysql -uroot -p
Enter password:

mysql> use radius
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from radcheck;
+----+----------+---------------+----+-------+
| id | UserName | Attribute     | op | Value |
+----+----------+---------------+----+-------+
|  1 | test     | User-Password | := | tpw1  |
|  2 | test1    | User-Password | := | tpw1  |
+----+----------+---------------+----+-------+
2 rows in set (0.00 sec)
posted by coriahn
2009/05/19 09:30 3-4. DATABASE/MySQL

/ MySQL에서 지원하는 데이터타입
  • INT : 4bytes 정수
  • CHAR(n) : 문자의 수가 n개인 문자열
  • VARCHAE(n) : 문자의 수가 최대 n개인 문자열
  • TEXT : 문자의 수가 최대 65535개인 문자열

/ CREATE TABLE (새로운 테이블 생성)

create table 테이블명 (

필드명 데이터타입 [NOT NULL]

{, 필드명 데이터타입 [NOT NULL]}*

[,PRIMARY KEY (필드명)]

)

/ ALTER TABLE(테이블구조 및 속성변경)

기존의 테이블구조 변경

1. 필드추가생성

ALTER TABLE 테이블명 ADD [COLUMN] 필드명 필드타입

예) ALTER TABLE userdb ADD COLUMN addr VARCHAR(100)

2. 필드속성변경

ALTER TABLE 테이블명 CHANGE [COLUMN] 기존필드명 새필드명 필드타입

예)ALTER TABLE userdb ADD addr VARCHAE(100)

예) ALTER TABLE userdb CHANGE COLUMN addr address VARCHAR(255)

3. 필드삭제

ALTER TABLE 테이블명 DROP [COLUMN] 필드명

예) ALTER TABLE userdb DROP COLUMN address

4. 기존의 테이블삭제

DROP TABLE 테이블명

/ SELECT (데이터검색하기)

SELECT [DISTINCT] 테이블명 {, 테이블명}*

FROM 필드명 {,필드명}*

[WHERE 검색조건]

[ORDER BY 필드명[ASC or DESC] {,필드명 [ASC or DESC]}*]

[GROUP BY 필드명 {, 필드명}*]

[HAVING 검색조건]

1. 일반적인 검색

SELECT name, id FROM userdb WHERE level = 'B'

SELCET * FROM userdb

SELECT name, id, email, sex, milage, level FROM userdb

2. 결과레코드의 중복제거

SELECT level FROM userdb

SELECT DISTINCT level FROM userdb

3. 조건검색

SELECT name, id, email FROM userdb WHERE milage > 3000 AND sex = 'M'

4. 검색결과의 정렬

SELECT name, id, milage FROM userdb WHERE milage >= 3000 ORDER BY milage DESC

5. 검색결과에 대한 산술계산 및 문자열처리

SELECT name, '님의 마일리지는 ', milage, '점입니다.' FROM userdb WHERE milage >= 3000 ORDER BY milage

SELECT name, id, email, milage+300 FROM userdbWHERE id = 'soony'

6. 그룹함수(group function)를 이용한 검색

SELECT count(*) FROM userdb WHERE sex = 'F'

SELECT avg(milage) FROM userdb WHERE sex='F'

7. GROUP BY를 이용한 검색

SELECT level, max(milage), min(milage), avg(milage) FROM userdb GROUP BY level

SELECT sex, max(milage), min(milage), avg(milage) FROM userdb GROUP BY sex

8. HAVING을 이용한 검색

SELECT sex, max(milage), min(milage), avg(milage) FROM userdb GROUP BY sex HAVING sex = 'F'

9. BETWEEN 연산자를 이용한 검색

SELECT name, email, mailage, sex FROM userdb WHERE sex = 'F' AND milage BETWEEN 3000 AND 4000

SELECT name, email, milage, sex FROM userdb WHERE sex = 'F' AND milage >= 3000 AND milage <= 4000

SELECT name, sex, milage FROM userdb WHERE milage NOT IN (3300,3500,3700)

10. LIKE를 사용한 검색

SELECT name FROM userdb WHERE name, LIKE '%현%'

SELECT name, id, FROM userdb WHERE id LIKE 'm%'

11. NULL값을 갖는 데이터검색

SELECT name, id FROM userdb WHERE email IS NULL

SELECT name, id FROM userdb WHERE email IS NOT NULL

/ INSERT (새로운 데이터의 삽입)

INSERT INTO 테이블명 [(필드명{[, 필드명]}*)] VALUES (필드값)

INSERT INTO userdb (name, id, email, sex, milage, level) VALUES ('이완철', 'yunka1018','sspark@kornet.net'.'M','3500','B')

INSERT INTO userdb VALUES('이완철', 'yunka1018','sspark@kornet.net','M','3500','B')

INSERT INTO userdb (id, name) VALUES('yunka1018','정양미')

/ 데이터의 수정(UPDATE)

UPDATE 테이블명 SET 필드명=필드값 또는 산술식 {, 필드명 = 필드값 또는 산술식}*[WHERE 검색조건]

UPDATE userdb SET sex = 'F' WHERE name = '김현아'

UPDATE userdb SET sex = 'F'

만일 위와 같이 WHERE절로 검색조건을 명시하지 않은 경우에는 해당테이블내의 모든레코드의 필드값이 설정한값으로 수정되므로 유의해야한다.

UPDATE userdb SET sex = 'F'

UPDATE userdb SET milage = milage + 300

/ DELETE (데이터의 삭제)

DELETE FROM 테이블명 [WHERE 검색조건]

DELETE FROM userdb WHERE id = 'king94'

DELETE FROM userdb

만일 위와 같이 검색조건을 지정하지 않으면 해당테이블내의 모든레코드가 삭제되므로 주의해야한다.

/ MYSQL 데이터베이스의 사용법

1. MYSQL서버의 기동과 종료

이하 디렉토리위치는 /usr/local/mysql/bin이다.

./bin/safe_mysql &

2. MYSQL서버의 종료 및 재기동

safelab.skku.ac.kr.pid파일은 MYSQL의 PID를 저장하고 있다.

kill -9 PID

mysqladmin -u root -p shutdown

mysqladmin -u root -p reload

3. mysqladmin 사용법

mysqladmin -u root -p reload

mysqladmin -u root -p create sample

mysqladmin -u root -p drop sample

4. mysql 클라이언트사용법

mysql -u root -pphp99 mysql

mysql -u root -p mysql

mysql>show databases;

mysql>show tables;

mysql>show columns from db;

mysql>desc db;

mysql>select host, user, password from user;

mysql>update user set password = password('php99') where user = 'root';

mysql>select host, user, password from user;

mysql>drop database sample;

5. 생성된 데이터베이스의 등록

mysql>insert into db values('%','sample','php','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

mysql>select host, db, user from db;

6. 새로운 사용자(데이터베이스 소유자)등록

mysql>insert into user (host, user, password) values('localhost','php','password('php99'));

mysql>select host, user, password from user;

7. 테이블의 생성과 수정 및 삭제

mysql -u root -p sample

mysql>show tables;

mysql>desc userdb;

mysql>alter table userdb change column id varchar(12) NOT NULL;

mysql>desc userdb;

mysql>drop table userdb;

mysql>show tables;

8. *.sql파일로 쉘에서 SQL명령어 실행

mysql -u root -p php99 sample < userdb.sql

mysql -u php -p sample

mysql>show tables;

9. 데이터의 백업과 복구

mysqldump -u [DB사용자명] -p [백업할 데이터베이스명] > [외부로 저장할 파일명]

mysqldump -u php -p sample > sample_backup.sql

cat sample_backup.sql

mysql -u php -p php99 sample < sample_backup.sql


출처 : 데구르르까껑님의 블로그 에서 가져 왔습니다.

posted by coriahn
TAG MySQL, query
2009/03/30 11:39 3-4. DATABASE/MySQL
mysql 설치중 아래와 같은 error 메세지 발생시에는 간단히 아래 방법대로 해보시면 됩니다.

checking "LinuxThreads"... "Not found"
configure: error: This is a linux system and Linuxthreads was not
found. On linux Linuxthreads should be used.  Please install Linuxthreads
(or a new glibc) and try again.  See the Installation chapter in the
Reference Manual for more information.


방법:
/usr/include/pthread.h 화일을 열어 맨위 부분쯤에 아래 내용을 추가 하고 저장 합니다.

/* Linuxthreads */

mysql configure 과정에서 pthread.h 파일을 찾아 위 내용이 있는지 확인하는 것으로
glibc에서 없는 경우 에러 메세지가 난다고 합니다.

펌'd By http://faq.hostway.co.kr - Linux_db
posted by coriahn
2009/02/05 17:03 3-4. DATABASE/MySQL
# Centos 5에 설치된 my.cnf파일을 지우고, 컨피그 파일을 복사해둔다.
cp  /usr/local/mysql/share/mysql/my-large.cnf /etc/my.cnf

# 데이터가 들어갈 폴더의 권한설정을 잘 해준다.
chown  -R mysql.mysql /usr/local/mysql/share/mysql/var


# mysql 서버를 띄우면 아래와 같은 에러를 띄우며 죽을때..
 4.1로 바뀌면서 테이블의 구조가 변경되면서 생기는 에러 메시지..
 090205 15:50:33  mysqld started
InnoDB: Warning: we did not need to do crash recovery, but log scan
InnoDB: progressed past the checkpoint lsn 0 43792 up to lsn 0 43829
090205 15:50:34  InnoDB: Started; log sequence number 0 43792
090205 15:50:34 [Warning] './mysql/host' had no or invalid character set, and default character set is multi-byte, so character column sizes may have changed
090205 15:50:34 [Warning] './mysql/user' had no or invalid character set, and default character set is multi-byte, so character column sizes may have changed
090205 15:50:34 [Warning] './mysql/db' had no or invalid character set, and default character set is multi-byte, so character column sizes may have changed
090205 15:50:34 [ERROR] Fatal error: mysql.user table is damaged or in unsupported 3.20 format.
090205 15:50:34  mysqld ended

이것은 mysql의 user를 관리하는 table이 3.20 포맷으로 만들어졌기 때문 입니다.
임시적으로 아래와 같이 실행할수잇읍니다.

 [root@localhost]# mysqld_safe --skip-grant-tables --user=mysql &
 
 [root@localhost]# mysql_fix_privilege_tables --password=MySQL_ROOT_PASSWORD
This script updates all the mysql privilege tables to be usable by
MySQL 4.0 and above.
This is needed if you want to use the new GRANT functions,
CREATE AGGREGATE FUNCTION, or the more secure passwords in 4.1
done

 [root@localhost]# /etc/init.d/mysqld start
Starting MySQL[  OK  ]
// 펌'd by http://www.hanserver.com/center/tip_view.php?SearchGB=L&TipIDX=57&selTipGB=05&selTipOS=0&selTarget=title&txtKeyWord=&PageNo=1

그리고 마지막으로 한글이 깨지는 현상

my.cnf 파일에서 아래와 같이 설정하면 한글이 안깨짐
 [mysqld]
character_sets=latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5 character-set-client-handshake = FALSE
posted by coriahn
2008/04/04 09:04 3-4. DATABASE/MySQL

# $MYSQL_ROOT/bin/mysql -u root -p

enter the password : *******
Mysql>
 
# 데이터베이스 생성
Mysql> use mysql;
Mysql> create database databeseName;
 
# 사용자 계정 추가
Mysql> Grant ALL ON TO <사용자명>@<호스트명> IDENTIFIED BY '비밀번호';
 
# 데이터베이스 권한 설정
Mysql> insert into db values('%','DBName','UserName','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
 
--> desc db; 하여 컬럼의 갯수 확인 후 'Y'옵션 지정 함...ㅡㅡㅋ
 
Mysql> flush privileges






mysql 데몬 kill 하고

#>killall mysqld
#>mysqld_safe --skip-grant-tables & //권한을 무시하도록 하는 옵션
#>mysql -u root  //암호없이 접속가능

Mysql>
use mysql;
Mysql> update user set password=password('패스워드') where user='root';
Mysql> flush privileges;

#>killall mysqld
#>mysqld start

posted by coriahn
2008/04/04 08:59 3-4. DATABASE/MySQL
[단일 DB 백업]
mysqldump -u[USER_NAME] -p[PASSWORD] [DB_NAME] > [DB_NAME].sql
# mysqldump -uroot -pqwe123 mysql > mysql.sql

[단일 TABLE 백업]
mysqldump -u[USER_NAME] -p[PASSWORD] [DB_NAME] [TABLE_NAME] > [TABLE_NAME].sql
mysqldump -uroot -pqwe123 mysql user > user.sql

[단일 DB or TABLE 복구]
mysql -u[USER_NAME] -p[PASSWORD] [DB_NAME] < [DB_NAME].sql
mysql -uroot -pqwe123 mysql < mysql.sql

[시스템의 모든 DB 백업]
mysqldump -u[USER_NAME] -p[PASSWORD] --all-databases > [SYSTEM_NAME].sql
mysqldump -uroot -pqwe123 --all-databases > TLBT.sql

[복수개의 DB 백업시]
mysqldump -u[USER_NAME] -p[PASSWORD] --databases [DB1] [DB2] … [DBn_NAME] > [DB1_DB2_DBn].sql
mysqldump -uroot -pqwe123 --databases mysql testlink mantisbt > mysql_testlink_mantisbt.sql

[전체 or 복수개 DB 복구]
mysql -u[USER_NAME] -p[PASSWORD] < [DB_NAME].sql
mysql -uroot -pqwe123 < TLBT.sql

[추가옵션]
--skip-comment : 주석이나 정보등을 없애줌 (md5로 비교할때 꼭필요)


posted by coriahn