처음 DB를 접한것은 학생이던 시절(?) 오라클이었던가
어떤 서버에 접속해서 알수 없는 명령을 내려서 테이블 만들고
테이블에 데이터 입력하고, 삭제하고 .. (CRUD)

그 후 본격적(현업?)으로 써보기 시작한 것은 MySQL 이었던것 같다.
스타트업에 있었던 터라 본의(?) 아니게 그랬던것인지, 오픈소스라는 매력, 오라클에 대한 반감 등 여러요소가 있었던 것 같다.

그러다가 MySQL 이 오라클로 넘어가는 사건이 발생한다.
그 후로는 MariaDB 를 사용하게 되었다.
그 사이 서비스에 사용하는 MySQL 을 PgSQL 에 호환되도록 코드를 리팩토링해서 어! 잘 작동하네 정도로 postgre 를 써본 경험정도

그래서 postgres 에 대한 역사는 드문드문 아는정도
(역사 요약은 여기서 https://news.hada.io/topic?id=10344 )

 

Postgres는 언제부터 멋있어졌을까 | GeekNews

VC 펀딩도, DevRel 팀도 없이 25년간 천천히 진화함Ingres(UC 버클리, 1970~1985) —> Postgres95 —> PostgreSQLPostgres = "Post Ingres"첫 언어는 SQL도 아닌 QUEL 이었음. SQL 지원은 Postgres95가 출시된 1995년에 추가됨1996

news.hada.io

읽다보면, 드문드문 아! 그랬었지 라는 기억이 난다.

...

언제부터인가 MongoDB 를 필두로 NoSQL 이 유행하던 때 도 있었다.

사실 요즘은 어떤게 핫한지 잘 모른다. 이미 핫했지만, 이제서야 알게 된 것일지도 모르겠다.
아! 요즘 언어로는 힙한 postgres 인가!

DB 관련에는 어떤것들이 있나! https://news.hada.io/topic?id=16365 에서 살펴볼수 있다.

 

그냥 Postgres 쓰세요 | GeekNews

대부분의 웹 애플리케이션은 지속적인 데이터 저장이 필요하므로, 새로운 애플리케이션을 만들 때 기본적으로 Postgres를 선택하는 것이 좋음왜 sqlite가 아닌가?sqlite는 좋은 DB지만, 데이터가 하나

news.hada.io

사실 한가지에 익숙하다보면, 모든 것을 그 하나로 처리하고 싶은 욕구가 본능인듯 싶다.
나도 MySQL 을 NoSQL 처럼 사용하려 json 타입으로 만들어 사용하기도 한다.

왜! 지금 postgres 에 관심을 갖는지는 사실 supabase 라는 서비스에 있다. https://supabase.com/
요즘 구글 Firebase 대항마(?)로 뜨고 있는 서비스이다.(나온지 얼마되지 않은 듯 한데...)

 

Supabase | The Open Source Firebase Alternative

Build production-grade applications with a Postgres database, Authentication, instant APIs, Realtime, Functions, Storage and Vector embeddings. Start for free.

supabase.com

이 supabase 가 postgres 기반이라고 한다.
서비스지만, 오픈소스 기반이라 종속되지 않고, 서비스를 이용하다가, 본인서버로 마이그레이션 할수도 있는 듯 하다
물론 그정도로 서비스가 커져야 겠지만.

앱을 만들면서 supabase 를 쓰게 될 듯 하다.
돌아돌아 다시 만나게 된 postgres

이번에는 오래 쓰게 될지, 또 다시 찍먹하고 MySQL 으로 돌아갈지, 같이 쓸지는 모르겠다.

기억에 남기기 위해 포스팅 해본다.

postgres 로 할 수 있는 것들 - https://news.hada.io/topic?id=13231

 

PostgreSQL로 충분하다 | GeekNews

PostgreSQL을 각 분야에 사용하는 방법에 대한 링크를 정리한 페이지백그라운드잡, 메시지 큐, GIS, Audit Log, 접근 제어, 권한 관리, 검색, 시계열, 그래프 데이터, 외부 데이터, HTTP, API, 이벤트/복제/CD

news.hada.io

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

vultr 서버를 사용중이다. 새로운 미션이 있어 관련 사항을 정리한다.

새로운 미션은 서버 접속량(사용량)이 늘어날때 - 서버를 추가 생성하여 부하를 분산하고자 한다.

일단 간단한 구성으로 메인+서브 형태로 구성한다.
해당 메인서버는 톰캣+nginx+MySQL 서버가 동작하는 서버이다.
과부하시 서브로 톰캣 서버를 세팅해서 부하를 분산하고자 하는 미션이다.

1) vultr API 를 활성화 시킨다.

Account > API 메뉴에서 API key 를 활성화 시킨다.

2) vultr-cli 콘솔 관리툴을 설치한다.(MacOS 기준)

brew install vultr/vultr-cli/vultr-cli

3) API key 등록

vi $HOME/.vultr-cli.yaml

내용
api-key: {YOUR-API-KEY}

4) 새로운 인스턴스(서버) 생성하기

vultr-cli instance create --region="icn" --plan="vc2-1c-1gb" --os=167

최소 3가지 항목을 입력하여 생성한다.

1) 서버 생성 지역
vultr-cli regions list

...
icn	Seoul		KR		Asia
...

2) 서버 OS
vultr-cli os list

...
167	CentOS 7 x64				x64	centos
...
1743	Ubuntu 22.04 LTS x64			x64	ubuntu
...

3) 서버 사양
vultr-cli plans list |grep icn
ID				VCPU COUNT	RAM	DISK	DISK COUNT	BANDWIDTH GB	PRICE PER MONTH		TYPE	GPU VRAM	GPU TYPE
vc2-1c-1gb			1		1024	25	1		1024		5			vc2	0
...

여기까지가 기본 사용법이다.

추가로 VPC 연동 / 최초 설치 스크립트 설정 등 관련부분은 정리하도록 하겠다.

 

 

테스트 서버가 필요한 경우 약 100$ 가량의 혜택을 받을 수 있는 광고 링크입니다.

이미지 클릭하여 가입

위 링크를 통해 가입하면, 이런식으로 약 2주간 100$ 가량의 Credit 을 쓸 수 있습니다.

결제(Credit Card / Paypal 등) 설정을 꼭 해야하는지는 불확실 하지만, 2주후에 테스트 서버 삭제하고, 해지하면 될 듯 합니다.
(아마도 악용?해서 가입했다 해지했다 하는 경우가 있을 수 있으니, 카드 인증 등이 필요할 듯 함)
물론 서비스가 좋아서 그대로 계속 써도 되겠죠.

vultr 서비스 사용해보시려면 클릭. ( https://blog.1day1.org/655 )
(무료 100$ 사용 가능)

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

mysql 에서 mariadb 로 바꾼뒤 신규설치는 모두 mariadb 를 사용하고 있다.

내부 호스팅용으로 서버를 구축하는데, mariadb 를 설치하려 한다.

https://downloads.mariadb.org/mariadb/repositories/#mirror=kaist

를 사용.

기존에 하던 방식대로 하는데, 이번에는 뭔가 이상하다.

# apt-get install mariadb-server
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다      
상태 정보를 읽는 중입니다... 완료
몇몇 패키지를 설치할 수 없습니다. 요청한 상황이 불가능할 수도 있고,
불안정 배포판을 사용해서 일부 필요한 패키지를 아직 만들지 않았거나,
아직 Incoming에서 나오지 않은 경우일 수도 있습니다.
이 상황을 해결하는데 다음 정보가 도움이 될 수도 있습니다:

다음 패키지의 의존성이 맞지 않습니다:
 mariadb-server : 의존: mariadb-server-5.5 (= 5.5.42+maria-1~trusty) 하지만 %s 패키지를 설치하지 않을 것입니다
E: 문제를 바로잡을 수 없습니다. 망가진 고정 패키지가 있습니다.

이런식의 에러가 난다.

# apt-cache policy mariadb-server-5.5
mariadb-server-5.5:
  설치: (없음)
  후보: 5.5.42+maria-1~trusty
  버전 테이블:
     5.5.42+maria-1~trusty 0
        500 http://ftp.kaist.ac.kr/mariadb/repo/5.5/ubuntu/ trusty/main amd64 Packages
     5.5.41-1ubuntu0.14.04.1 0
        500 http://ftp.daumkakao.com/ubuntu/ trusty-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ trusty-security/universe amd64 Packages
     5.5.36-1 0
        500 http://ftp.daumkakao.com/ubuntu/ trusty/universe amd64 Packages

기본 패키지와 충돌이 나는 것일까?

그냥 5.5.36 으로 설치하면 괜찮을까?


기본 패키지로 깔아보니 잘 된다. 버전은 다음과 같다.

mysql  Ver 15.1 Distrib 5.5.41-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

mysql 접속이 안된다.

$ mysql -h {디비서버} -u root -p 

ERROR 1129 (00000): Host 'XXX' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

위와 비슷한 메시지가 나온다.

디비서버에서 다음 설정과 관련이 있다.

> select @@global.max_connect_errors;

+-----------------------------+

| @@global.max_connect_errors     |

+-----------------------------+

|                                   10 |

+-----------------------------+

1 row in set (0.02 sec)

max_connect_errors 라는 항목이다.

정확히 어떤 조건에서 카운트 되는지는 정확히 모르겠다.

저 값을 늘려주거나 초기화를 해주면 된다고 한다.

초기화는 다음명령.

> flush hosts;

접속이 된다.

추후 좀더 살펴봐야 겠다. 정확한 에러 조건이 뭔지 파악을 해야 겠다.



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

서버가 crash 되면서 mysql 데이터가 깨진듯 하다.

이런.

다음과 같은 메시지를 뿌리면서 실행이 안된다.

일단 force recovery 로 해봐야 겠다.

http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html

[mysqld]
innodb_force_recovery = 1

위 옵션을 넣고, 재실행해 본다.

잘 되야 할텐데...


1차실패 - 옵션값 1 을 주니 실패.

2차시도 - 옵션값을 6 으로 해봤다.

실행까지는 되는데, 로그에 다음과 같은 메시지가 계속 나온다.

140915 12:46:04  InnoDB: Waiting for the background threads to start
140915 12:46:05  InnoDB: Waiting for the background threads to start

찾아보니, 다음 옵션을 추가하라고 한다.

innodb_purge_threads=0


mysqlcheck --all-databases 를 해본다.

InnoDB: space id 74 did not exist in memory. Retrying an open.
140915 13:24:47  InnoDB: Warning: allocated tablespace 74, old maximum was 9
....
InnoDB: space id 83 did not exist in memory. Retrying an open

다음과 같은 메시지가 나온다.

점점 골치가 아파진다. 나에겐 InnoDB 는 사치인가?


이런 에러도 보인다.

 140915 20:04:43  InnoDB: Assertion failure in thread 140280661518080 in file fsp0fsp.c line 2113



이 방법으로 다시 해봐야 겠다.

http://www.percona.com/blog/2008/07/04/recovering-innodb-table-corruption/







반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,


mysql replication 이 중지되었다.

무엇때문일까.

show slave status 를 보니.

Last_IO_Error: Got a packet bigger than 'max_allowed_packet' bytes

이런 항목이 있다.


# 현재값 확인

mysql> show variables like 'max_allow%';

+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)

1048576 이면 1M 정도밖에 안되는 듯 하다.


# 다음 옵션으로 설정

set global net_buffer_length=1000000; 

set global max_allowed_packet=1000000000;


# my.cnf 에 설정

[mysqld]

max_allowed_packet = 10M

=> max_allowed_packet 설정 값만 처리하면 될까?


10M 정도면 충분할까?




일단 설정은 했는데. show slave status\G 로 보면 다음과 같은 메시지가 나온다.


Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.


다시 첫설정을 해야 겠다.(주기적으로 1일/1주? 초기 세팅이 필요할지도)


http://www.mysqlsystems.com/manual/refman51en/error-handling.html



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
테이블 구조를 볼때.
보통
mysql> desc {table_name}
이런식이다.

이것도 좋은데.
이게 더 보기 편하다.
mysql> show create table {table_name}\G

http://dev.mysql.com/doc/refman/5.0/en/show-create-table.html
반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
Centos 의 기본패키지에 proftpd 가 빠져있다.
proftpd + mysql 설정을 위해 rpmforge 를 저장소로 추가한다.

# rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
# yum install proftpd proftpd-mysql
여기까지 설치 끝.


가상계정 설정은 다음을 참조 : http://blog.1day1.org/363


# 추가
Centos 에서 설정후에 이상한 부분이 있었다.
가상계정으로 로그인이 되지 않는 것이다.
AuthPAMConfig                   proftpd
AuthOrder                      mod_auth_pam.c* mod_auth_unix.c
위와 같이 설정되어 있는데, AuthOrder 를 주석처리했다.( # AuthOrder  ... ...)
위 설정은 가상계정을 확인하지 않고 그냥 넘어간다.

AuthPAMConfig 부분은 설정되어 있어야 정상작동한다.
우분투쪽의 설정에는 없는데, 정확한 이유는 확인해야 겠다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

예전 qmail 을 설정할 때 가상계정으로 mysql 을 사용하였다.
vpopmail 에서 계정확인을 mysql 을 이용하는 방법이었다.

proftpd 도 비슷하게 가상계정으로 사용자 인증을 할 수 있다.
가상계정의 이점은 콘솔상에서 유저를 생성하지 않고, 웹에서 처리할 수 있다.
웹프로그램으로 DB 에 계정정보를 넣으면 된다.

어디를 설정해 줘야 하나?

/etc/proftpd/proftpd.conf 를 수정(추가)한다.

Include /etc/proftpd/sql.conf

그리고 sql.conf 를 생성한다.(이미있는 경우 수정)

<IfModule mod_sql.c>
SQLBackend      mysql

SQLAuthenticate users* groups*

SQLAuthTypes Crypt Plaintext

SQLConnectInfo {디비명}@localhost {유저명} {암호}

SQLUserInfo ftpusers userid passwd uid gid homedir shell
SQLGroupInfo ftpgroups groupname gid members

</IfModule>

그리고, 위의 디비명, 유저명, 암호에 맞게 가상계정정보를 넣을 디비를 설정한다.(자세한 사항 생략)

계정정보를 넣는 테이블 구조는 어떻게 되나?

마지막으로 계정정보를 넣을 테이블을 만들어준다.

CREATE TABLE ftpgroups (
        groupname varchar(16) NOT NULL default '',
        gid smallint(6) NOT NULL default '2001',
        members varchar(16) NOT NULL default '',
        KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';

CREATE TABLE ftpusers (
        id int(10) unsigned NOT NULL auto_increment,
        userid varchar(32) NOT NULL default '',
        passwd varchar(32) NOT NULL default '',
        uid smallint(6) NOT NULL default '2001',
        gid smallint(6) NOT NULL default '2001',
        homedir varchar(255) NOT NULL default '',
        shell varchar(16) NOT NULL default '/bin/false',
        count int(11) NOT NULL default '0',
        accessed datetime NOT NULL default '0000-00-00 00:00:00',
        modified datetime NOT NULL default '0000-00-00 00:00:00',
        PRIMARY KEY (id),
        UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';

가상계정용 공통 유저/그룹을 생성한다.

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

uid/gid 는 적절하게 바꿔서 넣어줘도 된다.
shell 의 경우  /bin/false 로 했는데, Centos 의 경우는 디폴트인 /sbin/nologin 으로 해주면 된다.

테스트로 계정을 만들고 접속을 시도해 본다.

INSERT INTO `ftpgroups` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');

INSERT INTO `ftpusers` (`id`, `userid`, `passwd`, `homedir`, `count`, `accessed`, `modified`) VALUES (1, 'testuser', 'testpass', '/var/FTPuser/testuser', 0, '', '');

파일질라 등으로 테스트 해본다.
접속해서 파일을 업로드 해보면, 설정한 uid/gid 로 파일이 생성된다.
웹상의 파일로 연동을 시키기 위해 아파치계정인  apache 나 www-data 등으로 uid/gid 를 설정해 주어도 될 것이다.

[추가]
기본 ftpuser / ftpgroup 은 고정인 것 같다. 아파치계정과 연동을 시킬려고 시도 해봤는데, 안되네.
proftpd 쪽에서 바꾸지 않고, 아파치쪽에서 바꿔야 겠다.(퍼미션 조정으로..)

[추가2] ubuntu 에서 sql / mysql mod 적용

apt-get install proftpd-mod-mysql

/etc/proftpd/modules.conf 에서 모듈 활성화

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

 

[추가3] Invalid shell: '/bin/false'

로그인시 위와 비슷한 메시지가 나오는 경우 /etc/shells 에 등록해준다.

# cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/false

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
기존에 qmail + vpopmail 을 cdb 방식으로 사용하다가 mysql 방식으로 바꿔서 설치해봤다.
특별한 차이는 없고, 계정정보를 mysql db 에 저장하여 사용한다.

그런데, 기존의 계정정보를 mysql 으로 옮기는 방법을 설명한다.
vpopmail 에 관련 명령이 있다. vconvert

vconvert 는 /etc/passwd 의 계정정보(기존 sendmail 방식이나, qmail + checkpasswd 방식) 를 옮길 수도 있고, cdb 방식 , mysql 방식등 서로간의 계정정보를 옮길 수 있다.

-e 는 /etc/passwd  에 해당하는 옵션이다.
-c 는 cdb 방식 , -m 은 mysql 방식(정확히는 sql)이다.

그래서 변환 방식은
vconvert -c -m  또는  vconvert -c -m {도메인명}
방식으로 변환하면 된다. ( FROM -c TO -m 의 순서라고 생각하면 된다.)

이때 변환시 vconvert 가 참조하는 파일은 /var/qmail/users/ 의 cdb 파일을 참조한다.
계정을 옮길때  기존의  ~vpopmail/domains 폴더와  /var/qmail/users 폴더를 백업해놓는다.
이 데이터를 기준으로 변환된다. 새서버 세팅후에 해당 디렉토리를 교체해준다.
위 명령으로 옮기면 된다. 이때 vpopmail.mysql 세팅이 되어 있어야 한다.
바로 mysql 에 연결해서 vpopmail 테이블에 계정정보를 저장하기 때문이다.


한가지 주의할 사항이 있다.
/var/qmail/users 를 옮겨올때,  vpopmail/vchkpw 의 UID/GID 가 동일하다면 상관없지만, 다르다면 바꿔줘야 한다.
+mydomain.com-:mydomain.com:108:107:/home/vpopmail/domains/mydomain.com:-::
108:107 부분을 새 시스템에 맞게 바꿔준다.
바꿔준후에 적용하는 방법은  /var/qmail/bin/qmail-newu  를 실행시켜주면 cdb 파일이 재 설정된다.


주의사항 하나더.
vconvert 하면  control 의 rcpthosts , virtualdomains 등의 설정도 자동갱신해주는 줄 알았는데.
수동으로 넣어줘야 한다. /var/qmail/control 도 같이 백업해 주는 것이 좋겠다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
지난번 qmail + vpopmail 은 cdb 를 이용하는 방법이었다.(http://blog.1day1.org/329)
즉, 사용자 계정정보를 txt 형태로 저장하는 것이었다.

사용자 계정정보를 mysql 을 이용한  디비에 저장하는 방법을 사용해보자.

기존 cdb 방식에서 " --with cdb " 를 빼고 SRPM 빌드를 하면된다.
rpmbuild --rebuild knetqmail-0.0.3.src.rpm

빌드전에 mysql-devel 패키지를 설치해준다.

mysql 이 /usr/local/mysql 에 설치가 되어 있지 않다면..
yum install mysql-devel
그리고, /usr/local/mysql/include , /usr/local/mysql/lib 를 각각  심볼릭 링크해준다. (64bit 환경)
ln -s /usr/include /usr/local/mysql/include
ln -s /usr/lib64 /usr/local/mysql/lib

빌드하고 설치 후에 mysql DB 생성 해준다.
mysql> create databases vpopmail ;
mysql>  GRANT  ALL PRIVILEGES ON vpopmail.* TO 'vpopmail'@'localhost'  IDENTIFIED BY '계정암호' WITH GRANT OPTION ;
mysql> flush privileges;
vpopmail 이 mysql 계정에 접근할 수 있도록 설정을 바꿔준다.
/home/vpopmai/etc/vpopmail.mysql 을 편집한다.
아래와 같은 라인을 DB 명및 계정/암호 등을 맞게 수정한다.
# host|port|user|password|database
#
localhost|0|root|secret|vpopmail
기본값이 root 계정을 이용하는 것인데, vpopmail 계정을 생성해서 해당 계정으로 바꿔주어도 된다.
계정및 DB 는 자신이 원하는 값으로 바꾸면 된다.
localhost|0|vpopmail|계정암호|vpopmail


vadddomain 등 명령을 내렸을때 다음과 같은 에러가 난다면...
Error - no authentication database connection. Initial open
vpopmail 에서 mysql 으로 연결이 정상적으로 이뤄지지 않는다.
64bit 환경에서 빌드한 경우 위와 같은 에러가 날 수 있다.
strace vadddomain mydomain.com >& debug.txt  
등으로 체크해보면...

위와 비슷한 메세지를 볼 수 있다.(처음 부분)
open("/usr/local/mysql/lib/mysql/tls/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls/x86_64", 0x7fff9dba66c0) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/tls/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls", 0x7fff9dba66c0) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/x86_64", 0x7fff9dba66c0) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/libmysqlclient.so.15", O_RDONLY) = 3
진한 부분이 mysql 라이브러리를 불러오는 부분인데, 좀 이상하다.
윗부분에서 x86_64 에서 불러오지 못한다.  해당 위치를 확인해보면.(/usr/local/mysql/lib/mysql)
-rw-r--r-- 1 root root  21408 Sep 22  2008 libdbug.a
-rw-r--r-- 1 root root  73040 Sep 22  2008 libheap.a
-rw-r--r-- 1 root root 465624 Sep 22  2008 libmyisam.a
-rw-r--r-- 1 root root  41978 Sep 22  2008 libmyisammrg.a
-rw-r--r-- 1 root root 872012 Sep 22  2008 libmysqlclient.a
-rwxr-xr-x 1 root root    879 Sep 22  2008 libmysqlclient.la
lrwxrwxrwx 1 root root     24 Sep 22  2008 libmysqlclient.so -> libmysqlclient.so.15.0.0
lrwxrwxrwx 1 root root     24 Sep 22  2008 libmysqlclient.so.15 -> libmysqlclient.so.15.0.0
-rwxr-xr-x 1 root root 640162 Sep 22  2008 libmysqlclient.so.15.0.0
-rw-r--r-- 1 root root 493164 Sep 22  2008 libmystrings.a
-rw-r--r-- 1 root root 448720 Sep 22  2008 libmysys.a
-rw-r--r-- 1 root root  11890 Sep 22  2008 libvio.a
이런식이다. x86_64 같은 경로는 없다.(위의 라이브러리는 rpm 설치시 복사되는 듯 하다. 혹은 rpmbuild 시)
즉, 64bit 환경에서는 x86_64 에서 불러와야 하는데, 아무도 32bit 라이브러리를 불러오기 때문인 듯 싶다.

/usr/local/mysql/lib 를 libx 로 이름을 바꿔보고 다시 테스트 해봤다.
open("/usr/local/mysql/lib/mysql/tls/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls/x86_64", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/tls/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/x86_64", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=84051, ...}) = 0
mmap(NULL, 84051, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b05b2aa7000
close(3)                                = 0
open("/usr/lib64/mysql/libmysqlclient.so.15", O_RDONLY) = 3
역시 마지막줄의  /usr/lilb64/mysql 에서 불러오는 것을 볼 수 있다.
이렇게 하면 정상적으로 에러없이 계정이 생성된다.

또는  /usr/local/mysql/lib/mysql/  에  심볼릭 링크를 걸어줘도 된다.
ln -s /usr/lib64/mysql  x86_64
아무튼 /usr/local/mysql/lib/mysql/libmysqlclient.so.15 을 불러오면 64bit 에서는 정상실행(연결)되지 않는다.

ps. 일반적으로  /usr/local/mysql 에는 아무것도 없을 것이다.
 (mysql 을 소스컴파일 해서 해당 위치를 지정하지 않는이상)
 가상머신에 깔려있는 VM 이미지가  mysql 이 설치되어 있는 것 같다.



근데 궁금한 것이 있다.
과연 vpopmail 을 mysql 연결이 어떤 이점이 있을까?
아무래도 파일보다는 DB 가 관리상 편하긴 할 것이다.
그런데, 메일의 잦은 접속때문에 DB connect 문제가 생기지 않을까?
계정확인을 위한 select 가 거의 대부분을 차지 하기 때문에 큰 문제가 아닐까?
메일서버가 DB서버도 겸하고 있을때는 한쪽의 부하가 다른 쪽에 영향을 주지 않을까?
아니면 vpopmail 의 컨넥션은 한번 이루어지고 계속 연결상태를 유지하나?(소스를 들여다 봐야 겠다)


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
언제부터 AppArmor 가 사용되었지? (ubuntu 7.04 버전인듯)
https://help.ubuntu.com/community/AppArmor

기본 mysqld 의 설정이  /var/lib/mysql 을 기준으로 하는데.
DB 저장소 위치를 바꾸어서 사용하고 있었다.

8.04 버전부터, mysqld 가 좀 까다로운 설정을 하나보다. (enforcing)
/var/lib/mysql 이외의 위치를 사용하면 프로파일에 넣어줘야 한다.

/etc/apparmor.d/usr.sbin.mysqld  를 열어서.
/새로운위치/mysql r ,
/새로운위치/mysql/** rwk ,
처럼 추가를 해주어야 한다.

보안관련 설정이니, 나름 규칙을 지켜줘야 겠다.

/var/log 의 kern.log , messages 등에 다음과 같은 메시지가 남는다.
Apr 23 11:05:19 yourhost kernel: [47939.567241] audit(1240416319.933:116023): type=1502 operation="inode_permission" requested_mask="r::" denied_mask="r::" name="/database/mysql/db_name/" pid=9475 profile="/usr/sbin/mysqld" namespace="default"
정상적인 메시지는 다음과 같다.
Apr 23 11:07:01 yourhost kernel: [48040.807284] audit(1240416421.333:116024): type=1502 operation="capable" name="sys_resource" pid=9652 profile="/usr/sbin/mysqld" namespace="default"

ps. 위 문제는 7.10(Gutsy) 에서 8.04(Hardy) 로 버전업그레이드 하다가 mysql 이 실행되지 않아 살펴보다가 알게되었다.
반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

오라클이 썬을 .

생각할일 2009. 4. 21. 12:04
썬마이크로시스템즈가 오라클의 품으로 갔다.
조금 충격!

썬의 자바, 솔라리스, Mysql 이 오픈소스 진영(?)에서는 꽤 큰 위치를 차지하고 있는데, 이 인수소식이 앞으로 어떻게 될지 생각을 안 할수가 없다.
오라클은 현재의 상태를 유지할까? 방향을 다르게 바꿀까?

아! 이참에 자바자체를 오픈소스화 시켜주면 바로 '오라클 찬양' 모드로...
자바는 아파치프로젝트의 핵심이라고 볼 수 있다. 자바자체가 오픈소스화 되면 정말 대단한 이슈가 될 것이다.(그러나 오라클의 마음을 어찌알랴)
어찌될지...

가장 영향을 많이 받을 것 같은 Mysql . 어찌보면 서로의 영역이 다른 측면이 있으니, 별다른 영향이 없을지도 모르겠다.
오히려 Mysql 입장에서는 든든한 벤더(?)가 생겼으니, 영업상의 이익도 클 것 같다.
오라클 입장에서 Mysql 담당자를 두어야 겠지만, 기존 오라클DB 와 병행할 수 있을 듯 하다.
분명히 서로의 영역을 침범하지 않고 선을 그어 분리할 것 같다.

오라클이 운용되는 시스템(OS)이 없었다. 그래서 알게 모르게 리눅스 플랫폼에 공을 들이고 있었던 것으로 알고 있다. 썬의 솔라리스를 얻게 됨으로서 든든한 플랫폼을 얻게 된 셈이다. 그러고 보니 리눅스 플랫폼은 어떻게 될까? 레드햇과의 관계는?

과연 오라클은 어떤 예언을 할까?

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
mysql 에서 편한 것 중 하나.
auto_increment  다른 DBMS 에는 없다고 본것 같은데,(있을 지도. =3=3=3)

암튼 auto_increment 값을 조정해야 할 필요가 있을때.

alter table 명령을 사용한다.
alter table {테이블명}  auto_increment = 0
처럼. (값은 현재값이다. 다음 값 부터 +1 되서 입력된다, 즉 1부터 시작)
(근데, 중복된 값은 어떻게 되지? pk 가 아니면 그냥 등록되겠지.)

2009년 이 밝았을 뿐이고.
auto_increment 값은 다시 설정할 뿐이고.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
http://akrabat.com/zend-framework-tutorial 의 예제.
(설명은 PDF 로 되어 있다. 예제도 다운받아 사용할 수 있다)

zend 공식사이트의 예제는 sqlite 를 사용하는데, 이번 예제는 mysql 을 사용한다.

application/config.ini  파일을 자신의 mysql 계정에 맞게 바꾼다.
기본 데이터(dbschema.sql) 를 넣으면 준비완료.
(데이터를 금방넣기 위해 따로 ini_script.bat 를 만들었다)
간단한 배치파일. 내용은 

C:\develop\xampp\mysql\bin\mysql test -u root < dbschema.sql
pause

-u root , mysql 의 위치는 자신의 설정에 맞게 바꾸어 준다.
-p 옵션이 필요하면 같이 넣는다.(DB 계정에 암호가 있는 경우)


내용은 zend 의 quickstart 와 같이 평이한 수준.
세부적인 것은 좀더 찾아봐야 겠다.
흐름에 대한 감은 대충 잡힌듯.(그럼 어플 만들어봐!! ^^)



다음에는 뭐하지?
아마도, 로그인 부분 하고, Zend_ACL 처리하는 부분. (따로 혹은 같이)

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,