메모용 글입니다.

1. mysql은 Clustered Index가 기본이고 모든 테이블에 존재함을 감안
2. 가능하면 불필요한 secondary index 추가는 안함(필요성에 의해서 IDX_uid가 추가되었지만)
3. 파티션 add가 안되어서 서비스 장애가 발생하는걸 방어하기 위해서 MAXVALUE 처리
4. 월 파티션으로 생성
 - 필요에 따라서 일 파티션으로 줄여도됨. 다만 mysql 파티션 최대 갯수의 제한이 있으니 서비스 특성 고민


내용

  1. DDL
-- 로그인 이력 테이블 추가(파티션 추가가 안되었을 때 방어로직으로 MAXVALUE 파티션까지 처리 해둠)
CREATE TABLE `login_hist_test`(  
  `login_ymdt` DATETIME NOT NULL COMMENT '로그인일시',
  `uid` BIGINT(19) UNSIGNED NOT NULL COMMENT '유저ID',  
  `req_ip` VARCHAR(50) NOT NULL COMMENT '요청자IP',
  `device_model` VARCHAR(100) COMMENT '요청 디바이스 모델',
  `country` VARCHAR(6) COMMENT 'Country 값',
  PRIMARY KEY (`login_ymdt`, `uid`),  
  INDEX `IDX_uid` (`uid`)
) COMMENT='로그인이력'
PARTITION BY RANGE (TO_DAYS(login_ymdt))
(
PARTITION P_2018_11 VALUES LESS THAN (TO_DAYS('2018-12-01')),
PARTITION P_max VALUES LESS THAN (MAXVALUE)
);

-- 파티션 추가(REORGANIZE로 방어 파티션 P_max까지 수정)
ALTER TABLE login_hist_test REORGANIZE PARTITION P_max INTO (
PARTITION P_2018_12 VALUES LESS THAN (TO_DAYS('2019-01-01')),
PARTITION P_max VALUES LESS THAN MAXVALUE
);


  1. 결과
    1. 최초 테이블 생성 결과
    2. 파티션 추가




Posted by 고잉고

참고 : https://www.howtoforge.com/tutorial/how-to-install-mysql-57-on-linux-centos-and-ubuntu/

Step 1 - Add New Repository
yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
(대상 버전은 https://dev.mysql.com/downloads/repo/yum/ 에서 최신버전 확인 가능)


Step 2 - Install MySQL 5.7
yum -y install mysql-community-server


Step 3 - Start MySQL and Enable Start at Boot Time
systemctl start mysqld
systemctl enable mysqld

#부팅시 자동으로 시작되도록 설정되어 있는지 확인
systemctl is-enabled mysqld

#3306포트로 실행되어 있는지 확인
netstat -plntu


Step 4 - Configure the MySQL Root Password
MySQL 5.7 is installed and started. As you can see, the MySQL root password for Ubuntu has been configured during the installation process, so we do not need to configure or reset the password on Ubuntu. But this is not the case on CentOS.
On CentOS 7, MySQL will generate a strong default password when MySQL is started the first time, the default password is shown in the mysqld.log file. You can use the grep command below for showing the default MySQL password.
grep 'temporary' /var/log/mysqld.log

Connect to the MySQL shell with the default password. (로그 파일에서 root 계정의 임시 비밀번호 확인 후 접속)
mysql -u root -p
TYPE DEFAULT PASSWORD


Now replace the default password with a new and strong password, with the MySQL query below.

ALTER USER 'root'@'localhost' IDENTIFIED BY '신규암호';
flush privileges;


#추가설정
mysql> status
characterset 값이 latin1 인것을 확인할 수 있는데, 이런 characterset 등  몇가지는 기본적으로 바꾸는게 좋다

설정 참고(inno db 튜닝 등도 하면 좋지만 이 글에서는 pass)
# vi /etc/my.cnf  후 아래 내용 참고하여 필요 부분 변경 후 -> systemctl restart mysqld -> mysql 접속해서 status로 확인하면 변경됨을 확인할 수 있음

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

character-set-server=utf8
collation-server=utf8_general_ci
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8

character-set-client-handshake = FALSE
skip-character-set-client-handshake

[mysqldump]
default-character-set=utf8

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

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

[client]
default-character-set = utf8

[mysql]
default-character-set=utf8





Posted by 고잉고