MySQL如何跨時區遷移數據

    公司去年升級數據庫的時候,從舊的mysql4.0升級至mysql5.1.45時,經歷了很多困難,在成功解決了跨多版本升級,字符編碼等一系列問題後,終於升級完成了。

    可是在升級完成後,在準備對外發佈網站時,檢查網站後臺的訂單時發現,所有訂單的日期都推遲了6個小時(公司服務器使用的是Los Angel時區)。 檢查了很久之後,才發現是mysql跨時區遷移數據的問題,現在記錄爲下,以便日於不犯同樣的錯誤。

MySQL跨時區遷移數據的解決方法,重要!

問: 如果數據表中有時間字段,現在要遷移到其他時區的服務器上,該如何處理呢?
答:在高版本的mysqldump中,新增了一個選項:–tz-utc,默認是啓用的,來看看它的說明 

  1. SET TIME_ZONE='+00:00' at top of dump to allow dumping of 
  2. TIMESTAMP data when a server has data in different time 
  3. zones or data is being moved between servers with 
  4. different time zones. 

看明白了吧。
簡言之,就是導出時增加一個說明,把當地時間都轉換成0時區的時間,然後再導入,就能確保跨時區遷移數據了,來看下例子:

  1. mysql> select * from t1; 
  2. +----+---------------------+ 
  3. | id | cur_time            | 
  4. +----+---------------------+ 
  5. |  1 | 2010-03-14 08:58:18 | 
  6. +----+---------------------+ 

現在導出數據:

  1. mysqldump --tz-utc=1 -t test t1 > t1.sql 
  2. --tz-utc=false 
  3. #查看內容 
  4. cat t1.sql 
  5. /*!40103 SET TIME_ZONE='+00:00' */; 
  6. .... 
  7. INSERT INTO `t1` VALUES (1,'2010-03-14 00:58:18'); 

可以看到,增加了設定時區的標誌。

  1. mysqldump --tz-utc=0 -t test t1 > t1_1.sql 
  2. #查看內容 
  3. cat t1_1.sql 
  4. INSERT INTO `t1` VALUES (1,'2010-03-14 08:58:18'); 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章