Posted
Filed under 프로그래밍/PHP
230723181353581862 내용이 230723181353582000 으로 바뀌면서 엑셀로 만들어지는 신기한일이 생겼다.

config/excel.php 에서

'value_binder' => [
'default' => Maatwebsite\Excel\DefaultValueBinder::class,
],

이부분을

'value_binder' => [
'default' => PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class,
],

이렇게 바꾸면 해결된다.


2023/08/08 14:54 2023/08/08 14:54
Posted
Filed under 프로그래밍
외래키로 연결되어있어 삭제할때 오류가 날수 있다.
이럴때 외래키 데이터 무시하고 그냥 삭제하고 싶을때 사용하자

SET session_replication_role = 'replica';
delete from 블라블라
SET session_replication_role = 'origin';
2023/06/21 16:42 2023/06/21 16:42
Posted
Filed under 프로그래밍

파티션 설계

파티션 사용을 고려해야 할 상황

  • 파티션 테이블은 단일 테이블 사이즈가 20G 이상이 예상될 때 고려하는 것이 좋다.
  • 일반적으로 이력/내역과 같이 장기간 데이터를 보관하는 테이블에 대해서 보관주기를 설정하고, 날짜를 기준으로 RANGE PARTITION으로 구성하는 것을 권장한다.
  • 각 파티션별로 저장될 파일을 따로 지정할 수 있으므로 물리적인 저장소 분리가 필요할 때도 고려해볼 수 있다.
  • 과다한 INSERT가 발생하는 테이블에 대해서는 SUBPARTITION (혹은 PARTITION레벨)에서 HASH나 KEY형식의 파티션을 생성하여 INSERT 경합에 따른 INDEX LATCH나 Mutex 락을 최소화하도록 한다

파티션 제약

  • 파티셔닝 키는 반드시 PK에 포함되어야 한다.
  • Max partition 개수는 8192개이다. (subpartition 수 포함)
  • 추가 제약조건(유니크 속성)을 부여할 수 없다.
  • Innodb partition 테이블에는 foreign key 생성을 할 수 없다.
  • FullText Index를 지원하지 않으며, Temporary table은 파티션 생성이 블가하다.
  • Subpartition은 HASH/KEY PARTITION만 지원한다.
  • 파티션 테이블 ALTER명령어시 DML은 LOCKING된다. (ONLINE DDL수행하더라도 SELECT만 허용)
  • PARTITION TABLE생성후 SQL_MODE변경시 DATA corruption이나 loss 가 발생할 수 있다.
  • 파티션 테이블의 인덱스는 모두 로컬 인덱스이다. 글로벌 인덱스는 지원하지 않는다.
  • 파티션된 테이블에서 데이터는 파티션 내에서만 정렬이 된다.
  • AUTO_INCREMENT 속성을 갖는 테이블에서 파티션을 만들려면 파티션키가 되는 컬럼과 AUTO_INCREMENT 속성을 갖는 컬럼을 묶어서 PK로 생성해야 한다.
  • 파티션키가 되는 컬럼에 NULL이 들어오면 해당 레코드는 가장 작은 파티션으로 들어간다.
  • 파티션 키 값은 정수(INT)를 사용하는 것이 기본이지만 RANGE 파티션과 LIST 파티션에서는 "RANGE COLUMNS" 키워드를 사용하면 INT, STRING, DATE, DATETIME 타입을 그대로 파티션키로 사용할 수 있다.
  • PARTITION BY 표현식에 사용할 수 있는 함수들

ABS(), CEILING(), DAY(), DAYOFMONTH(), DAYOFWEEK(), DAYOFYEAR(), DATEDIFF(), EXTRACT(), FLOOR(), HOUR(), MICROSECOND(), MINUTE(), MOD(), MONTH(), QUARTER(), SECOND(), TIME_TO_SEC(), TO_DAYS(), WEEKDAY(), YEAR(), YEARWEEK()

파티션 타입

  • RANGE 파티션 타입

범위에 따라 파티션을 설정하는 방법

예) 월단위 파티션을 갖는 테이블 생성
CREATE TABLE `test`.`tab_partition` 
(
 `seq` int unsigned auto_increment not null,
 `regist_dt` datetime not null default current_timestamp,
 `contents` varchar(1000),
 PRIMARY KEY (`seq`, `regist_dt`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY RANGE COLUMNS (regist_dt)
(
PARTITION p201601 VALUES LESS THAN ('2016-02-01 00:00:00'),
PARTITION p201602 VALUES LESS THAN ('2016-03-01 00:00:00'),
PARTITION p201603 VALUES LESS THAN ('2016-04-01 00:00:00'),
PARTITION pmaxvalues VALUES LESS THAN MAXVALUE
);
예) 날짜타입을 갖는 테이블에서 연단위 파티션을 갖는 테이블 생성
CREATE TABLE `test`.`tab_partition` 
(
 `seq` int unsigned auto_increment not null,
 `regist_dt` datetime not null default current_timestamp,
 `contents` varchar(1000),
 PRIMARY KEY (`seq`, `regist_dt`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY RANGE (YEAR(regist_dt))
(
PARTITION p2014 VALUES LESS THAN (2015),
PARTITION p2015 VALUES LESS THAN (2016),
PARTITION p2016 VALUES LESS THAN (2017),
PARTITION pmaxvalues VALUES LESS THAN MAXVALUE
);
  • LIST 파티션 타입

목록에 따라 파티션을 설정하는 방법

예)
CREATE TABLE `test`.`tab_partition` 
(
 `seq` int unsigned auto_increment not null,
 `region_cd` varchar(10) not null,
 `regist_dt` datetime not null default current_timestamp,
 `contents` varchar(1000),
 PRIMARY KEY (`seq`, `region_cd`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY LIST COLUMNS (`region_cd`)
(
PARTITION p_asia VALUES IN ('KOREA', 'CHINA'),
PARTITION p_europe VALUES IN ('FRANCE', 'ITALIA'),
PARTITION p_america VALUES IN ('CANADA', 'USA'),
PARTITION p_other VALUES IN (NULL)
);
  • HASH 파티션 타입

파티션은 필요하지만 파티션할 기간이나 특정 값의 집합을 정의하기 모호할 때 사용하는 파티션 타입이다.

예)
CREATE TABLE `test`.`tab_partition` 
(
 `seq` int unsigned auto_increment not null,
 `regist_dt` datetime not null default current_timestamp,
 `contents` varchar(1000),
 PRIMARY KEY (`seq`, `regist_dt`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY HASH (TO_DAYS(regist_dt))
PARTITIONS 12;

Partition Pruning의 한계

Partition Pruning 이란? 조건에 부합하는 파티션만 선택적으로 사용하게 하는 기능

  • 명시적으로 파티션키에 해당하는 실제 값을 정의해야만 특정 파티션을 선택한다.
  • RANGE, REF, EQ_REF 등올 조인시 해당 정보를 기준으로 특정 파티션을 선택하지 못한다.
조인방식 설명
RANGE =, <>, >, >=, <, <=, IS NULL, BETWEEN, IN 연산자를 사용한 비교/범위 검색
REF PRIMARY KEY 또는 UNIQUE INDEX가 아닌 일반적인 인덱스를 활용한 JOIN
EQ_REF PRIMARY KEY 또는 UNIQUE INDEX를 활용한 JOIN


출처 : https://good-dba.gitbooks.io/mariadb-sql-for-oracleuser/content/c02_4_partition_design.html
2023/05/11 10:10 2023/05/11 10:10
Posted
Filed under 프로그래밍
모든 작업 root에서 진행
기존에 swap없는 상태에서 시작

fallocate -l 8G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
sysctl vm.swappiness=10


vi /etc/sysctl.conf

맨 아래에 추가 (나는 값을 20정도로 주고 있다)
vm.swappiness=10


2023/04/24 11:33 2023/04/24 11:33
Posted
Filed under 프로그래밍/PHP
add-apt-repository ppa:ondrej/php
apt update
apt install php8.2-fpm



2023/04/24 11:07 2023/04/24 11:07
Posted
Filed under 프로그래밍
dump뜬걸 올리려고 하니 오류가 난다.

#1227 - access denied; you need (at least one of) the super privilege(s) for this operation

create하는곳에서 definer 부분을 아에 삭제한다.

2023/04/19 16:02 2023/04/19 16:02
Posted
Filed under 프로그래밍
dump뜬걸 올리려고 했더니 오류가 난다.

#1118 - row size too large (> 8126). changing some columns to text or blob or using row_format=dynamic or row_format=compressed may help. in current row format, blob prefix of 768 bytes is stored inline.

테이블만드는 곳에서 ROW_FORMAT 값을 DYNAMIC 또는 COMPRESSED 으로 변경해준다.

2023/04/19 16:01 2023/04/19 16:01
Posted
Filed under 프로그래밍
dump뜬걸 올리려고 했더니 오류가 난다.

#1419 - you do not have the super privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

설정에서 log_bin_trust_function_creators을 ON 해준다.

2023/04/19 15:59 2023/04/19 15:59
Posted
Filed under 프로그래밍
apt로 gitlab을 update하는중에 signing key오류가 발생했다
이럴땐 어떻게 하냐고?

키를 다시 발급받아주면 된다.
간단하구만

curl "https://packages.gitlab.com/gpg.key" -o /tmp/omnibus_gitlab_gpg.key
sudo apt-key add /tmp/omnibus_gitlab_gpg.key
sudo apt update
2022/03/11 10:12 2022/03/11 10:12
Posted
Filed under 프로그래밍/JAVA
아니 apt upgrade했더니 젠킨스가 실행이 안된다 ㅋㅋㅋㅋ
업그레이드 안에 자바가 있는데 이게 문제인것이다.

root@devops:~# systemctl status jenkins.service
● jenkins.service - Jenkins Continuous Integration Server
 Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
 Drop-In: /etc/systemd/system/jenkins.service.d
 └─override.conf
 Active: failed (Result: exit-code) since Fri 2022-03-11 09:51:28 KST; 9s ago
 Process: 2226 ExecStart=/usr/bin/jenkins (code=exited, status=1/FAILURE)
 Main PID: 2226 (code=exited, status=1/FAILURE)

Mar 11 09:51:27 devops systemd[1]: jenkins.service: Main process exited, code=exited, status=1/FAILURE
Mar 11 09:51:27 devops systemd[1]: jenkins.service: Failed with result 'exit-code'.
Mar 11 09:51:27 devops systemd[1]: Failed to start Jenkins Continuous Integration Server.
Mar 11 09:51:28 devops systemd[1]: jenkins.service: Scheduled restart job, restart counter is at 5.
Mar 11 09:51:28 devops systemd[1]: Stopped Jenkins Continuous Integration Server.
Mar 11 09:51:28 devops systemd[1]: jenkins.service: Start request repeated too quickly.
Mar 11 09:51:28 devops systemd[1]: jenkins.service: Failed with result 'exit-code'.
Mar 11 09:51:28 devops systemd[1]: Failed to start Jenkins Continuous Integration Server.


젠킨스는 8과 11만을 지원하기때문에 자바 버전을 변경해줘야 한다.
root@devops:/# update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).

 Selection Path Priority Status
------------------------------------------------------------
 0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 auto mode
* 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
 2 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 manual mode
 3 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode

Press <enter> to keep the current choice[*], or type selection number: 




2022/03/11 10:08 2022/03/11 10:08
Posted
Filed under 프로그래밍
업데이트를 했더니 갑자기 serverTimezone을 설정하라고 하면서 DB탭 로딩이 안된다
이때는 설정->고급->serverTimezone 프로퍼티를 추가해주면 된다.

UTC 또는 Asia/Seoul 둘을 제일 많이 사용할것 같은데
우리는 대한민국 시간으로 개발하기때문에 Asia/Seoul을 넣어줬다.

사용자 삽입 이미지


잘된다.


2022/02/23 13:59 2022/02/23 13:59
Posted
Filed under 맥 (mac)
몬터레이 업데이트를 했더니 php가 아에 삭제되어버렸다.
애플에서 기본으로 설치되어있던 php를 이번부터 설치하지 않기로 한건데
이미 깔려있는것도 지워버린다.

brew install php 으로 간단하게 설치할수 있으나 8.x를 설치해버리네???
내가 필요한건 7.4 인데

brew install php@7.4 로 일단 7.4를 설치한다.
잘설치됐나보려고 php -v 하니 그런 파일 없다고 한다.

별도 버전을 지정해서 억지로 설치한거라 기본으로 연결이 안되어있는거다.

brew link --overwrite --force php@7.4

이걸로 기본 버전으로 연결해준다.

잘된다.
2021/12/15 16:00 2021/12/15 16:00
Posted
Filed under 프로그래밍
오류들도 한글로 나오니 더 보기가 편해졌고  안보이던 메뉴들이 눈에 들어오기 시작했다.
안써봤던 기능들 찾아보고 사용해보도록 하자


사용자 삽입 이미지
사용자 삽입 이미지
2021/07/28 10:45 2021/07/28 10:45
Posted
Filed under 프로그래밍
해당 div로 바로 불러온다.
modal에도 적용가능
응용하면 일부 div내용을 새로고침효과를 줄수도 있겠다.

$("#modal-body").load('/live/food?seq_id=1', function() {
 });
2021/02/26 11:58 2021/02/26 11:58
Posted
Filed under 프로그래밍
몇일전 업데이트에서 드디어 markdown preview가 정상 작동하기 시작했다.
php개발에 필요한 모든게 정상 작동하기때문에 업무용으로도 사용할수 있을것 같다.

사용자 삽입 이미지
2021/02/02 00:29 2021/02/02 00:29