MySQL Case-时间问题导致MySQL实例批量宕机

数据库宕机信息

客户环境多套数据库宕机,error log信息如下:

  • 2021-08-17T13:17:18.033537+08:00 4 [Note] Got an error reading communication packets
  • 2021-08-17T13:17:43.281992+08:00 5 [Note] Got an error reading communication packets
  • 2021-08-17T13:32:21.657931+08:00 8 [Note] Aborted connection 8 to db: 'test' user: 'root' host: '127.0.0.1' (Got an error reading communication packets)
  • 2021-08-17T13:32:27.918403+08:00 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 5250ms. The settings might not be optimal. (flushed=1465 and evicted=0, during the time.)
  • 2021-08-17T14:24:21.727815+08:00 12 [Note] Aborted connection 12 to db: 'recover' user: 'root' host: 'localhost' (Got timeout reading communication packets)
  • 2021-08-17T14:43:19.642209+08:00 14 [Note] Got an error reading communication packets
  • 2021-08-17T15:43:40.972887+08:00 26 [Note] Got an error reading communication packets
  • 2021-08-17T17:02:02.057400+08:00 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 10947ms. The settings might not be optimal. (flushed=408 and evicted=0, during the time.)
  • 2021-08-17T17:02:29.974975+08:00 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4875ms. The settings might not be optimal. (flushed=328 and evicted=0, during the time.)
  • 2021-08-17T17:03:44.284632+08:00 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 7881ms. The settings might not be optimal. (flushed=4000 and evicted=0, during the time.)
  • 2021-08-17T17:04:07.271494+08:00 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 8948ms. The settings might not be optimal. (flushed=4000 and evicted=0, during the time.)
  • Status information:
  • Current dir: /data/mysql_data/
  • Running threads: 2 Stack size: 262144
  • Current locks:
  • lock: 0x7556b30:
  • lock: 0x74ecee0:
  • lock: 0x7494630:
  • lock: 0x74d6910:
  • lock: 0x74bdb70:
  • lock: 0x74b73f0:
  • lock: 0x74af850:
  • lock: 0x211f760:
  • lock: 0x211f680:
  • lock: 0x211f5a0:
  • lock: 0x211f4c0:
  • lock: 0x211f3e0:
  • lock: 0x211f300:
  • lock: 0x211f220:
  • lock: 0x211f140:
  • lock: 0x211f060:
  • lock: 0x211fd80:
  • lock: 0x211c560:
  • lock: 0x2120640:
  • lock: 0x2120560:
  • lock: 0x2120480:
  • lock: 0x21203a0:
  • lock: 0x21202c0:
  • lock: 0x21201e0:
  • lock: 0x2120100:
  • lock: 0x2120020:
  • lock: 0x211dce0:
  • lock: 0x211f840:
  • lock: 0x211e120:
  • lock: 0x211e040:
  • lock: 0x211df60:
  • lock: 0x211de80:
  • lock: 0x211ddc0:
  • lock: 0x211ff40:
  • lock: 0x211fe60:
  • lock: 0x211e580:
  • lock: 0x211e4a0:
  • lock: 0x211e3c0:
  • lock: 0x211e740:
  • lock: 0x211bca0:
  • lock: 0x211fca0:
  • lock: 0x211cc60:
  • lock: 0x211c9c0:
  • lock: 0x211cb80:
  • lock: 0x211c8e0:
  • lock: 0x211caa0:
  • lock: 0x211d200:
  • lock: 0x211d2c0:
  • lock: 0x211d380:
  • lock: 0x211c480:
  • lock: 0x211c3a0:
  • lock: 0x211c800:
  • lock: 0x211c2c0:
  • lock: 0x211c720:
  • lock: 0x211c1e0:
  • lock: 0x211c640:
  • lock: 0x211cfa0:
  • lock: 0x211d060:
  • lock: 0x211d120:
  • lock: 0x211c100:
  • lock: 0x211be60:
  • lock: 0x211c020:
  • lock: 0x211bd80:
  • lock: 0x211bf40:
  • lock: 0x211cd40:
  • lock: 0x211ce00:
  • lock: 0x211cec0:
  • lock: 0x211f920:
  • lock: 0x211fbc0:
  • lock: 0x211fae0:
  • lock: 0x211fa00:
  • lock: 0x211ed40:
  • lock: 0x211ec60:
  • lock: 0x211eb80:
  • lock: 0x211eaa0:
  • lock: 0x211e9c0:
  • lock: 0x211eec0:
  • lock: 0x211e900:
  • lock: 0x211e820:
  • lock: 0x211ef80:
  • lock: 0x211e660:
  • lock: 0x211e200:
  • lock: 0x211e2e0:
  • lock: 0x211dc00:
  • lock: 0x211db20:
  • lock: 0x211d7a0:
  • lock: 0x211da40:
  • lock: 0x211d960:
  • lock: 0x211d6c0:
  • lock: 0x211d880:
  • lock: 0x211d460:
  • lock: 0x211d520:
  • lock: 0x211d5e0:
  • lock: 0x211ee00:
  • Key caches:
  • default
  • Buffer_size: 8388608
  • Block_size: 1024
  • Division_limit: 100
  • Age_limit: 300
  • blocks used: 3
  • not flushed: 0
  • w_requests: 0
  • writes: 0
  • r_requests: 6
  • reads: 3
  • handler status:
  • read_key: 15
  • read_next: 5050002
  • read_rnd 0
  • read_first: 17
  • write: 5050100
  • delete 0
  • update: 0
  • Table status:
  • Opened tables: 123
  • Open tables: 108
  • Open files: 18
  • Open streams: 0
  • Memory status:
  • <malloc version="1">
  • <heap nr="0">
  • <sizes>
  • <size from="17" to="32" total="64" count="2"/>
  • <size from="33" to="48" total="192" count="4"/>
  • <size from="49" to="64" total="256" count="4"/>
  • <size from="65" to="80" total="80" count="1"/>
  • <size from="33" to="33" total="66" count="2"/>
  • <size from="49" to="49" total="49" count="1"/>
  • <size from="97" to="97" total="6596" count="68"/>
  • <size from="113" to="113" total="791" count="7"/>
  • <size from="145" to="145" total="290" count="2"/>
  • <size from="273" to="273" total="546" count="2"/>
  • <size from="353" to="353" total="1765" count="5"/>
  • <size from="449" to="449" total="449" count="1"/>
  • <size from="513" to="513" total="1026" count="2"/>
  • <size from="8241" to="8241" total="24723" count="3"/>
  • <size from="8753" to="8753" total="8753" count="1"/>
  • <size from="16369" to="16369" total="49107" count="3"/>
  • <size from="24529" to="24529" total="98116" count="4"/>
  • <size from="32689" to="32689" total="32689" count="1"/>
  • <size from="7729857" to="7729857" total="7729857" count="1"/>
  • </sizes>
  • <total type="fast" count="11" size="592"/>
  • <total type="rest" count="103" size="7954823"/>
  • <system type="current" size="103022592"/>
  • <system type="max" size="103022592"/>
  • <aspace type="total" size="103022592"/>
  • <aspace type="mprotect" size="103022592"/>
  • </heap>
  • <heap nr="1">
  • <sizes>
  • <size from="33" to="33" total="132" count="4"/>
  • <size from="81" to="81" total="81" count="1"/>
  • <size from="145" to="145" total="145" count="1"/>
  • <size from="161" to="161" total="161" count="1"/>
  • <size from="273" to="273" total="273" count="1"/>
  • <size from="353" to="353" total="353" count="1"/>
  • <size from="417" to="417" total="417" count="1"/>
  • <size from="433" to="433" total="433" count="1"/>
  • <size from="449" to="449" total="449" count="1"/>
  • <size from="465" to="465" total="465" count="1"/>
  • <size from="881" to="881" total="881" count="1"/>
  • <size from="897" to="897" total="897" count="1"/>
  • <size from="1361" to="1361" total="1361" count="1"/>
  • <size from="2241" to="2257" total="11221" count="5"/>
  • <unsorted from="897" to="66225" total="2507439" count="303"/>
  • </sizes>
  • <total type="fast" count="0" size="0"/>
  • <total type="rest" count="324" size="2524708"/>
  • <system type="current" size="339668992"/>
  • <system type="max" size="339668992"/>
  • <aspace type="total" size="4124672"/>
  • <aspace type="mprotect" size="4124672"/>
  • </heap>
  • <heap nr="2">
  • <sizes>
  • <size from="81" to="96" total="96" count="1"/>
  • <size from="33" to="33" total="297" count="9"/>
  • <size from="49" to="49" total="147" count="3"/>
  • <size from="65" to="65" total="260" count="4"/>
  • <size from="129" to="129" total="129" count="1"/>
  • <size from="145" to="145" total="145" count="1"/>
  • <size from="481" to="481" total="481" count="1"/>
  • <size from="513" to="513" total="513" count="1"/>
  • <size from="545" to="545" total="545" count="1"/>
  • <size from="561" to="561" total="561" count="1"/>
  • <size from="577" to="577" total="1154" count="2"/>
  • <size from="625" to="625" total="625" count="1"/>
  • <size from="689" to="689" total="689" count="1"/>
  • <size from="737" to="737" total="737" count="1"/>
  • <size from="769" to="769" total="769" count="1"/>
  • <size from="849" to="849" total="849" count="1"/>
  • <size from="945" to="945" total="945" count="1"/>
  • <size from="6257" to="6257" total="6257" count="1"/>
  • <size from="55489" to="55489" total="55489" count="1"/>
  • <unsorted from="33" to="33" total="33" count="1"/>
  • </sizes>
  • <total type="fast" count="1" size="96"/>
  • <total type="rest" count="33" size="70625"/>
  • <system type="current" size="3301376"/>
  • <system type="max" size="3301376"/>
  • <aspace type="total" size="3301376"/>
  • <aspace type="mprotect" size="3301376"/>
  • </heap>
  • <heap nr="3">
  • <sizes>
  • <size from="33" to="48" total="240" count="5"/>
  • <size from="49" to="64" total="64" count="1"/>
  • <size from="65" to="80" total="240" count="3"/>
  • <size from="33" to="33" total="66" count="2"/>
  • <size from="65" to="65" total="65" count="1"/>
  • <size from="241" to="241" total="482" count="2"/>
  • <size from="273" to="273" total="273" count="1"/>
  • <size from="625" to="625" total="625" count="1"/>
  • <size from="1009" to="1009" total="1009" count="1"/>
  • <size from="1025" to="1025" total="1025" count="1"/>
  • <size from="1249" to="1249" total="1249" count="1"/>
  • <size from="1313" to="1313" total="1313" count="1"/>
  • <size from="1585" to="1585" total="1585" count="1"/>
  • <size from="2721" to="2721" total="2721" count="1"/>
  • <size from="16417" to="16417" total="16417" count="1"/>
  • </sizes>
  • <total type="fast" count="9" size="544"/>
  • <total type="rest" count="14" size="26830"/>
  • <system type="current" size="151552"/>
  • <system type="max" size="151552"/>
  • <aspace type="total" size="151552"/>
  • <aspace type="mprotect" size="151552"/>
  • </heap>
  • <heap nr="4">
  • <sizes>
  • <size from="65" to="80" total="80" count="1"/>
  • <size from="81" to="81" total="81" count="1"/>
  • <size from="113" to="113" total="113" count="1"/>
  • <size from="241" to="241" total="241" count="1"/>
  • </sizes>
  • <total type="fast" count="1" size="80"/>
  • <total type="rest" count="3" size="435"/>
  • <system type="current" size="135168"/>
  • <system type="max" size="135168"/>
  • <aspace type="total" size="135168"/>
  • <aspace type="mprotect" size="135168"/>
  • </heap>
  • <heap nr="5">
  • <sizes>
  • <size from="113" to="113" total="113" count="1"/>
  • </sizes>
  • <total type="fast" count="0" size="0"/>
  • <total type="rest" count="1" size="113"/>
  • <system type="current" size="135168"/>
  • <system type="max" size="135168"/>
  • <aspace type="total" size="135168"/>
  • <aspace type="mprotect" size="135168"/>
  • </heap>
  • <heap nr="6">
  • <sizes>
  • <size from="113" to="113" total="113" count="1"/>
  • </sizes>
  • <total type="fast" count="0" size="0"/>
  • <total type="rest" count="1" size="113"/>
  • <system type="current" size="135168"/>
  • <system type="max" size="135168"/>
  • <aspace type="total" size="135168"/>
  • <aspace type="mprotect" size="135168"/>
  • </heap>
  • <heap nr="7">
  • <sizes>
  • <size from="65" to="65" total="65" count="1"/>
  • </sizes>
  • <total type="fast" count="0" size="0"/>
  • <total type="rest" count="1" size="65"/>
  • <system type="current" size="135168"/>
  • <system type="max" size="135168"/>
  • <aspace type="total" size="135168"/>
  • <aspace type="mprotect" size="135168"/>
  • </heap>
  • <heap nr="8">
  • <sizes>
  • </sizes>
  • <total type="fast" count="0" size="0"/>
  • <total type="rest" count="0" size="0"/>
  • <system type="current" size="389120"/>
  • <system type="max" size="389120"/>
  • <aspace type="total" size="389120"/>
  • <aspace type="mprotect" size="389120"/>
  • </heap>
  • <total type="fast" count="22" size="1312"/>
  • <total type="rest" count="480" size="10577712"/>
  • <total type="mmap" count="81" size="362438656"/>
  • <system type="current" size="447074304"/>
  • <system type="max" size="447074304"/>
  • <aspace type="total" size="111529984"/>
  • <aspace type="mprotect" size="111529984"/>
  • </malloc>
  • Events status:
  • LLA = Last Locked At LUA = Last Unlocked At
  • WOC = Waiting On Condition DL = Data Locked
  • Event scheduler status:
  • State : INITIALIZED
  • Thread id : 0
  • LLA : n/a:0
  • LUA : n/a:0
  • WOC : NO
  • Workers : 0
  • Executed : 0
  • Data locked: NO
  • Event queue status:
  • Element count : 0
  • Data locked : NO
  • Attempting lock : NO
  • LLA : init_queue:103
  • LUA : init_queue:111
  • WOC : NO
  • Next activation : never
  • 2021-08-17T17:08:10.123540+08:00 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 8773ms. The settings might not be optimal. (flushed=0 and evicted=0, during the time.)
  • 2021-08-17T17:08:27.584420+08:00 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 7896ms. The settings might not be optimal. (flushed=3417 and evicted=0, during the time.)
  • 2021-08-17T17:08:27.871717+08:00 32 [Note] Aborted connection 32 to db: 'test' user: 'root' host: '127.0.0.1' (Got an error reading communication packets)
  • 2021-08-17T17:43:32.012491+08:00 34 [Note] Got an error reading communication packets
  • 2021-08-17T17:45:25.898084+08:00 35 [Note] Got packets out of order
  • 2050-10-10T20:00:05.358937+08:00 36 [Warning] Current time has got past year 2038. Validating current time with 5 iterations before initiating the normal server shutdown process.
  • 2050-10-10T20:00:05.385232+08:00 36 [Warning] Iteration 1: Current time obtained from system is greater than 2038
  • 2050-10-10T20:00:05.385246+08:00 36 [Warning] Iteration 2: Current time obtained from system is greater than 2038
  • 2050-10-10T20:00:05.385250+08:00 36 [Warning] Iteration 3: Current time obtained from system is greater than 2038
  • 2050-10-10T20:00:05.385253+08:00 36 [Warning] Iteration 4: Current time obtained from system is greater than 2038
  • 2050-10-10T20:00:05.385256+08:00 36 [Warning] Iteration 5: Current time obtained from system is greater than 2038
  • 2050-10-10T20:00:05.408669+08:00 36 [ERROR] This MySQL server doesn't support dates later than 2038
  • 2050-10-10T20:00:05.746302+08:00 0 [Note] Giving 0 client threads a chance to die gracefully
  • 2050-10-10T20:00:05.746331+08:00 0 [Note] Shutting down slave threads
  • 2050-10-10T20:00:05.746340+08:00 0 [Note] Forcefully disconnecting 0 remaining clients
  • 2050-10-10T20:00:05.770946+08:00 0 [Note] Event Scheduler: Purging the queue. 0 events
  • 2050-10-10T20:00:05.822777+08:00 0 [Note] Binlog end
  • 2050-10-10T20:00:05.942614+08:00 0 [Note] Shutting down plugin 'ngram'
  • 2050-10-10T20:00:05.948141+08:00 0 [Note] Shutting down plugin 'partition'
  • 2050-10-10T20:00:05.948176+08:00 0 [Note] Shutting down plugin 'BLACKHOLE'
  • 2050-10-10T20:00:05.948187+08:00 0 [Note] Shutting down plugin 'ARCHIVE'
  • 2050-10-10T20:00:05.948192+08:00 0 [Note] Shutting down plugin 'PERFORMANCE_SCHEMA'
  • 2050-10-10T20:00:05.964149+08:00 0 [Note] Shutting down plugin 'MRG_MYISAM'
  • 2050-10-10T20:00:05.964186+08:00 0 [Note] Shutting down plugin 'MyISAM'
  • 2050-10-10T20:00:05.967164+08:00 0 [Note] Shutting down plugin 'INNODB_SYS_VIRTUAL'
  • 2050-10-10T20:00:05.968176+08:00 0 [Note] Shutting down plugin 'INNODB_SYS_DATAFILES'
  • 2050-10-10T20:00:05.968196+08:00 0 [Note] Shutting down plugin 'INNODB_SYS_TABLESPACES'
  • 2050-10-10T20:00:05.968200+08:00 0 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN_COLS'
  • 2050-10-10T20:00:05.968204+08:00 0 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN'
  • 2050-10-10T20:00:05.968207+08:00 0 [Note] Shutting down plugin 'INNODB_SYS_FIELDS'
  • 2050-10-10T20:00:05.968210+08:00 0 [Note] Shutting down plugin 'INNODB_SYS_COLUMNS'
  • 2050-10-10T20:00:05.968214+08:00 0 [Note] Shutting down plugin 'INNODB_SYS_INDEXES'
  • 2050-10-10T20:00:05.968217+08:00 0 [Note] Shutting down plugin 'INNODB_SYS_TABLESTATS'
  • 2050-10-10T20:00:05.968220+08:00 0 [Note] Shutting down plugin 'INNODB_SYS_TABLES'
  • 2050-10-10T20:00:05.968223+08:00 0 [Note] Shutting down plugin 'INNODB_FT_INDEX_TABLE'
  • 2050-10-10T20:00:05.968226+08:00 0 [Note] Shutting down plugin 'INNODB_FT_INDEX_CACHE'
  • 2050-10-10T20:00:05.968229+08:00 0 [Note] Shutting down plugin 'INNODB_FT_CONFIG'
  • 2050-10-10T20:00:05.968232+08:00 0 [Note] Shutting down plugin 'INNODB_FT_BEING_DELETED'
  • 2050-10-10T20:00:05.968235+08:00 0 [Note] Shutting down plugin 'INNODB_FT_DELETED'
  • 2050-10-10T20:00:05.972522+08:00 0 [Note] Shutting down plugin 'INNODB_FT_DEFAULT_STOPWORD'
  • 2050-10-10T20:00:05.972537+08:00 0 [Note] Shutting down plugin 'INNODB_METRICS'
  • 2050-10-10T20:00:05.972545+08:00 0 [Note] Shutting down plugin 'INNODB_TEMP_TABLE_INFO'
  • 2050-10-10T20:00:05.972549+08:00 0 [Note] Shutting down plugin 'INNODB_BUFFER_POOL_STATS'
  • 2050-10-10T20:00:05.972554+08:00 0 [Note] Shutting down plugin 'INNODB_BUFFER_PAGE_LRU'
  • 2050-10-10T20:00:05.972558+08:00 0 [Note] Shutting down plugin 'INNODB_BUFFER_PAGE'
  • 2050-10-10T20:00:05.972562+08:00 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX_RESET'
  • 2050-10-10T20:00:05.972568+08:00 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX'
  • 2050-10-10T20:00:05.972576+08:00 0 [Note] Shutting down plugin 'INNODB_CMPMEM_RESET'
  • 2050-10-10T20:00:05.972580+08:00 0 [Note] Shutting down plugin 'INNODB_CMPMEM'
  • 2050-10-10T20:00:05.972584+08:00 0 [Note] Shutting down plugin 'INNODB_CMP_RESET'
  • 2050-10-10T20:00:05.972588+08:00 0 [Note] Shutting down plugin 'INNODB_CMP'
  • 2050-10-10T20:00:05.972593+08:00 0 [Note] Shutting down plugin 'INNODB_LOCK_WAITS'
  • 2050-10-10T20:00:05.972597+08:00 0 [Note] Shutting down plugin 'INNODB_LOCKS'
  • 2050-10-10T20:00:05.972601+08:00 0 [Note] Shutting down plugin 'INNODB_TRX'
  • 2050-10-10T20:00:05.972606+08:00 0 [Note] Shutting down plugin 'InnoDB'
  • 2050-10-10T20:00:06.009896+08:00 0 [Note] InnoDB: FTS optimize thread exiting.
  • 2050-10-10T20:00:06.010211+08:00 0 [Note] InnoDB: Starting shutdown...
  • 2050-10-10T20:00:06.111955+08:00 0 [Note] InnoDB: Dumping buffer pool(s) to /data/mysql_data/ib_buffer_pool
  • 2050-10-10T20:00:06.135351+08:00 0 [Note] InnoDB: Buffer pool(s) dump completed at 501010 20:00:06
  • 2050-10-10T20:00:27.872226+08:00 0 [Note] InnoDB: Shutdown completed; log sequence number 3757316759
  • 2050-10-10T20:00:27.881295+08:00 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1"
  • 2050-10-10T20:00:27.881333+08:00 0 [Note] Shutting down plugin 'MEMORY'
  • 2050-10-10T20:00:27.883896+08:00 0 [Note] Shutting down plugin 'CSV'
  • 2050-10-10T20:00:27.883923+08:00 0 [Note] Shutting down plugin 'sha256_password'
  • 2050-10-10T20:00:27.883934+08:00 0 [Note] Shutting down plugin 'mysql_native_password'
  • 2050-10-10T20:00:27.907348+08:00 0 [Note] Shutting down plugin 'binlog'
  • 2050-10-10T20:00:27.945216+08:00 0 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete
展开

[ERROR] This MySQL server doesn't support dates later than 2038

从上述错误可以看出,超过MySQL支持的时间范围,经过确认,宕机的数据库都为vmware上的虚拟机,从下面可以看出,虚拟机时间取自于宿主机,运维人员误更改宿主机系统时间导致

那么我们来看下为什么时间不能超过2038年呢?

千年虫2038年问题

和21世纪初的千年虫(the Millennium bug)问题类似,32位的Unix操作系统和Linux操作系统时间溢出问题又称为2038年问题(the Year 2038 problem)。如果你想知道什么是2038问题的话,你需要知道一些技术上的东西。这个bug是由用来写Unix/Linux的C语言引起的,C语言中用 time_t 来代表时间和日期,time_t 是整数(int)型的,它用来记载从1970年1月1日到2000年所经历的秒数。

这个数据是以32位存储的,第一位是符号位,其余的31位用来存数字,而这31位数字可以存储的最大数字为2147483647。

从1970年开始计算,这31位的数字可以表示的秒数最多可以用到2038年01月19日03时14分07秒,当时间到达这个数字的时候系统将会出现问题,到时候数字不会自动增加,而是会变为-2147483648,而这串数字代表的时间是1901年12月13日20时45分52秒,这会导致很多的程序出现问题,甚至崩溃。

2038年问题不仅比千年虫更隐蔽,而且比之前千年虫问题更具有破坏力,因为千年虫问题只会导致应用层的程序出现问题,比如信用卡支付系统,或者管理系统。而2038这个bug,将会影响系统最底层的时间控制的功能。

要解决这个问题,最简单的方式是扩展Unix时间的长度,用64位数字来表示它。64位二进制数的实际可用位数是63位,最大表示到公历的UTC时间292,277,026,596年12月4日15时30分08秒. 如果那个时候人类文明还存在的话,公元纪年很可能已经因为太难用而被抛弃了. 理想的情况是到2038年,64位系统已经成为主流,从而避免特意去修正这个问题所需要的大量开销。否则,人们就必须把新的64位时间拆分成两部分并分别保存在两个变量里,这是一个麻烦而且效率低下的选择.

8.0.26版本仍然有这个问题

  • if (thd->killed == THD::KILL_QUERY) thd->killed = THD::NOT_KILLED;
  • thd->set_time();
  • if (is_time_t_valid_for_timestamp(thd->query_start_in_secs()) == false) {
  • /*
  • If the time has gone past 2038 we need to shutdown the server. But
  • there is possibility of getting invalid time value on some platforms.
  • For example, gettimeofday() might return incorrect value on solaris
  • platform. Hence validating the current time with 5 iterations before
  • initiating the normal server shutdown process because of time getting
  • past 2038.
  • */
  • const int max_tries = 5;
  • LogErr(WARNING_LEVEL, ER_CONFIRMING_THE_FUTURE, max_tries);
  • int tries = 0;
  • while (++tries <= max_tries) {
  • thd->set_time();
  • if (is_time_t_valid_for_timestamp(thd->query_start_in_secs()) == true) {
  • LogErr(WARNING_LEVEL, ER_BACK_IN_TIME, tries);
  • break;
  • }
  • LogErr(WARNING_LEVEL, ER_FUTURE_DATE, tries);
  • }
  • if (tries > max_tries) {
  • /*
  • If the time has got past 2038 we need to shut this server down
  • We do this by making sure every command is a shutdown and we
  • have enough privileges to shut the server down
  • TODO: remove this when we have full 64 bit my_time_t support
  • */

从以上这两段注释来看, MySQL 内部变量 my_time_t 不支持 64 位,在到达2038年之后,MySQL 无法执行任何命令,直接关闭。

从mysql_time.h中可以看到TEMESTAMP时间最大值定义为int32

  • constexpr const int TIMESTAMP_MAX_VALUE =
  • std::numeric_limits<std::int32_t>::max();
  • constexpr const int TIMESTAMP_MIN_VALUE = 1;

时间字段选择

在MySQL中时间字段,timestamp最大值也为2038年,这也是由于timestamp实际存储的是int值,

可以看到在一些开发规范中也是要使用datetime类型。

https://dev.mysql.com/doc/refman/8.0/en/datetime.html

更多文章欢迎关注本人公众号,搜dbachongzi或扫二维码

作者:姚崇 Oracle OCM、MySQL OCP、Oceanbase OBCA、PingCAP PCTA认证,擅长基于Oracle、MySQL Performance Turning及多种关系型 NoSQL数据库

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
<<上一篇
下一篇>>