[MySQL] sysdate와 now의 차이점

▶︎ sysdate now 차이

MySQL에서 날짜 관련된 처리 함수는 대표적으로 sysdate now 있습니다.

두가지 모두 시간을 표시한다는 점에서는 차이가 없습니다.

 

mysql> select sysdate();
+---------------------+
| sysdate()           |
+---------------------+
| 2021-03-28 23:41:04 |
+---------------------+
1 row in set (0.00 sec)

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2021-03-28 23:41:10 |
+---------------------+
1 row in set (0.00 sec)

 

그러나 사용용도에 따르면 속성이 완전히 다릅니다.

mysql> select now(), sleep(2), now();
+---------------------+----------+---------------------+
| now()               | sleep(2) | now()               |
+---------------------+----------+---------------------+
| 2021-03-28 23:42:25 |        0 | 2021-03-28 23:42:25 |
+---------------------+----------+---------------------+
1 row in set (2.00 sec)

mysql> select sysdate(), sleep(2), sysdate();
+---------------------+----------+---------------------+
| sysdate()           | sleep(2) | sysdate()           |
+---------------------+----------+---------------------+
| 2021-03-28 23:42:48 |        0 | 2021-03-28 23:42:50 |
+---------------------+----------+---------------------+
1 row in set (2.01 sec)

 

차이가 느껴지시나요???

 

정리하자면

now 실행한 시점의 시간을 그대로 계속 유지합니다. 중간에 시간이 지나더라도 실행 시간 혹은 시작시간이 보장됩니다.

sysdate 시간이 흐른 만큼의 시간을 표현합니다. 중간에 시간이 흐르면 시간이 시간만큼 흐른 뒤의 시간을 출력하게 됩니다.

그래서 사용용도에 따른 시간 출력 방법을 사용하시면 됩니다.

 

 

▶︎ 복제 상황에서의 유의사항

복제 환경에서는 다음과 같은 문제가 발생할 수도 있습니다.

바이너리 로그 포멧이  Statement방식인 경우 마스터와 슬레이브의 시간 차이가 발생할 있습니다.

마스터의 수행시간이 09 00분이더라도 슬레이브에서는 09 00분이 아닐 있습니다.

Statement방식은 슬레이브에서 마스터에서 수행되었던 SQL문을 그대로 수행시키는 방법이기 때문에 슬레이브에서 sysdate 실행하면 마스터와의 시간차가

반드시 발생하게 됩니다. 그래서 반드시 row방식이나 mixed방식을 이용해야 합니다.

 

그리고 다음과 같은 방법으로 sysdate now처럼 사용하는 방법도 있습니다.

sysdate now 같은 형식으로 사용하기 위해서는 my.cnf 다음과 같은 환경 파라미터를 설정합니다.

[mysqld]
zsysdate-is-now

Designed by JB FACTORY