mariadb BSL 관련 twitter 글들

트위터 검색을 통해서 좀 더 많은 내용들이 오고 가는 것을 알 수 있습니다.
https://twitter.com/search?q=mariadb%20since%3A2016-08-07%20until%3A2016-08-26&src=typd

최근 mariadb maxscale의 BSL 관련 글들

8월 15일에 maxscale 2.0 beta가 release 됐습니다.

https://mariadb.com/blog/introducing-maxscale-20-beta-release

 

8월 16일에 maxscale의 BSL 적용에 대해서 아래 infoworld 기사를 통해서 이슈가 올라옵니다.

http://www.infoworld.com/article/3109213/open-source-tools/open-source-uproar-as-mariadb-goes-commercial.html

 

국내에서 관련 내용을 잘 정리한 곳은 아래 두곳이 있고요.

http://m.ruliweb.com/news/board/1003/read/2107108

http://etinow.me/46

 

mariadb 관련한 사람들에 대한 글들은 아래 글들이 있습니다.

https://falseisnotnull.wordpress.com/2016/08/24/thoughts-on-maxscale-new-license/

I’m Colin Charles, and I’m here to evangelize open source databases!

 

mariadb의 이런 방향은 CEO가 바뀌면서라고 생각됩니다.

http://www.theregister.co.uk/2016/01/21/mariadb_acquires_9m_in_funding_ceo_and_monty_as_cto/

 

BSL을 밀고 있는 monty의 글입니다.

http://monty-says.blogspot.kr/2016/08/applying-business-source-licensing-bsl.html

mysql 관련 스크립트 비밀번호 암호화

mysql 서버를 운영하면서 관련 스크립트들을 사용해야 하는 경우들이 많다.

백업 스크립트나 모니터링을 위한 스크립트를 서버별로 만들어서 사용을 할때 비밀번호가 평문으로 보여서 보안상 문제가 될 수 있다. 최근 버전들에서는 mysql_config_editor를 이용해서 비밀번호를 안보이게 할 수 있다. http://notemusic.tistory.com/51

mariadb에서는 아쉽게도 아직 호환되지 않는 기능이다. https://mariadb.com/kb/en/mariadb/mysql_config_editor-compatibility/

 

mariadb가 아니더라도 MHA등의 mysql 관련 여러 솔루션들을 사용할때도 평문 비밀번호가 문제가 될 수 있다. 이럴때 리눅스의 쉘 스크립트를 암호화하는 방식으로 처리를 할 수 있다. 가장 많이 사용하는 방법이 SHC를 이용하는 것이다.

 

http://blog.nooree.com/post.cfm/shell-script-compiler

http://bahndal.egloos.com/419521

https://launchpad.net/~wagungs/+archive/ubuntu/personal/+packages

mytop 사용하기

mariadb 모니터링을 위해서 배포판에 포함되어 있는 mytop 사용을 할 수 있습니다.

 

mytop에 대한 자세한 설명은 아래 웹사이트에서 확인할 수 있습니다.

http://www.mysqlfanboy.com/mytop-3/

 

perl 모듈이 없어서 아래와 같이 실행이 안될때는

Can’t locate Term/ReadKey.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./mytop line 191.

관련 yum 설치 이후에 사용하면 됩니다.

yum install perl-TermReadKey

 

mytop 실행은 아래와 같이 할 수 있습니다.

/opt/mariadb/bin/mytop –socket=/MARIA/tmp/mysql.sock -u root –port=13306 –db=osskorea

putty 작업 로그 저장

putty를 사용하면서 작업 내용을 로그로 저장할 수 있는 기능이 있습니다.

putty 설정에서 session:logging 입니다.

log file name 설정은 아래와 같이 가능합니다.

Log file name can contain &Y, &M, &D for date, &T for time, &H for host name, and &P for port number

해당 설정을 Default Settings 세션으로 저장해 두면 실행할때마다 자동으로 로그가 저장됩니다.

mariadb trailing space

mariadb에서 varchar / char 컬럼을 사용할때 오른쪽 빈 공백 처리를 어떻게 할까요?

 

mysql에서 char, varchar 컬럼 형식은 trailing pad character 처리로 인해서 unique index에서 duplicate-key error 발생이 됩니다. http://dev.mysql.com/doc/refman/5.7/en/char.html

컬럼을 varbinary 형식으로 하시면 공백에 대한 unique index 생성이 가능합니다.

아래는 관련 테스트 내용입니다.

——————————————————————

MariaDB [ossk] create table t16 ( c1 varbinary(20), primary key (c1) );

Query OK, 0 rows affected (0.01 sec)

MariaDB [ossk]> insert into t16 (c1) values (‘a’), (‘a ‘); Query OK, 2 rows affected (0.00 sec)

Records: 2 Duplicates: 0 Warnings: 0

MariaDB [ossk]> show create table t16\G

*************************** 1. row ***************************

Table: t16 Create Table: CREATE TABLE `t16` ( `c1` varbinary(20) NOT NULL DEFAULT ”, PRIMARY KEY (`c1`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)


 

MSSQL에서는 해당 처리에 대한 설정을 ANSI_PADDING 옵션으로 할 수 있습니다.

 

Oracle에서 Mariadb로 마이그레이션 할때 관련 문제가 있을 수 있습니다.

MariaDB

MySQL 데이터베이스를 개발한 개발자들이 효율적인 데이터베이스 솔루션과 최고수준의 서비스를 제공하기
위하여 기존 MySQL를 기본으로 확대 발전시킨 OSS DBMS으로 기존 MySQL과 99% 호환이 가능하며, 추가적인 다양한 기능을 제공(백업, 모니터링 등)

주요 기능 및 성능

  • Global Transaction ID쉽게 Replication을 설정하고 새로운 Slave를 쉽게 연결 가능, Multi Source Replication 지원
  • Mulit-source Replication하나의 Slave에 여러 Master의 데이터를 복제 가능
  • Parallel SlaveMySQL 5.6의 기능 중 하나로 Master의 transaction과 마찬가지로 Slave에서도 병렬로 transaction를 처리
  • Spider Storage Engine(샤딩 기능 제공)
  • 통계는 각 SQL문에 대한 최적의 실행 계획을 선택하는 쿼리 최적화 프로그램에 의해 사용
  • 데이터의 쿼리 최적화 프로그램은 복잡한 다중 테이블 쿼리에 더 나은 쿼리 실행 계획을 선택
  • Online Alter(시스템을 중단하지 않고 스키마의 많은 변경 작업 가능) 제공

Replication

Replication enhancements

  1. Global Transaction Id
    Replication에서 새로운 Global Transaction Id(GTID)를 소개

    1. 쉽게 Replication을 설정하고 새로운 Slave를 쉽게 연결 가능
    2. Multi Source Replication과 같이 다른 Replication 기능을 지원
, GTID의 도입으로 Slave들의 충돌 없이 안전하게 사용 가능
  2. Mulit-source Replication
    1. 하나의 Slave에 여러 Master의 데이터를 복제 가능 (기존 Slave는 하나의 Master만 설정이 가능함)
    2. 하나의 서버에서 전체 복사본의 데이터를 사용할 때 유용함
    3. tumblr, Microblog Site, Yahoo의 일부는 이미 사용 중
  3. Parallel Slave
    • MySQL 5.6의 기능 중 하나로 Master의 transaction과 마찬가지로 Slave에서도 병렬로 transaction를 처리 따라서 Slave에서의 지연 확률이 현저히 낮아짐

Replication enhancements

mariadb img-1
mariadb img-1

MariaDB Storage Engine

Storage Engine

  1. Cassandra Storage Engine
    • MariaDB에 데이터를 Cassandra 데이터와 결합 하여 Cassandra 데이터에 읽기 쓰기 수행 가능
    • Cassandra Ring에 많은 MariaDB 서버를 연결하여 고가용성 클러스터를 생성
  2. Connect Storage Engine
    • 데이터가 MariaDB에 저장된 데이터의 부분인 것 처럼 파일 또는 ODBC 하위의 데이터를 처리
  3. Sequence Storage Engine
    • 메모리에 저장되어 쿼리에 사용할 수 있는 Sequence를 생성
  4. Spider Storage Engine
    • 메모리에 저장되어 쿼리에 사용할 수 있는 Sequence를 생성
  5. TukuDB
    • 쓰기 속도의 고성능 워크로드를 위해 설계된 스토리지 엔진
    • fractal tree indexes를 사용

Storage Engine 종류

maria img-3

  1. InnoDB(XtraDB)
    • InnoDB를 대체 하는 MVCC기반의 Storage Engine
    • 멀티코어 시스템에서 더 나은 성능과 높은 워크로드를 가짐
    • MariaDB에서는 FEDERATEDX라는 새로운 네이밍을 사용
  2. Aria
    • 차세대에 MyISAM 스토리지 엔진을 대체하기 위해 개발
    • MyISAM에서 파생되었으며, Crash-Safe를 목표로 진행 중, 부분적으로 Transaction을 제공
  3. PBXT(트랜잭션 제공)
    • Transaction Log에 선 기록 없이 바로 DB에 기록
    • 완전한 ACID를 준수함
    • MariaDB 5.5부터는 더 이상 유지보수를 제공하지 않으므로 기본 스토리지 엔진에서 제외
  4. OQGRAPH
    • Graph 기능을 제공하는 스토리지 엔진
    • (MariaDB 5.5에는 기본으로 Plugin이 들어있지 않음)
  5. FEDERATED (트랜잭션 제공)
    • 원격 DB 서버 테이블에 네트워크로 접근하는 스토리지 엔진으로 기존
    • 원격 DB에서 로컬 DB로 결과 값만 전달한다는 점에서 MySQL에 기본으로 장착된 FEDERATED와 
가장 큰 차이점이 있음
  6. SphinxSE
    • Full-Text Searching이 필요할 때 사용할 수 있는 스토리지 엔진.
    • 단, SphinxSE은 어디까지나 Sphinx의 일부분이며, 스토리지 엔진 사용을 위해서는 Sphinx 데몬을 
별도로 설치 필요

Staple Storage Engine (1)

Feature MyISAM Memory InnoDB Archive NDB
Storage limits 256TB RAM 64TB None 384EB
Transactions No No Yes No Yes
Locking granularity Table Table Row Table Table
Geospatial data type support Yes No Yes Yes Yes
Geospatial indexing support Yes No No No No
B-tree indexes Yes Yes Yes No Yes
Hash indexes No Yes No[a] No Yes
Full-text search indexes Yes No No No No
Clustered indexes No No Yes No No
Data caches No N/A Yes No Yes
Index caches Yes N/A Yes No Yes
Compressed data Yes[b] No Yes[c] Yes No
Encrypted data[d] Yes Yes Yes Yes Yes
Cluster database support No No No No Yes
Replication support[e] Yes Yes Yes Yes Yes
Foreign key support No No Yes No No
Backup / point-in-time recovery[f] Yes Yes Yes Yes Yes
Query cache support Yes Yes Yes Yes Yes
Update statistics for data dictionary Yes Yes Yes Yes Yes

Strage Engine(샤딩 구성도)

샤딩 구성도(Data 분산 처리)

mariadb img-1
mariadb img-1

Optimizer enhancements

Optimizer enhancements

  1. 독립적으로 통계데이터를 제공MairaDB 10 이전 버전의 경우 통계는 스토리지 엔진에 의해 스스로 공급 되었고 통계 품질은 
일반적으로 불량하고 스토리지 엔진 Interface는 제한이 많았음
    MariaDB 10 버전 부터 통계는 각 SQL문에 대한 최적의 실행 계획을 선택하는 쿼리 최적화 
프로그램에 의해 사용
    더 나은 실행 계획 및 최종 사용자의 더 나은 통계 결과는 일반적으로 빠른 결과를 도출 가능
  2. Histograms쿼리 최적화, Histogram은 모두 인덱스가 아닌 인덱스 열을 수집 할 수 있음
    데이터의 쿼리 최적화 프로그램은 복잡한 다중 테이블 쿼리에 더 나은 쿼리 실행 계획을 선택
  3. EXISTS 서브쿼리의 최적화가능하면 IN에 하위 쿼리를 EXISTS로 변환하여 가능하면 최적화 합니다.
    이 변환은 특정 종류의 세미 조인 최적화 또는 EXISTS로 연결된 서브쿼리들을 구체적으로 
최적화하도록 지원

Administration improvements

  1. RoleMairaDB 10에 드디어 Role이 도입
    이제 DBA는 특정 권한을 가진 역할을 만들고 사용자에게 역할을 할당 가능
  2. Show Explain실행되고 있는 쿼리문을 얻으면 Slow Query에 대해서 설명
  3. Explain Insert/Update/deleteinsert / update / delete 문에 대한 explain 지원
  4. Show Plugin SONAME설치 되어 있는 모든 Plugin 정보를 확인 가능
  5. Shutdown서버의 Shutdown을 위해 마지막에 SQL로 종료 가능
  6. Kill Query ID해당 ID가 Thread ID가 아닌 특정 쿼리를 kill
  7. Per-connection Memory usage사용되는 메모리의 양을 각 Connection 별로 나열

Other

Other important new feature

  1. New REGEXP새로운 SQL과 정규식 표현식 라이브러리 PCRE로 전환할 수 있는 REGEXP_REPLACE, REGEXP_SUBSTR, 
REGEXP_INSTR 등 으로 MairaDB 텍스트 처리 기능을 향상
  2. Delete… RETURNING많은 사용자가 결과셋에서 삭제된 행을 반환하는 기능으로 문장의 끝에 추가하여 사용 가능
  3. Alter… IF [NOT] EXISTSAlter 문에서 이제 예를 들어 키워드 IF를 추가하거나 IF NOT을 추가 할 수 있음
  4. Named Dynamic ColumnsMariaDB 초창기 버전의 경우 Dynamic Columns의 각 열은 번호에 의해 참조 될 수 있음
    MariaDB 10에서 열 이름으로 지칭 가능
  5. Multiple GET_LOCK()많은 사용자 레벨의 잠금 사용이 지원

Merged Features

Merged Features and Functionality from MySQL 5.6

  1. InnoDB대부분의 InnoDB의 성능 향상된 내용은 MariaDB에 포함
  2. Performance Schema새로운 이벤트 필터링, 계측 및 기타 새로운 성능 스키마 추가
  3. Online Alter
시스템을 중단하지 않고 스키마의 많은 변경 작업 가능
  4. Order by ~ Limit Optimization을 사용하는 쿼리를 위한 Filesort OptimizationLimit 최적화 순서를 사용하여 쿼리에 대한 Filesort 최적화
  5. Create Temporary table에 대한 권한
  6. Character-set 확장
  7. GET DIAGNOSTICS
  8. TO_BASE64(), FROM_BASE64