728x90

MariaDB 설치: 이중화 설정을 위해 MariaDB를 두 대의 서버에 각각 설치합니다.

마스터 서버 설정: 두 대의 서버 중 하나를 마스터 서버로 설정합니다. 마스터 서버의 설정 파일(my.cnf)에서 다음과 같이 설정합니다.

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=database_name

위 설정은 마스터 서버의 server-id를 1로 설정하고, binary logging을 활성화하며, database_name 데이터베이스의 모든 변경 사항을 로깅하도록 설정합니다.

슬레이브 서버 설정: 다른 서버를 슬레이브 서버로 설정합니다. 슬레이브 서버의 설정 파일(my.cnf)에서 다음과 같이 설정합니다.

[mysqld]
server-id=2
log-bin=mysql-bin
binlog-do-db=database_name

마스터 서버와 마찬가지로, 슬레이브 서버의 server-id를 2로 설정하고, binary logging을 활성화하며, database_name 데이터베이스의 모든 변경 사항을 로깅하도록 설정합니다.

마스터와 슬레이브 간의 계정 설정: 마스터와 슬레이브 간에 데이터를 동기화하려면 마스터 서버에서 슬레이브 서버에 대한 계정을 생성해야 합니다. 다음 SQL 문을 사용하여 계정을 생성합니다.

CREATE USER 'replication_user'@'slave_server_ip' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_server_ip';

위 SQL 문에서는 슬레이브 서버의 IP 주소를 slave_server_ip로 대체하고, password를 실제 암호로 대체합니다.

마스터 서버에서 binlog 정보 확인: 마스터 서버에서 다음 명령을 실행하여 binlog 파일 이름과 위치 정보를 확인합니다.

SHOW MASTER STATUS;

위 명령은 마스터 서버의 binlog 파일 이름과 파일 위치를 확인할 수 있습니다.

슬레이브 서버에서 replication 설정: 슬레이브 서버에서 다음 명령을 실행하여 마스터 서버와의 replication을 설정합니다.

CHANGE MASTER TO
MASTER_HOST='master_server_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001', -- 마스터 서버에서 확인한 파일 이름으로 대체
MASTER_LOG_POS=4;

위 명령에서는 마스터 서버의 IP 주소, replication_user 계정, 암호 및 마스터 서버에서 확인한 binlog 파일 이름 및 위치를 사용하여 슬레이브 서버의 replication을 설정합니다.

 

슬레이브 서버 시작: 슬레이 이중화 설정을 마치고 슬레이브 서버를 시작합니다. 이제 마스터 서버에서 데이터를 변경하면 이 변경 사항이 슬레이브 서버로 전파됩니다.

 

이중화 동기화 확인: 이제 마스터 서버와 슬레이브 서버가 동기화되는지 확인해야 합니다. 슬레이브 서버에서 다음 명령을 실행하여 replication 상태를 확인합니다.

SHOW SLAVE STATUS\G

위 명령은 슬레이브 서버의 replication 상태를 상세히 보여줍니다. Slave_IO_Running과 Slave_SQL_Running 항목이 모두 'Yes'로 설정되어 있어야 마스터 서버와 슬레이브 서버가 동기화되었음을 나타냅니다.

 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

728x90
728x90
SELECT DAYNAME(date_column) as day, COUNT(*) as count
FROM table_name
WHERE date_column BETWEEN DATE_SUB(NOW(), INTERVAL 1 WEEK) AND NOW()
GROUP BY DAYNAME(date_column)

위 쿼리에서, table_name은 데이터를 가져올 테이블 이름을 나타내며, date_column은 날짜 정보가 저장된 컬럼 이름입니다. DAYNAME(date_column)을 통해 날짜 정보에서 요일 정보를 추출하고, COUNT(*)을 통해 해당 요일의 데이터 개수를 계산합니다. WHERE절에서 BETWEEN을 사용하여 1주일 전부터 현재까지의 데이터를 선택하고, GROUP BY절을 사용하여 요일별로 데이터를 그룹화합니다.

이렇게 작성한 쿼리를 실행하면, 각 요일별 데이터 개수를 나타내는 결과가 출력됩니다. 결과에서 day 열은 요일을 나타내는 문자열(예: Monday)이고, count 열은 해당 요일의 데이터 개수입니다. 필요에 따라 쿼리를 수정하여 요일별로 다른 계산을 수행할 수도 있습니다.

728x90
728x90
SELECT MONTH(date_column) as month, COUNT(*) as count
FROM table_name
WHERE date_column BETWEEN DATE_SUB(NOW(), INTERVAL 1 YEAR) AND NOW()
GROUP BY MONTH(date_column)

위 쿼리에서, table_name은 데이터를 가져올 테이블 이름을 나타내며, date_column은 날짜 정보가 저장된 컬럼 이름입니다. MONTH(date_column)을 통해 날짜 정보에서 월 정보를 추출하고, COUNT(*)을 통해 해당 월의 데이터 개수를 계산합니다. WHERE절에서 BETWEEN을 사용하여 1년 전부터 현재까지의 데이터를 선택하고, GROUP BY절을 사용하여 월별로 데이터를 그룹화합니다.

이렇게 작성한 쿼리를 실행하면, 각 월별 데이터 개수를 나타내는 결과가 출력됩니다. 결과에서 month 열은 월을 나타내는 숫자(1~12)이고, count 열은 해당 월의 데이터 개수입니다. 필요에 따라 쿼리를 수정하여 월별로 다른 계산을 수행할 수도 있습니다.

728x90
728x90
오늘 Data 가져오는 방법
SELECT regi_date, reg_member_name,reg_member_phone FROM bugo_member 
WHERE regi_date BETWEEN DATE_ADD(NOW(),INTERVAL -1 DAY ) AND NOW();

일주일 Data 가져오는 방법
SELECT regi_date, reg_member_name,reg_member_phone FROM bugo_member 
WHERE regi_date BETWEEN BETWEEN DATE_ADD(NOW(),INTERVAL -1 WEEK ) AND NOW();


한달 Data 가져오는 방법
SELECT regi_date, reg_member_name,reg_member_phone FROM bugo_member 
WHERE regi_date BETWEEN DATE_COLUMN BETWEEN DATE_ADD(NOW(),INTERVAL -1 MONTH ) AND NOW();
728x90
728x90

 

목동코딩 : 날짜계산

​

지금 진행하는 프로젝트가 시자을 계산하여 요금을 계산하는 업무이다 보니, 이번 기회에 Mysql에서 시간, 날자 등을 계산하는 방법을 정리해둔다.

SELECT TIMESTAMPDIFF(SECOND, '2021-01-01', '2021-01-02');
SELECT TIMESTAMPDIFF(MINUTE, '2021-03-01', '2021-03-31');
SELECT TIMESTAMPDIFF(HOUR, '2021-03-01', '2021-03-31');
SELECT TIMESTAMPDIFF(DAY, '2021-03-01', '2021-03-31');
SELECT TIMESTAMPDIFF(WEEK, '2021-03-01', '2021-03-31');
SELECT TIMESTAMPDIFF(MONTH, '2021-03-01', '2021-03-31');
SELECT TIMESTAMPDIFF(QUARTER, '2021-03-01', '2021-03-31');
SELECT TIMESTAMPDIFF(YEAR, '2020-01-01', '2021-03-31');
SELECT TIMESTAMPDIFF(QUARTER, '2020-01-01', '2021-03-31');

SELECT DATEDIFF('2020-01-01 00:009:00', '2021-03-31 00:00:00');
Declare TIME_DIFF int;

SELECT TIMESTAMPDIFF(SECOND, '2021-01-01', '2021-01-02') into TIME_DIFF ;

이렇게 계산한 TIME_DIFF 를 계산할 Table에 반영한다

 

 

 

목동코딩 코딩교육

728x90
728x90

목동코딩:

서버를 새롭게 설치하면 이거 저거 설정할 내용이 조금 많다.

아마도 그래서 도커를 많이 사용하는 것 같다. 하지만 대량으로 작업할게 아니면 , 기억을 리프레쉬 할겸해서

나는 그때그때 새롭게 설치를 하곤한다.

이번에도 새로운 프랜차이즈 서버를 설치하는 중에 기존 서버에서는 잘 돌아가는 기능인데 , 새로 설치한 우분투 서버에서는 페이지를 표시하지 않는다.

그래서 php.ini를 수정해서 에러를 표시하려 했지만 , 어떤 이유인지 에러가 표시 안된다.

그래서 검색을 해서 알게된 방법이 아래와 같다. 이 내용을 보니 mysql 문제인지를 알수있었다.

Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /var/www/html/

에러를 표시하는 방법

<?php error_reporting( E_ALL ); ini_set( "display_errors", 1 ); ?>

에러를 표시 막는 방법

<?php ini_set( 'display_errors', '0' ); ?>

 

 

목동코딩  코딩교육

728x90
728x90

목동코딩학원 :

처음에는 간단하게 본인인증 받아서 회원관리만 하면 된다고 생각한 웹사이트였는데,

막상 운영을 해서 입력을 받아보니 회원들의 내용 수정이 의외로 많다는 걸 알았습니다.

특히 이름이 변경되는 경우가 있기에 무엇을 수정했는지 로그를 작성할 필요가 생겨서

오래만에 Trigger를 만들어 봤습니다.

간단하게 작동을 하도록 했습니다.

enroll 테이블의 내용이 수정되기 전에 enrollBefore 테이블에 기존 정보를 Insert 하는 정도입니다

아래의 트리거를 작성하여서 MySql에서 작동시킨후 약 1시간뒤에 DB에 가서 확인해보니, 역시

수정한 내역이 많았습니다.

아! 이렇게 많았구나 하는 생각이 들었습니다.

마치 예전에 집앞에 세워둔 고장난 자전거가 있었는데, 아침에 일어나니 사라졌을때, CCTV를 획인하니

새벽에 술취한 사람이 고장난 자전거를 끌고 가는 장면을 확인 하고 후련했던거 처럼 기분이 좋았습니다. ㅎㅎ

30대에 오라클로 시스템 구축할때를 빼고는 간단하지만 오랜만에 트리거 작업을 했습니다.

별다른 프로그램의 수정이 없이 작업이 되어서 게으른 개발자에게는 큰 축복입니다.

CREATE DEFINER=`appnet_remote`@`%` TRIGGER `enrollchange` 
BEFORE UPDATE ON `enroll` 
FOR EACH ROW BEGIN
INSERT INTO enrollbefore (
	Id, 
	Name, 
	Birthdate, 
	Mobile, 
	Email, 
	BludType, 
	Religion, 
	Career, 
	zip,
	addr1,
	addr2,
	Recommender,
	RecommenderMobile,
	ActivityArea,
	Job,
	Interest,
	MajorField,
	Message,
	sms,
	RegiDate
	) VALUES( 
	OLD.Id, 
	OLD.Name, 
	OLD.Birthdate, 
	OLD.Mobile, 
	OLD.Email, 
	OLD.BludType, 
	OLD.Religion, 
	OLD.Career, 
	OLD.zip,
	OLD.addr1,
	OLD.addr2,
	OLD.Recommender,
	OLD.RecommenderMobile,
	OLD.ActivityArea,
	OLD.Job,
	OLD.Interest,
	OLD.MajorField,
	OLD.Message,
	0,
	OLD.RegiDate
	);
END

다음과 같이 작성하면 입력을 우선으로 하고 이미 입력된 자료가 있으면 update를 하는 방식이다

INSERT INTO t2(id,pass) VALUES (NEW.id, NEW.pass) ON DUPLICATE KEY UPDATE pass=NEW.pass;

 

목동코딩학원 지금은 10살이지만 아두이노를 좋아하는 초등생

 

728x90

+ Recent posts