CentOS 7 에서 MySQL 8.0.29 설치 (gcc 관련 에러시에만 참고)

리눅스/MySQL|2022. 6. 20. 11:28
반응형

1. 필요 패키지 설치
# yum -y group install "Development Tools"
# yum -y install openssl openssl-devel ncurses ncurses-base ncurses-libs ncurses-devel perl bison


2. gcc 설치 (gcc 4.8.5 -> 7.3.0)
# yum -y install centos-release-scl
# yum -y install devtoolset-7-gcc*
# scl enable devtoolset-7 bash
# gcc --version

 

* 어떤 경우 gcc 8.3 우선 설치하고 scl.... 명령으로 7.3 으로 다운하여 사용하니 되기도 함

 

* 위와 같이 설치가 되지 않을 경우 아래와 같이 리포지토리 파일을 수동으로 생성합니다.

# vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo

# CentOS-SCLo-rh.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
#baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/rh/
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-testing]
name=CentOS-7 - SCLo rh Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-source]
name=CentOS-7 - SCLo rh Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/rh/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-debuginfo]
name=CentOS-7 - SCLo rh Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

 

# vi /etc/yum.repos.d/CentOS-SCLo-scl.repo

# CentOS-SCLo-sclo.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
# baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/sclo/
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-sclo
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-testing]
name=CentOS-7 - SCLo sclo Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/sclo/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-source]
name=CentOS-7 - SCLo sclo Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/sclo/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-debuginfo]
name=CentOS-7 - SCLo sclo Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

 

yum update 로 적용하고 다시 위로 올라가 재설치를 합니다.

 

[필수] MySQL 8.0.29 설치에 필요한 패키지를 추가 설치합니다.

# yum -y install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils

 

 

3. cmake 설치
# cd /usr/local/src
# wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2.tar.gz
# tar -zxvf cmake-3.16.2.tar.gz
# cd cmake-3.16.2
# ./bootstrap
# gmake
# make install
# cmake --version


4. mysql 설치

 

MySQL 8.0.29 는 설치도중 boost_1_77_0 을 다운로드 받아 압축 풀고 진행하는데,

내부 네트워크에서 인터넷 연결 안될 경우 수동으로 파일을 받아서 옮긴 뒤 아래와 같이 진행하면 됩니다.

 

(# wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2 ) 다운로드경로
# bunzip2 boost_1_77_0.tar.bz2
# tar xvf boost_1_77_0.tar
# mv boost_1_77_0 /usr/local/src/mysql-8.0.29/include/boost_1_77_0/

 

(생략)


cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DWITH_SSL=system -DMYSQL_TCP_PORT=3306 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src/mysql-8.0.29/include/boost_1_77_0 -DFORCE_INSOURCE_BUILD=1


(생략)

 

 

반응형

댓글()

CentOS 7 에서 MySQL client 8.0.21 설치하기 (caching_sha2_password 지원)

리눅스/MySQL|2022. 6. 9. 16:30
반응형

caching_sha2_password 지원이 되는 MySQL client 8 버전을 설치합니다.

 

1. 다운로드

# wget https://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/mysql-community-client-8.0.21-1.el7.x86_64.rpm
# wget https://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/mysql-community-common-8.0.21-1.el7.x86_64.rpm
# wget https://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/mysql-community-libs-8.0.21-1.el7.x86_64.rpm

 

2. 설치

의존성이 걸려 있으므로 아래 순서에 맞게 설치 합니다.

# rpm -ivh mysql-community-common-8.0.21-1.el7.x86_64.rpm 
# rpm -ivh mysql-community-libs-8.0.21-1.el7.x86_64.rpm 
# rpm -ivh mysql-community-client-8.0.21-1.el7.x86_64.rpm

 

이제 mysql 명령으로 외부 DB 서버에 접근이 가능합니다.

반응형

댓글()

MySQL 실시간 쿼리 확인

리눅스/MySQL|2022. 5. 25. 08:58
반응형

mysqladmin 명령어로 상태를 출력

 

# mysqladmin -i5 proc status -u root -p

Enter password:

~~

Uptime: 10578 Threads: 1 Questions: 4809 Slow queries: 589 Opens: 1321 Flush tables: 1 Open tables: 348 Queries per second avg: 0.454

 

 

Uptime : MySQL server 시삭된 후 현재 시간 (초 단위)

Threads : 현제 DB 서버에 연결된 유저수

Questions : 서버 시작후 지금까지 요청된 쿼리수

Slow queries : mysql 설정파일에 슬로우쿼리의 쿼리시간 이상을 가진 요청수

Opens : 서버가 시작된 후 현재까지 열렸던 테이블수

Open tables : 현재 열려 잇는 테이블 수

Queries per second avg : 평균 초단 쿼리수

 

 

[출처] https://jy-p.tistory.com/50

 

반응형

댓글()

[MySQL] Slave_IO_Running: Connecting 조치 방법

리눅스/MySQL|2022. 5. 11. 11:47
반응형

Replication 을 구성하다보면 동기화가 되지 않은 상태에서 아래와 같은 메세지를 만날 수 있습니다.

 

(slave 서버에서)

mysql> show slave status\G

...

Slave_IO_Running: Connecting

Slave_SQL_Running: Yes

...

 

[점검1]

이 경우 slave 서버에서 master 서버로 접근 되는지 확인해 봐야 합니다.

 

(slave 서버에서)

# mysql -u replica -p -h 192.168.10.2

Enter password: 
ERROR 1129 (HY000): Host '192.168.10.2' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

 

위와 같이 출력 된 경우 조치 방법은 아래와 같습니다.

 

(master 서버에서)

mysql> flush hosts;

 

이후 다시 동기화를 하면 정상 구동되는것을 확인 할 수 있습니다.

 

[점검2]

서버 방화벽 등에서 slave 서버가 master 서버의 mysql 로 접근이 될 수 있도록 허용 합니다.

- 방화벽 (ufw, iptables 등)

- tcp wrapper (/etc/hosts.allow)

- mysql 리플리케이션 계정 접근 권한 (mysql.user 테이블 확인)

 

[점검3]

간혹 인터넷 예제를 따라 리플리케이션 설정을 했을때 slave 서버의 쿼리에서 아래 값을 안바꾸고 복사해서 실행한 경우가 있습니다.

확인해보세요.

mysql> change master to master_host='192.168.10.2', master_user='repl',master_password='12345678', master_log_file='binlog.000004',master_log_pos=156; 

 

 

반응형

댓글()

MySQL 8.0 SSL 설정하기

리눅스/MySQL|2021. 12. 15. 15:25
반응형

MySQL 8.0.26 버전에서 SSL 적용을 해보았습니다.

낮은 버전도 다르지 않다고 생각합니다.

 

[사전 준비]

- ssl 파일 위치 : /usr/local/mysql/ssl

- 체크 사항 : mysql 계정이 접근 가능한 경로 (/root/ssl 은 안됨), 파일 권한 확인 (mysql 계정 읽기)

 

 

1. 설정

# vi /etc/my.cnf

 

[mysqld] 섹션에 아래 내용 추가

ssl_cert = /usr/local/mysql/ssl/sysdocu.tistory.com.crt
ssl_key = /usr/local/mysql/ssl/sysdocu.tistory.com.key
ssl_ca = /usr/local/mysql/ssl/ca-bundle.crt

 

 

2. 확인

mysql> show variables like '%ssl%';
+-------------------------------------+--------------------------------------------+
| Variable_name                       | Value                                      |
+-------------------------------------+--------------------------------------------+
| admin_ssl_ca                        |                                            |
| admin_ssl_capath                    |                                            |
| admin_ssl_cert                      |                                            |
| admin_ssl_cipher                    |                                            |
| admin_ssl_crl                       |                                            |
| admin_ssl_crlpath                   |                                            |
| admin_ssl_key                       |                                            |
| clone_ssl_ca                        |                                            |
| clone_ssl_cert                      |                                            |
| clone_ssl_key                       |                                            |
| have_openssl                        | YES                                        |
| have_ssl                            | YES                                        |
| mysqlx_ssl_ca                       |                                            |
| mysqlx_ssl_capath                   |                                            |
| mysqlx_ssl_cert                     |                                            |
| mysqlx_ssl_cipher                   |                                            |
| mysqlx_ssl_crl                      |                                            |
| mysqlx_ssl_crlpath                  |                                            |
| mysqlx_ssl_key                      |                                            |
| performance_schema_show_processlist | OFF                                        |
| ssl_ca                              | /usr/local/mysql/ssl/ca-bundle.crt         |
| ssl_capath                          |                                            |
| ssl_cert                            | /usr/local/mysql/ssl/sysdocu.tistory.com.crt    |
| ssl_cipher                          |                                            |
| ssl_crl                             |                                            |
| ssl_crlpath                         |                                            |
| ssl_fips_mode                       | OFF                                        |
| ssl_key                             | /usr/local/mysql/ssl/sysdocu.tistory.com.key |
+-------------------------------------+--------------------------------------------+

 

 

반응형

댓글()

Install MySQL 8.0 (yum) with Galera cluster in CentOS 7

리눅스/MySQL|2021. 11. 8. 10:48
반응형

CentOS 7 에서 MySQL 8.0 과 Galera 4 버전을 설치하고 cluster 설정을 해보았습니다.

아래는 간략히 설치하고 설정하는 방법만 기술하였습니다.

 

 

1. 설치

 

서버 두대에 동일하게 설치를 진행합니다.

 

# vi /etc/yum.repos.d/galera.repo

[galera]
name = Galera
baseurl = https://releases.galeracluster.com/galera-4.9/centos/7/x86_64
gpgkey = https://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1

[mysql-wsrep]
name = MySQL-wsrep
baseurl = http://releases.galeracluster.com/mysql-wsrep-8.0.25-26.7/centos/7/x86_64/
gpgkey = https://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1

# yum -y install galera-4 mysql-wsrep-8.0

 

 

2. 사용자 생성 및 권한 부여

 

(마스터 노드 192.168.200.105 에서만)

계정 생성을 위해 mysqld 를 우선 가동해줍니다.

 

# systemctl start mysqld

 

# mysql -p

Enter password: (root 패스워드 입력 후 엔터) // 초기 root 패스워드는 로그파일에 기록되어 있습니다. (/var/log/mysqld.log)

 

최초 패스워드로 로그인하면 새로운 패스워드로 변경 전까지 일반 작업은 불가능합니다. 아래와 같이 변경 해줍니다.

mysql> alter user 'root'@'localhost' identified by '12345678'; 

mysql> flush privileges;

 

두 서버간 동기화를 담당할 계정 galera 를 생성합니다. 계정명은 무엇이든 상관 없습니다.

mysql> CREATE USER 'galera'@'localhost' IDENTIFIED WITH caching_sha2_password BY '12345678';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'galera'@'localhost'; 
mysql> GRANT GRANT OPTION ON *.* TO 'galera'@'localhost'; 
mysql> flush privileges;

 

 

3. 설정

 

두 노드의 설정 방법이 약간 다릅니다. 파란색 글자를 유의해서 설정합니다.

 

(마스터 노드 192.168.200.105 에서)

# systemctl stop mysqld

 

# vi /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 여기에서부터 추가
user=mysql
bind-address="0.0.0.0"
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=2G
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.200.105,192.168.200.106"
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M;"
wsrep_cluster_name="cluster"
wsrep_node_name="db1"
wsrep_node_address="192.168.200.105"
wsrep_sst_method="clone"
wsrep_sst_auth="galera:12345678"

설정 후 galera cluster 기능을 사용하는 mysqld 를 최초 가동 합니다. 

# mysqld_bootstrap --wsrep-new-cluster

 

(슬레이브 노드 192.168.200.106 에서)

# vi /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 여기에서부터 추가
user=mysql
bind-address="0.0.0.0"
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=2G
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.200.105,192.168.200.106"
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M;"
wsrep_cluster_name="cluster"
wsrep_node_name="db2"
wsrep_node_address="192.168.200.106"
wsrep_sst_method="clone"
wsrep_sst_auth="galera:12345678"

저장 후 일반적인 가동만 해주면 설정되어진 값으로 자동 동기화가 이루어집니다.

# systemctl start mysqld

 

 

4. 확인

쿼리로 직접 데이터 입력해보는 방법과 mysql 상태값을 확인하는 방법이 있습니다.

 

1) 마스터 서버에서 DB 를 생성하면 슬레이브 서버에서도 확인이 가능

mysql> create database sysdocu;

mysql> show databases;

 

2) galera cluster 설정 상태 확인

mysql> show variables like '%wsrep_cluster%';
+-------------------------+-----------------------------------------+
| Variable_name           | Value                                   |
+-------------------------+-----------------------------------------+
| wsrep_cluster_address   | gcomm://192.168.220.105,192.168.220.106 |
| wsrep_cluster_name      | cluster                                 |
| wsrep_cluster_server_id | 1                                       |
+-------------------------+-----------------------------------------+

 

 

반응형

댓글()

CentOS 7 에 MySQL 8.0 설치 (rpm), 사용자 생성 및 권한 주기 (SHA256 암호 적용)

리눅스/MySQL|2021. 10. 18. 11:12
반응형

1. 설치

아래와 같이 간단히 설치가 가능합니다.

# yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# yum install -y mysql-server

 

설치한 mysql 을 구동합니다.

# systemctl start mysqld

 

버전을 확인해 봅니다.

# mysql -V
mysql  Ver 8.0.26 for Linux on x86_64 (MySQL Community Server - GPL)

 

 

2. 초기 root 비밀번호 

초기 root 패스워드는 mysqld 데몬을 처음 구동한 시점에 로그파일에 남게 됩니다.

아래와 같이 확인 후 로그인하여 패스워드를 반드시 변경 해야 합니다.

(패스워드 변경 전, 일반 쿼리 사용 불가)

 

# cat /var/log/mysqld.log |grep root |sed -e 's/.* //'

(root 패스워드 출력)

# mysql -p

Enter password: (root 패스워드 입력)

 

아래와 같이 새 패스워드로 변경합니다.

mysql> alter user 'root'@'localhost' identified with caching_sha2_password by '12345678';

mysql> flush privileges;

 

 

3. 사용자 생성 (SHA256 암호방식 & 구 암호방식)

MySql 8.0의 기본 인증 플러그인은 caching_sha2_password 로 변경 되었습니다.

계정생성시 SHA256 패스워드 적용 방법은 아래와 같습니다.

 

mysql> create user 'sysdocu'@'localhost' identified with caching_sha2_password by '12345678';

mysql> flush privileges;

 

* 참고 (구 패스워드 방식으로 생성)

mysql> create user 'sysdocu'@'localhost' identified with mysql_native_password by '12345678';

mysql> flush privileges;

 

 

4. 사용자 권한 (DB 접근 권한 부여)

생성한 sysdocu 사용자로 접근하고 싶은 DB 명을 명시해줍니다. 아래는 sysdocu DB 접근 예시입니다.

mysql> grant all privileges on sysdocu.* to 'sysdocu'@'localhost'; 
mysql> grant grant option on sysdocu.* to 'sysdocu'@'localhost'; 

mysql> flush privileges;

 

반응형

댓글()

MySQL 중복된 데이터만 조회하기

리눅스/MySQL|2020. 10. 23. 15:59
반응형

아래 쿼리 예제는 contents 테이블에서 title 컬럼의 값이 중복일 때, title 과 개수를 출력 합니다.


SELECT title, count(*) as CNT FROM contents GROUP BY title HAVING CNT > 1;


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

| title              | CNT |

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

| family         |   2 |

| other           |   3 |

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

2 rows in set (0.00 sec)



반응형

댓글()

MySQL 8 계정 패스워드 변경 (일반 변경, 분실 변경)

리눅스/MySQL|2020. 9. 1. 15:45
반응형

아래는 root 계정의 패스워드를 변경하는 방법입니다.

 

 

1) root 패스워드를 알고 있을 경우

 

(mysql 로그인 후)

mysql> use mysql;

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '12345678';

mysql> flush privileges;

 

* 위에서 패스워드 암호형식은 mysql_native_password 또는 caching_sha2_password 가 있습니다.

 

2) root 패스워드를 모를 경우

 

# systemctl stop mysql

 

패스워드를 체크하지 않도록 설정 파일 옵션 추가

- 설정 파일 : /etc/mysql/mysql.conf.d/mysql.cnf

- 추가 옵션 : [mysqld] 섹션에 아래 옵션 추가

                       skip-grant-tables

 

# systemctl start mysql

 

# mysql -p

Enter password: (비밀번호 없이 그냥 엔터)

 

(mysql 로그인 후)

mysql> use mysql;

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '12345678';

mysql> flush privileges;

 

* 위에서 패스워드 암호형식은 mysql_native_password 또는 caching_sha2_password 가 있습니다.

 

설정 파일 옵션 제거 후 다시 mysql 재시작

 

# systemctl restart mysql

 

반응형

댓글()

원격 DB 테이블 연결하기

리눅스/MySQL|2020. 8. 13. 11:03
반응형

DB1 에서 우선 테이블 생성(일반적인 create 문, 물론 이미 생성된 table을 사용해도 된다. 테스트를 위해 새로 create)

 

CREATE TABLE `db_test1` (
  `a1` varchar(10) DEFAULT NULL,
  `a2` varchar(10) DEFAULT NULL,
  `a3` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

DB2 에서 federated 테이블을 생성해야 한다.

 

CREATE TABLE `db_test1` (
  `a1` varchar(10) DEFAULT NULL,
  `a2` varchar(10) DEFAULT NULL,
  `a3` varchar(11) DEFAULT NULL
) ENGINE=FEDERATED DEFAULT CHARSET=utf8

CONNECTION='mysql://접속ID:패스워드@도메인(또는 IP):포트/datebase명(ex:DB1)/테이블명(ex:db_test1)';

 

주의)

1. 컬럼명을 똑같이 맞춰줘야 한다.

2. 원본 데이터 db에 스키마가 바뀌면, federated 테이블을 drop하고 다시 생성해야 한다.

 -> federated 테이블은 스키마 변경 불가. 드랍하고 다시 create해야함

3. 패스워드에 '@' 골뱅이가 들어가면 안된다. 패스워드 변경해야함



출처: https://jang8584.tistory.com/245 [개발자의 길]

 

반응형

댓글()

MySQL 테이블 partition 설정 하기

리눅스/MySQL|2020. 6. 30. 12:00
반응형

1. 지원 확인


mysql 에 로그인하여 아래 명령으로 지원 여부를 확인 합니다.


mysql> show variables like '%partition%;    // have_partitioning 항목 확인


MySQL 5.6.29 버전부터는 아래 명령으로 확인이 가능 합니다.


mysql> show plugins;  // partition 항목 확인



2. 사용 예제


파티셔닝은 테이블의 데이터가 많거나 용량 사이즈가 커서 데이터 입출력이 느린 경우 사용합니다.

여기에서는 처리를 빠르게 하기 위해 데이터를 연도를 기준으로 나누는 예제를 준비 하였습니다.



1) 기존 일반 테이블을 파티셔닝 테이블로 변경


(일반 테이블 생성)


mysql> create table test (id int(10) AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Insert_time DATETIME);


(파티셔닝 적용)


mysql> alter table test PARTITION BY RANGE (TO_DAYS(Insert_time))

(

PARTITION p2017 VALUES LESS THAN (TO_DAYS('2018-01-01')),

PARTITION p2018 VALUES LESS THAN (TO_DAYS('2019-01-01')),

PARTITION p2019 VALUES LESS THAN (TO_DAYS('2020-01-01')),

PARTITION p2020 VALUES LESS THAN (TO_DAYS('2021-01-01')),

partition eternal values less than MAXVALUE

);


위 네 개의 조건에 해당되지 않는 데이터는 (2021년 이후 데이터) eternal 이라는 파티션에 저장 하도록 했습니다.

   (생략 가능)

* 파티션 이름은 반드시 영문으로 시작해야 합니다.

* LESS 는 미만을 뜻합니다.

* 추후에 2021년도 파티션 생성을 원할 경우 MAXVALUE 삭제 후 2021 년, MAXVALUE 를 차례로 다시 생성하는 방법으로 추가가 가능합니다.


mysql> alter table test drop partition eternal;

mysql> alter table test add partition (PARTITION p2021 VALUES LESS THAN (TO_DAYS('2022-01-01'))); 

mysql> alter table test add partition (PARTITION eternal VALUES LESS THAN MAXVALUE);


* 파티션 설정 쿼리 실행시 PRIMARY KEY 관련 에러가 출력 될 수 있습니다.

ERROR 1503 (HY000) at line 25: A PRIMARY KEY must include all columns in the table's partitioning function


이경우 show create table {테이블 이름} 을 실행하여 출력 내용을 참고 합니다.


PRIMARY KEY (`id`) 이렇게 있으면 안되고

KEY `id` (`id`) 이렇게 되어 있어야 됩니다.



2) 처음부터 파티셔닝 테이블 생성


mysql> CREATE TABLE test (

  id int(10) AUTO_INCREMENT,

  Name varchar(20),

  Insert_time DATETIME,

  KEY id (id)

) ENGINE=InnoDB CHARSET=utf8

PARTITION BY RANGE(TO_DAYS(Insert_time)) (

  PARTITION p2017 VALUES LESS THAN (TO_DAYS('2018-01-01')),

  PARTITION p2018 VALUES LESS THAN (TO_DAYS('2019-01-01')),

  PARTITION p2019 VALUES LESS THAN (TO_DAYS('2020-01-01')),

  PARTITION p2020 VALUES LESS THAN (TO_DAYS('2021-01-01')),

  partition eternal values less than MAXVALUE

);



3) 파티션 추가 & 삭제


위에서 파티션 추가 예시처럼 사용하시면 됩니다.

mysql> alter table test add partition (PARTITION p2021 VALUES LESS THAN (TO_DAYS('2022-01-01'))); 

mysql> alter table test drop partition p2021;



4) 파티션 없는 일반 테이블로 변경 (데이터 합치기)


mysql> alter table test remove partitioning;



반응형

댓글()