반응형

출처 : https://mariadb.com/kb/ko/mariadb-mysql/#mariadb와-mysql-proxy의-비호환성

MariaDB는 MySQL을 즉시 교체할 수 있는 바이너리이다

모든 실용적인 목적에서 MariaDB는 동일한 MySQL 버전을 즉시 교체할 수 있다. (예를 들어 MySQL 5.1은 MariaDB 5.1MariaDB 5.2MariaDB 5.3과 호환되며, MySQL 5.5은 MariaDB 5.5와 호환된다.) 이는 다음과 같은 것을 의미한다.

  • 데이터와 테이블 정의 파일 (.frm) 파일들이 호환된다
  • 모든 클라이언트 API, 프로토콜 및 구조가 동일하다
  • 모든 파일이름, 바이너리, 경로, 포트, 소켓이 모두 동일해야 한다
  • 모든 MySQL 커넥터(PHP, Perl, Python, Java, .NET, MyODBC, Ruby, MySQL C connector 등)는 아무런 변화없이 MySQL에서 잘 작동한다
  • 몇몇 PHP5에서의 설치 이슈가 존재한다. (오래된 PHP 클라이언트가 라이브러리 호환성을 검사하는 데서 발생하는 버그이다)
  • 클라이언트 공유 라이브러리는 MySQL 클라이언트 라이브러리와 호환된다.

이는 대부분의 경우에서 MySQL을 언인스톨한 뒤, MariaDB를 설치해도 잘 작동한다는 것을 의미한다. (동일한 메인 버전에서는 데이터 파일을 변환할 필요없다.)

우리는 월간 주기로 MySQL 코드를 병합하여 호환성을 보장하며 오라클이 추가하는 기능 및 버그 수정도 MariaDB에 포함된다.

우리는 업그레이드 스크립트에 많은 작업을 완료하여 MySQL 5.0에서 MySQL 5.1로 업그레이드하는 것보다 MySQL 5.0에서 MariaDB 5.1로 업그레이드하는 것이 더 쉽도록 하였다.

하지만, MariaDB는 MySQL에 없는 새로운 옵션, 확장, 저장 엔진, 버그 수정도 많이 포함하고 있다. 서로 다른 MariaDB 버전별 기능은 MariaDB 릴리즈별 차이 에서 확인할 수 있다.

MariaDB 5.1과 MySQL 5.1의 비호환성

일부 경우 MariaDB는 MySQL보다 더 많은 정보를 보여주기 위하여 비호환성을 허용하고 있다.

다음 목록은 MySQL 5.1 대신 MariaDB 5.1을 사용하는 경우에 알려진 모든 사용자 레벨의 비호환성 목록이다.

  • 설치 패키지 이름은 MySQL 대신 MariaDB로 시작한다.
  • Timings may be different as MariaDB is in many cases faster than MySQL.
  • MariaDB의 mysqld는 my.cnf에서 [mariadb] 섹션을 읽는다.
  • You can't use a binary only storage engine library with MariaDB if it's not compiled for exactly the same MariaDB version. (This is because the server internal structure THD is different between MySQL and MariaDB. This is common also between different MySQL versions). This should not be a problem as most people don't load new storage engines and MariaDB comes with more storage engines than MySQL.
  • CHECKSUM TABLE은 다른 결과를 출력할 수 있다. MariaDB는 NULL을 무시하지 않지만, MySQL 5.1은 NULL을 무시하기 때문에 이러한 차이가 발생한다. (향후 MySQL은 MariaDB가 계산하는 방식대로 체크섬을 계산해야 할 것이다) 옛날 방식의 체크섬을 얻길 원한다면 --old 옵션으로 MariaDB를 실행하면 된다. 하지만, MariaDB의 MyISAM과 Aria 저장 에닌은 내부적으로 새로운 체크섬을 이용한다. 따라서 --old 옵션을 이용하는 경우 CHECKSUM 명령은 매 레코드마다 체크섬을 계산하기 때문에 속도가 느릴 것이다.
  • 슬로우 쿼리 로그는 쿼리에 대한 더 많은 정보를 제공하는데, 이는 슬로우 쿼리 로그를 직접 파싱하는 경우 문제가 될 수 있다.
  • MariaDB는 내부에서 사용하는 임시 테이블을 기본으로 Aria 저장 엔진을 사용하기 때문에 MySQL보다 메모리를 좀 더 사용한다. MariaDB가 최소한의 메모리만 더 사용하길 원하는 경우 aria_pagecache_buffer_size 를 1M 로 설정하면 된다. (기본 값은 128M).
  • 만약 새로운 명령 옵션MariaDB의 새로운 기능 혹은 새로운 저장 엔진, 을 사용하는 경우 더 이상 MySQL과 MariaDB 사이를 오갈 수 없다.

MariaDB 5.2와 MySQL 5.1의 비호환성

Incompatibilities between MariaDB 5.2 and MySQL 5.1

MariaDB 5.1과 MySQL 5.1의 비호환성과 동일하며 1가지가 추가된다.

SQL_MODE에 새로운 값이 추가되었다. 새롭게 추가된 값은 IGNORE_BAD_TABLE_OPTIONS이며, 이 값이 설정되지 않은 경우, 현재 사용 중인 저장 엔진에서 지원되지 않는 테이블, 필드, 인덱스의 속성을 사용하는 경우 에러를 발생한다. 이런 변화로 인해 에러 로그에는 다음과 같은 경고 메시지가 발생할 수 있다. "mysql 데이터베이스에 잘못 정의된 테이블이 있음. mysql_update를 이용하려 수정하시오"

모든 실용적인 목적에서 MySQL 5.2는 MariaDB 5.1과 MySQL 5.1을 즉시 대체 가능하다.

MariaDB 5.3, MySQL 5.1, MariaDB 5.2의 비호환성

  • 잘못된 변환에 관련된 일부 에러 메시지가 MariaDB에서 좀 더 자세히 제공된다.
  • MariaDB에 특화된 오류 번호는 1900번부터 시작하여 MySQL 오류 번호와 충돌되지 않는다.
  • MySQL은 일부 문맥에서 datetime과 time에서 마이크로초를 손실했지만, MariaDB는 모든 문맥에서 마이크로초가 잘 작동한다.
  • UNIX_TIMESTAMP (상수 날짜 문자열)은 MariaDB에서는 마이크로초 단위까지 표현이 가능히지만 MySQL은 그렇지 못하다. 이는 UNIX_TIMESTAMP()를 파티션 함수로 사용하는 경우 문제가 될 수 있는데, FLOOR(UNIX_TIMESTAMP(..)) 를 이용하거나 날짜 문자열을 숫자형 (예를 들어 20080101000000 형식)으로 바꿔서 해결할 수 있다.
  • MariaDB는 date, datetime, timestamp 값에 대해 더 엄격한 검사 수행한다. 예를 들어 UNIX_TIMESTAMP('x') 는 0이 아닌 NULL을 반환한다.
  • --maria- 시작 옵션은 제거되었다. 대신에 --aria- prefix를 사용해야 한다. (MySQL 5.2는 --maria--와 --aria- 모두 지원함)
  • SHOW PROCESSLIST는 Progress라는 추가적인 컬럼이 존재하며 일부 명령에 대해 진행 상황을 보여준다. 이 기능은mysqld 시작 시 --old 옵션을 이용하여 끌 수 있다.
  • INFORMATION_SCHEMA.PROCESSLIST는 진행 보고를 위해 다음과 같은 3개의 추가적인 컬럼을 출력한다: STAGEMAX_STAGE, and PROGRESS.
  • /*M! 혹은 <<code>>/*!#<</code>로 시작하는 긴 주석은 주석이 아니라 실제 실행이 된다.
  • max_user_connections=0 는 연결 수를 제한 두지 않는 것을 의미하는데, mysqld 시작 시 이 옵션을 사용하는 경우 mysqld가 실행 중인 경우는 이 전역 변수를 수정할 수 없다. <<code>>max_user_connections=s<</code>로 mysqld가 시작된 경우 연결 개수를 위한 구조체를 할당하지 않기 때문이다. mysqld 실행 중에 이 값을 바꾸고 싶다면 0이 아닌 큰 값을 지정하는 것이 좋다.
  • max_user_connections를 -1로 설정하여 (전역 변수인 GRANT 옵션도 동시에) 사용자가 서버에 접속하는 것을 중지시킬 수 있다. 전역 변수 max_user_connections는 SUPER 권한을 가진 사용자에게는 영향을 미치지 않는다.
  • |IGNORE 지시자는 모든 오류를 무시하지 않는다 (예:FATAL 오류). 무시를 해도 안전한 오류만 무시한다.

MariaDB 5.3과 MySQL 5.3의 비호환성

XtraDB

XtraDB를 제공하는 Percona는 5.5 코드 기반에게 초기 기능의 모든 것을 제공하지 않았따. 따라서 MariaDB 5.5 또한 그 기능을 제공하지 못한다.

5.5에 없는 XtraDB 옵션들

다음의 옵션들은 XtraDB 5.5에서 지원되지 않는다. 만약 당신이 my.cnf에서 아래의 옵션을 사용 중이라면 5.5로 업그레이드 전에 제거해야 한다.

  • innodb_adaptive_checkpoint ; Use innodb_adaptive_flushing_method instead.
  • innodb_auto_lru_dump ;Use innodb_buffer_pool_restore_at_startup instead.
  • innodb_blocking_lru_restore ; Use innodb_blocking_buffer_pool_restore instead.
  • innodb_enable_unsafe_group_commit
  • innodb_expand_import ; Use innodb_import_table_from_xtrabackup instead.
  • innodb_extra_rsegments ; Use innodb_rollback_segment instead.
  • innodb_extra_undoslots
  • innodb_fast_recovery
  • innodb_flush_log_at_trx_commit_session
  • innodb_overwrite_relay_log_info
  • innodb_pass_corrupt_table ; Use innodb_corrupt_table_action instead.
  • innodb_use_purge_thread
  • xtradb_enhancements

기본 값이 변경된 XtraDB의 옵션

XtraDB options that has changed default value

옵션기존 값새로운 값
innodb_adaptive_checkpointTRUE?FALSE
innodb_change_bufferinginserts?all
innodb_flush_neighbor_pages1?area

XtraDB 5.5의 새로운 옵션

다음의 옵션들은 XtraDB / InnoDB 5.5에 새롭게 추가된 옵션이다. (Listed here just to have all XtraDB information in the same place)

  • innodb_adaptive_flushing_method
  • innodb_adaptive_hash_index_partitions
  • innodb_blocking_buffer_pool_restore
  • innodb_buffer_pool_instances
  • innodb_buffer_pool_restore_at_startup
  • innodb_change_buffering_debug
  • innodb_corrupt_table_action
  • innodb_flush_checkpoint_debug
  • innodb_force_load_corrupted
  • innodb_import_table_from_xtrabackup
  • innodb_large_prefix
  • innodb_purge_batch_size
  • innodb_purge_threads
  • innodb_recovery_update_relay_log
  • innodb_rollback_segments
  • innodb_sys_columns
  • innodb_sys_fields
  • innodb_sys_foreign
  • innodb_sys_foreign_cols
  • innodb_sys_tablestats
  • innodb_use_global_flush_log_at_trx_commit
  • innodb_use_native_aio

5.5로 업그레이를 위한 Percona의 가이드 도 참조하는 것이 좋다.

MariaDB 5.5MariaDB 5.3과 MySQL 5.5의 비호환성

  • 중복 키 오류에서 INSERT IGNORE 는 경고 메시지를 출력한다.

MariaDB 10.0과 MySQL 5.6의 비호환성

  • MySQL의 모든 바이너리 (mysqldmyisamchk 등)은 예를 들어 --big-tables 대신 --big-table 옵션을 사용하는 경우 경고 메시지를 출력하는 반면, MariaDB 바이너리는 다른 대부분의 유닉스 명령들과 동일한 방식으로 작동하며, 유일한 prefix로 사용될 경우 경고를 출력하지 않는다.

지원되지 않는 설정

my.cnf에서 다음의 옵션을 사용 중인 경우 해당 변수를 제거해야 한다. 이는 MySQL 5.1 및 그 이후 버전에서도 마찬가지다.

  • skip-bdb

MySQL RPM 교체

만약 MySQL RPM을 제거하고 MariaDB를 설치하고자 하는 경우 MySQL RPM은 /etc/my.cnf를 /etc/my.cnf.rpmsave로 이름을 변경한다.

MariaDB를 설치한 뒤에는 다음과 같이 MySQL RPM 당시의 my.cnf를 복원할 수 있다.

mv -vi /etc/my.cnf.rpmsave /etc/my.cnf

MariaDB와 MySQL-Proxy의 비호환성

MySQL 클라이언트 API는 MySQL-Proxy를 통하여 MariaDB에 연결할 수 있다. 그러나 MariaDB 클라이언트 API는 "진행 보고(progress reporting)"을 MySQL-Proxy가 지원하지 않는다는 정보를 받게 된다. 완벽한 호환성을 위해서는 "진행 보고"를 클라이언트 측이나 서버 측에서 중지시키면 된다.


반응형
반응형

MySQL의 버전별 기능(Features) 변경 이력



출처 : http://intomysql.blogspot.kr/2011/01/mysql-features.html


VersionFeatures
추가변경삭제
5.5
  • MyISAM 대신 InnoDB가 MySQL의 기본 스토리지 엔진으로 채택
  • 5.4.2
  • Plugin버전의 InnoDB가 Builtin 버전으로 다시 적용
  • 5.1.38
  • InnoDB Plugin
  • 5.1.24
    (Enterprise version)

  • "SHOW PROFILE"
  • 5.1.12
  • "general_log" 파라미터

  • General query log를 동적으로 변경 가능
  • 5.1.8
  • "Mixed" 복제 모드
  • 5.1.6
  • Partition pruning 기능
  • 5.1.5
  • EXPLAIN PARTITIONS(파티션 테이블의 실행 계획) 지원
  • "RBR"(Row Based Replication) 복제 모드
  • 5.1
  • Plugin API 도입
  • Plugin버전의 InnoDB 릴리즈 (InnoDB 의 많은 성능 개선과 변화가 있음)

  • BDB 스토리지 엔진
  • 5.0.32
    (Community version)

  • "SHOW PROFILES"
  • 5.0.7
  • LIMIT의 파라미터도 PreparedStatement에서 변수화 가능
  • 5.0.5
  • BIT 데이터 타입이 MEMORY, InnoDB, BDB, NDBCLUSTER 스토리지 엔진에 구현됨
  • 5.0.3
  • FEDERATED 스토리지 엔진
  • 신규 함수 추가
    STDDEV_POP()
    STDDEV_SAMP()
    VAR_POP()
    VAR_SAMP()

  • BIT 데이터 타입이 TINYINT와 호환성 없어짐


  • NUMERIC와 DECIMAL 타입의 저장 방식이 String에서 Binary로 변경
  • 5.0.2
  • TRIGGER 도입

  • HAVING 조건에 SELECT컬럼, GROUP-BY컬럼, OUTER-서브쿼리의 값 사용 가능(ANSI 표준)
  • 5.0.1
  • VIEW 도입

  • HAVING 조건에 SELECT컬럼, GROUP-BY컬럼, OUTER-서브쿼리의 값 사용 가능(ANSI 표준)
  • 5.0
  • StoredRoutine (Procedure,Function) 도입
  • CURSOR 도입
  • Archive 스토리지 엔진
  • INFORMATION_SCHEMA 딕셔너리 데이터베이스 도입 (ANSI 표준)

  • ISAM 스토리지 엔진 제거
  • 4.1.11
  • Blackhole 스토리지 엔진
  • 4.1.4
  • CVS 스토리지 엔진
  • 4.1
  • SubQuery 도입
  • WHOW WARNINGS
  • CREATE TABLE ... LIKE ...
  • GROUP_CONCAT() 구현
  • 유니코드(UTF8, UCS2) 지원
  • GIS 관련 기능(Spatial extension) 지원
  • ALTER DATABASE 명령 지원
  • DUAL 테이블 내부 지원(타 DBMS와의 호환성 유지)
    "SELECT 1" 명령과 "SELECT 1 FROM DUAL" 명령은 동일
  • Memory 스토리지 엔진에서 B-Tree 허용
  • EXPLAIN EXTENDED 구현

  • Column 코멘트 구현(CREATE TABLE...)
  • PASSWORD() 함수의 알고리즘 업그레이드
    기존 알고리즘은 OLD_PASSWORD()로 변경됨
  • CHAR, VARCHAR 타입의 길이가 바이트수에서 문자수로 변경됨
  • 파생 테이블(Derived tables) 내에서 UNION 사용 가능
  • 4.0.18
  • "TYPE" 키워드가 "ENGINE" 키워드로 변경(CREATE TABLE...)
  • 4.0.14
  • InnoDB의 BLOB와 TEXT 타입에 대한 인덱스 지원
  • 4.0.4
  • JOIN DELETE (Multiple Delete) 도입
  • JOIN UPDATE (Multiple Update) 도입
  • 4.0.2
  • Memory 스토리지 엔진에서 NULLABLE 컬럼의 인덱스 지원

  • VARCHAR 컬럼의 길이가 1~255에서 0~255로 변경됨
  • 4.0.1
  • Query Cache 도입
  • 4.0
  • UNION 집합 연산 도입
  • SQL_CALC_FOUND_ROWS 힌트와 FOUND_ROWS() 함수 구현

  • UPDATE와 DELETE 구문에 ORDER BY 사용 허용
  • 3.23
  • EXPLAIN(쿼리 실행계획) 구현
  • 전문 검색(Fulltext search) 도입
  • JOIN(SELECT만) 도입
  • NULL-SAFE 연산자(<=>) 도입

  • 길이가 0인 CHAR 컬럼 허용

  • 반응형
    반응형

    PHP 사이트 수정 중 MySQL between 을 사용하려면,

    현재 날짜에 +1 로 해 줘야지, 금일 데이터 까지 조회가 된다.


    하지만 이 부분이 개발이 되어 있지 않아서 개발 하다 보니, 기존에 string 으로 달력에서 받은 것에

    +1 만 하였다...


    역시 아무 생각 없이 개발한 것에는 버그가 생기는 법...


    오늘은 31일이다...여기 + 1을 하니...32...!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


    어휴.........


    아래와 같이 수정함으로써 해결...


    fDate 는 참고로 "20160531"


        $fTimeYear = substr($fDate,0,4);
        $fTimeMon = substr($fDate,4,2);
        $fTimeDay = substr($fDate,6,2);

        $RFDate = "$fTimeYear-$fTimeMon-$fTimeDay";
    RFDate 는 2016-05-31

        echo date("Y-m-d", strtotime("+1 days",strtotime($RFDate)));
        $RFDate = date("Y-m-d", strtotime("+1 days",strtotime($RFDate)));

    이렇게 하면 RFDate의 경우 타입이 date 가 되며, +1 을 했기 때문에
    결과는 아래와 같아

    2016-06-01


    그래....내 잘 못이지..ㅠ


    [참고]  http://jhrun.tistory.com/137

    반응형
    반응형


    오랜만에 포스팅한다.


    파이썬 스크립트 개발에 틈틈히 php 수정등...

    마리아 DB를 공부도 해야된다는 생각에 정신이 없다..

    하지만 이게 잘 하고 있는건지...라는 의문의 1패...


    잡설은 그만하고..


    Script로 백업 도중 (스크립트 뽑아내는 명령어 중) Lock Tables 라는 에러가 발생하였다.


    그동안 문제없이 잘 돌아가는 스크립트가 왜 지금 에러가 발생했을까 라는 의문도 들고..

    중간에 작업한 적이 없는 것 같은데 ...


    하지만 컴퓨터는 거짓말을 하지 않기에... 일단은 백업이 우선이라 해결을 진행해 보았다.



    MyISAM 이기에 배치 작업이 있나 확인을 해 보았다. (조회 또한 table lock 을 잡기에....이건 순수히 나만의 생각)


    show processlist;


    하지만 확인 결과 어떠한 작업도 확인이 되지 않았다.


    그렇다면 희박하지만 권한을 부여해 보았다. (권한을 revoke 한 적은 전혀 없기에...)


    mysql> GRANT SELECT,LOCK TABLES ON DBNAME.* TO 'username'@'localhost';


    이 후 다시 진행해 보았다.


    $mysqldump -d -u유저 -p --quick > /파일명.sql 


    말도 안되....정상적으로 진행이 되었다.


    하아....누가??아니면 무슨 이유로...??

    원인을 찾아 봐야겠다.

    반응형
    반응형

    [출처] http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10302&docId=63819461&qb=cmF3IGRldmljZQ==&enc=utf8§ion=kin&rank=3&sort=0&spq=0&pid=fIe7Og331yosssEVpKlssv--169396&sid=S6RJEjE8pEsAACHkFto


    흔히 유닉스에서 스토리지 디바이스를 억세스하는 방법에 따라 


    블록디바이스(/dev/dsk) 와 로(RAW)디바이스(/dev/rdsk) 로 구분을 합니다.


    단어 그대로 이해를 한다면 블록디바이스에 블록은 파일시스템의 블록을 말하는 겁니다.


    즉 로디바이스위에 파일시스템이 얹어 있다고 보면 됩니다. 


    OS 는 어플리케이션의 IO 요구에 따라 파일 시스템에서 읽어 오느냐 ,


    로 디바이스(파일시스템 보다는 더 하위레벨)에서 읽어 오느냐가 억세스 방법에 의해서


    차이가 있습니다.


    로 디바이스는 파일시스템이 없기 때문에 당현히 파일, 디렉토리, 억세스컨트롤 등을


    어플리케이션에서 직접 관리 해야 합니다. 


    로 디바이스를 데이타베이스에서 사용할 때 데이타 베이스는 자체적으로 블록과 익스텐트 등의


    스토리지 관리 개념을 가지고 있기 때문에 OS레벨에서의 물리적인 데이타 파일 관리만 하면 됩니다.


    (데이타 베이스에서 로디바이스를 사용하더라도 물리적인 디바이스(디스크)에 데이타 파일형태로 위치해야


    하기 때문에 볼륨매니저 같은 가상 스토리지 개념이 필요합니다.)


    일반적인 디스크는 I/O 다음과 같은 패스를 가집니다.


    Application<->Library Buffer<->Operation System Cache<->File System/Volume Manager<->Device


    그런데 로디바이스의 패스는 다음과 같습니다.


    Application<->Device



    흔히 DBMS 를 컨피그할때 데이타 파일의 위치를 놓고 RAW 와 파일시스템 비교를 많이 하게 됩니다.


    나름대로 장단점이 있어 쉽게 판단 할수는 없지만 파일관리측면에선 파일시스템이 성능면에서는 로 디바이스가 낫습니다.


    DBMS 시스템에서 파일시스템을 사용 할 경우 DBMS 의 가 자체 IO버퍼를 설정 하기 때문에 


    OS 의 파일시스템 캐시가 필요 없습니다. 이런 파일시스템의 단점을 보완하고자 솔라리스의 Direct I/O , 베리타스 파일시스템등


    이 나오게 되었습니다. 이와 같은 더블 버퍼링 를 막음으로써 OS는 메모리 파일시스템 캐싱을 위한 메모리 매니지먼트가 필요없어지고,


    DBMS 에서만 버퍼링을 하므로 메모리를 덜 소모하게 됩니다. 주소 변환을 할 필요가 없으니 캐시의 억세스 속도도 빨라지겠죠.


    RAW의 장점을 하나더 말씀드리면 KAIO(kernal async IO) 입니다.


    위의 IO패스에서 보듯이 로디바이스는 IO요구가 발생될때 유저라이브러리를 사용 하지 않고 커널 레벨에서 IO 가 이루어 지므로 


    명령이 단순해 져서 결과적으론 CPU를 덜 사용하게 됩니다.


    --------------------------------------------------------------------------------------------------


    [출처] http://boeok.tistory.com/entry/File-System-%EA%B3%BC-Raw-Device%EC%9D%98-%EC%B0%A8%EC%9D%B4


    File system                                    

     

    - File system이란?

     

    파일시스템(filesystem)이란 운영체제가 파티션이나 디스크에 파일들이 연속되게 하기 위해 사용하는 방법이고 자료구조이다. 즉, 파일들이 디스크상에서 구성되는 방식이다. 파일시스템이라는 말은 파일을 저장하는데 사용되는 파티션이나 디스크를 가리킬 때나, 파일 시스템의 형식을 가리킬 때 사용되기도 한다. file system은 mount란 단계를 거쳐서 특정 block device를 사용할 수 있게 해주는 것입니다.

     

    - File system의 구조

     

    partition

    partition

    partition

    Disk drive

     

     

    Boot block

    Super block

    Inode list

    Data block

    File system

     

     boot block : file system의 처음에 위치. operation system이 초기화되거나 부팅될 때, 필요한 bootstrap 코드를 포함하고 있다. 시스템이 부팅되기 위해서는 단지 하나의 부트 블록이 필요하며, 모든 시스템에는 부트 블록이 있어야 한다.

     super block : filesystem에 대한 모든 중요한 정보를 저장하는 곳이다. file system이 얼마나 큰지, 얼마나 많은 파일을 저장할 수 있는지, 자유 저장공간을 어디에서 찾아야 하는지 등의 다양한 정보를 포함하고 있다. 여기에 들어가는 정보는 파일시스템에 의존한다.

     inode list : 파일 시스템이라는 것은 inode(index node)라는 형태의 정보로 저장된다. inode는 항목(파일, 디렉토리, 심볼릭 링크) 자체의 이름을 제외하고는 다른 모든 파일시스템을 저장한다. 파일이름은 디렉토리에 저장되며 이는inode의 포인터로 이용된다. Inode list 는 inode들의 리스트이며, 관리자에 의해 그 크기가 변경될 수 있다. 파일 시스템의 모든 파일이나 디렉토리는 각기 단 하나의 inode에 의하여 표현된다. 리스트에서 한 inode는 root inode로 file system을 mount 시킨 이후에 접근 가능하게 된다.

     data block : 파일 데이터와 관리 데이터를 저장하고 있는 부분이다. 각각의 데이터 블록은 한번에, 단지 하나의 파일에만 할당될 수 있다.

     

     

     

    Raw Device                                    

    - Raw Device란?

     

    Raw device는 file system이 set up 되지 않은 disk drive이다. Raw Device는 데이터베이스와 같이 주로 자신들의 캐싱 시스템을 갖고 있는 경우에 서비스 프로그램에서 많이 사용한다. 운영체제의 캐싱 시스템은 일반적인 상황에서는 성능에 지대한 영향을  미치지만 데이터베이스 등에서는 이미 자신의 방식으로 캐싱을 하기 때문에 두번의 캐싱으로 인해 부하가 생길 수 있다. 그러므로 운영체제가 지원하는 부분을 사용하지 않게 하기 위해서 raw device를 사용한다.또한 두 대 이상의 machine과 이 machine들이 공유하고 있는 disk로 구성되는 OPS의 경우, shared disk를 os file system으로 구성하면 한쪽에서만 이를 볼 수 있고 동시에 access하는 것이 불가능하다. 그러므로 raw device를 사용해야 하며, raw device를 사용하면 os를 거치지 않으므로 보다 빠른 access를 기대할 수 있다.

     

     

    • 장점

    1. Raw Device는 os에 mount되지 않은 디스크이므로 os kernel에 의해 buffering이 되지 않고 user buffer와 device간에 직접 data가 전송되므로 disk I/O 성능이 향상되고 cpu overhead가 감소된다.

    2. os file system의 overhead를 피할 수 있다.

    3. os buffer size를 줄일 수 있다.

     

    • 단점

    1. setup 하기 어렵고 backup 절차가 file system 보다 복잡하다.

    2. raw device와 os file을 혼합하여 사용할 경우 os file은 ulimit parameter의 size 보다 작아야 한다. 따라서 ulimit를 초과하는 table들은 raw device를 사용하여야 한다.

    3. os는 cylinder 0을 보호하지 못하기 때문에 cylinder 0에서 시작하면 안된다.

     

      

    - raw device 운영시 주의사항

    ² raw device/dev directory 밑에 c type (character special file)으로 나타난다. 
    예>
    crw-rw----   1 oraerp01   dba         64 0x090001 May 15 14:07 rlvabmd01.dbf
    crw-rw----   1 oraerp01   dba         64 0x090002 May 15 14:07 rlvabmx01.dbf
    crw-rw----   1 oraerp01   dba         64 0x090003 May 15 14:07 rlvahld01.dbf

     

    ² logical volume 확인

    lvdisplay v lvpath

    예> THVSD01:/dev/vgdbmst2> lvdisplay -v lvctrl1

     

    ² partitoin 개수 및 size 결정

    oracle data file : device = 1 : 1

    device size = oracle file size + a (a : 대략 1M 정도. header 정보 보관)

    향후 DB가 늘어날 것을 감안하여 size 별 raw device를 미리 생성해둔다.

     

    ² file system의 file을 raw device 로 옮기는 방법 : dd if = file명 of = raw device명>
    dd bs=20480 if=/DBMS/orarac/oradata/RAC/rlvsystem01.dbf  of=/dev/vgdbmsg1/rlvsystem01.dbf

    dd bs=20480 if=/DBMS/orarac/oradata/RAC/rlvtemp01.tmf  of=/dev/vgdbmsg1/rlvtemp01.tmf

    dd bs=20480 if=/DBMS/orarac/oradata/RAC/rlvtools01.dbf  of=/dev/vgdbmsg1/rlvtools01.dbf

     

    ² raw device를 file로 copy하는 방법 : dd if = raw device명 of = file명 >
    dd bs=20480 if=/dev/vgdbmsg1/rlvsystem01.dbf  of=/DBMS/orarac/oradata/RAC/rlvsystem01.dbf

    dd bs=20480 if=/dev/vgdbmsg1/rlvtemp01.tmf  of=/DBMS/orarac/oradata/RAC/rlvtemp01.tmf

    dd bs=20480 if=/dev/vgdbmsg1/rlvtools01.dbf  of=/DBMS/orarac/oradata/RAC/rlvtools01.dbf

    반응형

    'OS' 카테고리의 다른 글

    [펌] Raid Level  (0) 2016.08.23
    [펌] VMware USB 부팅 하기... 두번째 방법...  (2) 2016.03.17
    [펌] FTP의 Active Mode 와 Passive Mode  (0) 2016.03.14
    [펌] PUTTY 화면 설정  (0) 2016.02.02
    [사이트 참조][Windows] FTP 설정  (0) 2015.12.29
    반응형


    Window는 가끔 VM에 설치하는 부분이라 그때마다 ISO로 했는데, 한번 만들어 놓은 USB가 있어서

    아래의 방법으로 빠르게 설치할 수 있었다.

    중간에 physical Disk 부분에서 USB 와 연결되 있는 Device를 찾지 못하였는데,

    VM Ware 업데이트 진행 후에는 정상적으로 목록이 뜨는 것을 확인할 수 있었다.

    VM Version (10.0.7 build-2844087)


    -------------------------------------------------------------------------------

    [출처] http://prolite.tistory.com/166

    [2017-10-31] 변경

    http://prolite.tistory.com/1130

    원작자 요청이 있어서 삭제후 출처만 남겼습니다!

    해당 블로그로 확인해 보세요!

    반응형

    'OS' 카테고리의 다른 글

    [펌] Raid Level  (0) 2016.08.23
    [펌][OS] Raw Device 와 File System 차이  (0) 2016.04.04
    [펌] FTP의 Active Mode 와 Passive Mode  (0) 2016.03.14
    [펌] PUTTY 화면 설정  (0) 2016.02.02
    [사이트 참조][Windows] FTP 설정  (0) 2015.12.29
    반응형

    이 블로그를 시작할 때에는 여러가지 복합적인 이유로 시작하였다.


    하지만 이 복합적인 이유들이 한가지로

    통합되어 가고 있는 것 같다...누군가에게 보여 지기를 원하는 것처럼..


    내가 필요할때 보기 위해서 또는 내가 지금까지 한 것을 정리하여 업로드 하면서

    다시 한번 필요할 때 찾아 보기 쉽게 올려 놨다.


    물론 퍼 오는게 많을 수록 정리를 하기 보다는 있는 그대로 받아 들이고 있다.


    내가 직접 해 보기는 하지만 다시 정리를 해야지 내 것이 되는 것인데 말이다.


    하지만 한가지 진실한 것은 이처럼 꾸준히 관리해 오는 것도 처음이고,

    내 블로그를 통해서 다른 이도 나와 같은 상황에서 잘 해결해 나가기를 바라는 것이다.


    조금만 더 정리를 해서 내 것으로 만들고,

    조금만 더 깊게 진행해 보고 더 많은 사람들이 지식을 받아 갔으면 한다.


    여기서 만큼은 진실해 보자. 솔직해져 보자.


    반응형

    'Life' 카테고리의 다른 글

    필요 테스트 및 공부해야 될 내용  (0) 2016.07.04
    누군가에게 제안하기 전에..  (0) 2016.07.01
    [16.01.12] 뭐가 더 옳은 걸까..  (0) 2016.01.12
    2016 병신년 늦은 새해 인사  (0) 2016.01.06
    즐거운 여름휴가 (1)  (0) 2015.08.05
    반응형

    [펌] http://mintnlatte.tistory.com/407


    ■ FTP는 다른 서비스와는 달리 Active Mode와 Passive Mode가 존재한다.


    - 웹브라우저들은 일반적으로 Passive Mode로 설정되어 있고, 알FTP나 WS-FTP, CuteFTP와 같은 FTP 클라이언트 프로그램들은 일반적으로 Active Mode가 기본값으로 설정되어 있다.



    (1) FTP Active Mode의 동작 방식

    - 클라이언트에서 서버의 21번 포트로 접속 후 클라이언트가 사용할 두 번째 포트를 서버에 알려준다.

    - 서버는 클라이언트로 서버로 부터 Ack를 보내고, 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속을 시도한다.


    ○ Active Mode 의 문제점

    : 일반적인 TCP/IP의 특징인 ‘클라이언트가 서버에 접속을 시도하는 것’이 아니라 ‘서버가 클라이언에 접속을 시도한다’는 것이다. 이 때문에 만약 클라이언트 PC등에 방화벽이 설치되어 있거나 FTP를 잘 이해하지 못하는 공유기 등을 사용하여 외부에서의 접속을 허용하지 않는다면 세 번째 프로세스가 작동하지 않게 되어 FTP 접속이 제대로 되지 않는 문제점이 있다. 이러한 경우 FTP 접속은 되지만 이후 데이터 목록을 받아오지 못하여 에러가 발생하게 된다.

     

    Active Mode는 클라이언트에서 서버측 21번 포트로 접속시도 하고 데이터 포트는 서버에서 클라이언트로 접속하여 데이터를 보내는 방식



    (2)  FTP Passive Mode의 동작 방식

    ○ Active Mode의 문제점을 해결하기 위한 대한으로 디자인된 Passive Mode


    - 클라이언트에서  서버의 21번 포트로 접속을 시도하면, 서버에서는 사용할 두번째 포트를 클라이언트에게 알려준다.

    - 클라이언트는 다른 포트를 열어 서버가 알려준 이 포트로 접속을 시도한다. 


    ○ Passive Mode 의 문제점

    : Passive 모드에서는 두 번째 data포트로서 Active 모드가 사용했던 20번을 사용하지 않고 대신 1024 이후의 임의의 비 특권 포트를 사용하게 된다. 따라서 Passive 모드는 서버에서 클라이언트로 연결을 시도하는 Active 모드의 문제점을 해결하기는 했지만, 서버의 비 특권포트(1024 ~ 65535)를 방화벽에서 모두 열어 두어야 한다는 또 다른 문제점이 야기되었다.그러나 wu-ftp나 proftpd등 대부분의 ftp 데몬에서는 클라이언트가 Passive Mode로 접속 시 사용할 수 있는 포트를 제한설정 할 수 있는 기능을 지원하므로 이의 문제점을 미봉책이나마 어느 정도는 해결할 수 있다.

     

    Passive 모드는 클라이언트에서 서버쪽 21번 포트로 접속 시도 하고 데이터 포트도 클라이언트에서 서버의 임의의 포트로 접속하여 데이터를 받아오는 방식



    반응형
    반응형

    원본 : http://wlstnans.tistory.com/101

    python 에서의 continue, pass, break 를 정리해보자

    for element in some_list: 
        if not element: 
            pass 
    
    for element in some_list: 
        if not element: 
            continue

    3문장으로 요약하자면  

    1) pass는 단순히 실행할 코드가 없다는 것을 의미한다

    2) continue는 다음 순번의 loop를 돌도록 강제하는 것을 의미

    3) 이둘은 명백히 다른 구문이다, pass 와는 다르게 continue는 바로 다음 순번의 loop를 돈다


    만약 pass 를 타게 되면 A작업은 수행되지만, continue에서는 수행되지 않고 바로 다음 loop 순번으로 돈다.

    ############################

    예제)

    for i in [1,2,3]:
            if i:
                    print "pass %d" % i
                    pass
            print "mjsjinsu pass" # will print after pass
    
    
    for i in [4,5,6]:
            if i:
                    print "pass %d" % i
                    continue
            print "mjsjinsu continue"

    ############################

    실행 결과 )

    pass 1
    mjsjinsu pass
    pass 2
    mjsjinsu pass
    pass 3
    mjsjinsu pass
    pass 4
    pass 5
    pass 6


    반응형
    반응형

    원본 : http://primrose.tistory.com/37

    파이썬으로 FTP서버에 접속하여 여러 작업을 할 때에는 ftplib를 쓰면 편하다.


    일단 ftplib을 import 한다


    import
    ftplib


    그 다음엔 FTP서버에 접속을 해야한다. ftplib에서 FTP서버에 접속하게 해 주는 클래스는 FTP클래스로
    class ftplib.FTP([host[user[passwd[acct[timeout]]]]])

    위와같이 정의되어 있다.

    이 중에서 우리가 필요로 하는 것만 설명을 하자면.


    host : FTP서버의 IP주소나, 도메인 네임.

    user : FTP서버 아이디. 익명으로 접속하려먼 'anonymous' 입력 후 비밀번호를 입력하지 않는다.

    passwd : FTP서버의 비밀번호.



    이제 위 사항을 기입해서 FTP서버에 접속한다.


    import
    ftplib

    FTP이름 = ftplib.FTP('서버주소','아이디','비밀번호')


    무엇인가 잘못 쓴 것이 아니라면 정상적으로 접속이 될 것이다.

    접속 된 후에는 ftplib의 함수들을 이용하여 FTP 클라이언트로써의 작업을 수행 할 수 있다.
    기본적인 함수들을 소개하자면.

    FTP이름.pwd()
    : 현재 디렉토리를 보여준다.
    FTP이름.cwd(pathname)
    : 현재 디렉토리를 바꾼다.

    FTP이름.mkd(pathname)
    : 현재 디렉토리에 폴더를 만든다.

    FTP이름.rmd(pathname)
    : 현재 디렉토리의 폴더를 지운다.

    FTP이름.size(filename)
    : 파일의 크기를 알려준다.
    FTP이름.nlst(argument[...])
    : FTP서버에서 파일 목록을 가져온다. argument에 아무것도 넣지 않을 경우, 현재 폴더의 파일목록을 가져온다.

    FTP이름.retrbinary(commandcallback[maxblocksize[rest]]) 

    : FTP서버에서 바이너리모드로 파일을 가져온다.

    FTP이름.retrlines(command[callback])

    : FTP서버에서 ASCII모드로 파일을 가져온다.

    FTP이름.storbinary(commandfile[blocksizecallbackrest])
    : FTP서버에 바이너리모드로 파일을 전송한다.
    FTP이름.storlines(commandfile[callback])
    : FTP서버에 ASCII모드로 파일을 전송한다.
    FTP이름.quit()
    : FTP서버와의 접속을 끊는다. 에러 발생시엔 FTP이름.close()를 쓴다.



    이제 기본적인 함수들을 알았으니 FTP서버에 파일을 전송하는 방법에 대해 설명하겠다.


    파일 전송에는 2가지 모드가 있다. 바이너리 모드와 ASCII모드다.


    바이너리 모드는 사람이 읽을 수 있는 텍스트 형식의 파일을 제외한 파일들을 전송할 때 쓰고, ASCII모드는 사람이 읽을 수 있는 파일을 전송할 때 쓴다.


    일단 바이너리 모드로 파일을 전송해보자. 바이너리 모드로 파일을 전송할 때에는 storbinary 함수에 'STOR' 명령어와 'rb' 모드로 열은 파일 핸들러를 매개변수로 넣어줘야 한다.


    import ftplib
    FTP이름 = ftplib.FTP('서버주소','아이디','비밀번호')
    
    FTP이름.storbinary( 'STOR' , open('파일이름','rb') )
    #'파일이름'은 자기가 전송하려는 파일의 이름
    
    위와같이 하면 FTP서버 내의 현재 디렉토리에 파일이 전송된다.

    ASCII모드로 파일을 전송하는 것도 위와 비슷하다. 단지 파일을 여는 방법을 달리해야한다.

    import ftplib

    FTP이름 = ftplib.FTP('서버주소','아이디','비밀번호')

    FTP이름.storlines( 'STOR' , open('파일이름','r') )
    #'파일이름'은 자기가 전송하려는 파일의 이름

    파일 핸들러를 'r' 모드로 열어서 storlines 함수에 넘겨주면 ASCII모드로 파일이 전송된다.


    반응형

    + Recent posts