이전
다음

MariaDB



제한 사항

  • https://dev.mysql.com/doc/refman/8.0/en/innodb-restrictions.html
  • https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html
  • Table with InnoDB
  • Row with InnoDB
    • 최대 컬럼 갯수 : 1,017개
    • 최대 레코드 크기 : Page Size의 1/2 (Default 8 KB (8,196 bytes))
      • Default page size (innodb_page_size) : 16 KB (16,384 bytes)
      • 별도로 저장되는 column은 8~ 12 bytes를 차지 한다.
  • Row
    • 최대 컬럼 갯수 : 4,096개
    • 최대 레코드 크기 : 64 KB (65,536 bytes)
  • Column
    • varchar : 64 KB. 동일한 공간에 저장. 인덱스 생성 가능
    • varbinary : 64 KB. 동일한 공간에 저장
    • text : 별도 공간에 text 데이터 저장. Full text 검색 가능
      • tinytext : 256 bytes
      • text : 64 KB (65,536 bytes)
      • mediumtext : 16 MB
      • longtext : 4GB
    • blob : 별도 공간에 바이너리 데이터를 저장
      • tinyblob : 256 bytes
      • blob : 64 KB (65,536 bytes)
      • mediumblob : 16MB
      • longbolb : 4GB



MariaDB 설치


#--- MariaDB 설치
# yum  -y  install  mariadb  mariadb-server
yum  -y  install  mariadb103  mariadb103-server  mariadb103-backup
# yum  -y  install  mariadb103-server-galera

systemctl  enable   mariadb.service
systemctl  restart  mariadb.service

mysql_secure_installation

vi   /etc/my.cnf
    [mysqld]
    #--- Charset Setting
    init_connect="SET collation_connection=utf8_general_ci"
    init_connect="SET NAMES utf8"
    character-set-server=utf8
    collation-server=utf8_general_ci
    skip-character-set-client-handshake
    innodb_log_file_size=5M

    #--- InnoDB Setting
    default-storage-engine=InnoDB
    innodb_file_per_table=1

    #--- binlog setting
    log-bin=/var/lib/mysql/binlog
    max_binlog_size=1G                  #--- 로그 파일 하나당 크기
    # expire_log_days=30                  #--- 30일간 보관

vi  /etc/my.cnf.d/client.cnf
    [client]
    default-character-set=utf8

    [client-mariadb]
    default-character-set=utf8

vi  /etc/my.cnf.d/mysql-clients.cnf
    [mysql]
    default-character-set=utf8

    [mysqldump]
    default-character-set=utf8

systemctl  restart  mariadb.service

mysql  -uroot  -p${PASSWD}  mysql  -e  "show variables like 'c%'"
mysql  -uroot  -p${PASSWD}  mysql  -e  "show variables like 'log_bin'"
mysql  -V


#--- 방화벽 설정
firewall-cmd  --permanent  --add-service=mysql
firewall-cmd  --reload
firewall-cmd  --list-all

Monitoring

-- scadadb 데이터베이스에 포함된 테이블별 크기
SELECT TABLE_NAME, round(((data_length + index_length) / 1024 / 1024), 2) "MB"
  FROM information_schema.TABLES
 WHERE table_schema = "scadadb"
 ORDER BY (data_length + index_length) DESC;

-- scadadb 데이터베이스에 포함된 테이블별 레코드 수
SELECT TABLE_NAME, TABLE_ROWS
  FROM information_schema.TABLES
 WHERE table_schema = "scadadb"
 ORDER BY TABLE_ROWS DESC;


Connection 갯수 설정

#--- 최대 접속 수 확인과 Online 설정
mysql  -uroot  -p비밀번호  mysql
    #--- open_files_limit >= 10 + max_connections + table_cache_size * 2
    #---     open_files_limit가 1024이고 table_cache_size가 400인 경우 
    #---     최대 214 max_connections이 가능
    show  variables  like  'open_files_limit';
    show  variables  like  'table_open_cache';

    show  variables  like  'max_connections';
    set  global  max_connections=256;          #--- Online에서 최대 접속 수 설정
    exit;

#--- 설정 파일에서 최대 접속 수 설정
vi  /etc/my.cnf.d/server.cnf
    [mysqld]
    max_connections = 256

#--- open_files_limit 수정 방법
ulimit -a | grep 'open files'

vi  /etc/security/limits.conf
    *            soft    nofile          65536
    *            hard    nofile          65536

vi  /lib/systemd/system/mariadb.service
    [Service]
    LimitNOFILE=4096
systemctl daemon-reload
systemctl mariadb restart


Partition Table 관리

-- 테이블별 partition 정보 조회
SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_ORDINAL_POSITION, TABLE_ROWS
  FROM INFORMATION_SCHEMA.PARTITIONS
  WHERE TABLE_NAME = 'devicedata1s';

SELECT * FROM devicedata1s PARTITION (p2029, p2030); -- Partition 재구성 : 분리 ALTER TABLE devicedata7s REORGANIZE PARTITION p9999 INTO ( PARTITION p2031 VALUES LESS THAN ('20319') ENGINE = InnoDB, PARTITION p2032 VALUES LESS THAN ('20329') ENGINE = InnoDB, PARTITION p2033 VALUES LESS THAN ('20339') ENGINE = InnoDB, PARTITION p2034 VALUES LESS THAN ('20349') ENGINE = InnoDB, PARTITION p2035 VALUES LESS THAN ('20359') ENGINE = InnoDB, PARTITION p2036 VALUES LESS THAN ('20369') ENGINE = InnoDB, PARTITION p2037 VALUES LESS THAN ('20379') ENGINE = InnoDB, PARTITION p2038 VALUES LESS THAN ('20389') ENGINE = InnoDB, PARTITION p2039 VALUES LESS THAN ('20399') ENGINE = InnoDB, PARTITION p2040 VALUES LESS THAN ('20409') ENGINE = InnoDB, PARTITION p9999 VALUES LESS THAN ('99999') ENGINE = InnoDB ); -- Partition 재구성 : 병합 ALTER TABLE devicedata7s REORGANIZE p2031, p2032 INTO ( PARTITION p9999 VALUES LESS THAN ('99999') ENGINE = InnoDB ); -- Partition에 포함된 데이터 모두 삭제 ALTER TABLE ${TABLE} DROP PARTITION p2030; ALTER TABLE ${TABLE} TRUNCATE PARTITION p2019;


참고 문헌

이전
다음
공유하기