【Mysql】關於一個mysql的坑比時區問題
問題:mysqldump出來的檔案遷移到另外的庫,時間戳欄位總是少8個小時!
1.看到這個很快就想到時區問題,我們先看一下
- mysql時區
-
mysql> show variables like '%zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+------------------+--------+
- 系統時區
-
[root@iZ2ze66bhrbxkc31nljgjnZ ~]# date -R
Fri, 23 Jun 2017 16:06:46 +0800
-
很好沒毛病
2.檢視錶結構
-
MariaDB [ecejmaster]> desc svc_street_tmp_170623;
+--------------+-------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+-------------------+-----------------------------+
| street_id | int(11) | NO | | 0 | |
| city_id | int(11) | YES | | NULL | |
| street_name | varchar(50) | NO | | | |
| status | tinyint(4) | YES | | NULL | |
| create_user | int(11) | YES | | NULL | |
| create_time | datetime | NO | | CURRENT_TIMESTAMP | |
| update_user | int(11) | YES | | NULL | |
| update_time | datetime | YES | | NULL | |
| del_flag | tinyint(4) | NO | | 0 | |
| screate_time | timestamp | NO | | CURRENT_TIMESTAMP | |
| supdate_time | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------+-------------+------+-----+-------------------+-----------------------------+
3 檢視資料
-
MariaDB [ecejmaster]> select * from svc_street_tmp_170623 where street_id=17615 limit 1;
-
+-----------+---------+-------------+--------+-------------+---------------------+-------------+---------------------+----------+---------------------+---------------------+
-
| street_id | city_id | street_name | status | create_user | create_time | update_user | update_time | del_flag | screate_time | supdate_time |
-
+-----------+---------+-------------+--------+-------------+---------------------+-------------+---------------------+----------+---------------------+---------------------+
-
| 17615 | 69 | 123 | 2 | 1 | 2017-06-23 15:37:24 | 1 | 2017-06-23 15:37:24 | 0 | 2017-06-23 15:37:24 | 2017-06-23 15:38:36 |
-
+-----------+---------+-------------+--------+-------------+---------------------+-------------+---------------------+----------+---------------------+---------------------+
- 1 row in set (0.00 sec)
4 備份
-
[dbaadmin@YZ-PRO-DB-04 ~]$ mysqldump -udbmanager -p'12fAK1aR' -h 10.32.14.78 ecejmaster svc_street_tmp_170623 --where="street_id=17615" -t
-
-- MySQL dump 10.15 Distrib 10.0.23-MariaDB, for Linux (x86_64)
-
--
-
-- Host: 10.32.14.78 Database: ecejmaster
-
-- ------------------------------------------------------
-
-- Server version 10.0.23-MariaDB-log
-
-
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-
/*!40101 SET NAMES utf8 */;
-
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
-
/*!40103 SET TIME_ZONE='+00:00' */;
-
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
-
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-
-
--
-
-- Dumping data for table `svc_street_tmp_170623`
-
--
-
-- WHERE: street_id=17615
-
-
LOCK TABLES `svc_street_tmp_170623` WRITE;
-
/*!40000 ALTER TABLE `svc_street_tmp_170623` DISABLE KEYS */;
-
INSERT INTO `svc_street_tmp_170623` VALUES (17615,69,'123',2,1,'2017-06-23 15:37:24',1,'2017-06-23 15:37:24',0,'2017-06-23 07:37:24','2017-06-23 07:38:36');
-
/*!40000 ALTER TABLE `svc_street_tmp_170623` ENABLE KEYS */;
-
UNLOCK TABLES;
- /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */
----看到沒,時間少了8個小時,仔細觀察會發現timestamp時間戳會出現少8個小時的狀況,datetime時間型別不會!插入到另外的庫中,時間會再加8個小時,恢復正常
但是:如果dump時指定 -t 等引數(忽略了上面的set time_zone),再插回去就真的少8個小時了。剛好我們備份的全是insert語句,其它的資訊全部去掉了
5 看下mysqldump的說明
-
[dbaadmin@YZ-PRO-DB-04 ~]$ mysqldump --help | grep -i zone
-
--tz-utc SET TIME_ZONE='+00:00' at top of dump to allow dumping of
-
zones or data is being moved between servers with
- different time zones.
- 預設是以0時區來匯出的,會對timestamp時間型別造成影響
6 解決辦法:
- mysqldump -uroot -S /data/3306/mysql.sock -pHP2T9wypjr6oEZRV ecejmaster3 $i --compact -c -t --skip-extended-insert --skip-tz-utc 跳過時區
總結:mysqldump會對timestamp時間型別的欄位造成8個小時的誤差,存insert時使用skip-tz-utc跳過時區的方式匯出解決
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2141177/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於幾個MySQL環境問題的對比MySql
- 關於 MySQL 時區設定的一個常用 sql 命令MySql
- 【Mysql】關於mysql存入emoji表情的問題MySql
- mysql的時區錯誤問題MySql
- 關於mysql連線的問題MySql
- MySQL關於資料字典的一個疑問MySql
- 【MYSQL】一個關於Innodb儲存引擎表的加鎖問題MySql儲存引擎
- 【Linux】一個坑比的crontab問題Linux
- 一個不錯的關於mysql和posgresql比較的帖子MySql
- MySQL:一個特殊的問題MySql
- 關於mysql5.6 的排序問題.MySql排序
- MySQL關於事務常見的問題MySql
- 關於 mysql 中的 rand () 查詢問題MySql
- 關於mysql的Too many connections問題MySql
- 關於PHP 時區錯誤的問題PHP
- CV關於Mysql中ON與Where區別問題詳解buaMySql
- 關於 Homestead 連線 MySQL 問題MySql
- 【mysql】關於連線mysql資料庫時出現的時區錯誤time zoneMySql資料庫
- 關於MySQL使用的時長MySql
- MySQL:一次timestamp時區轉換導致的問題MySql
- 關於mysql中limit最佳化的問題MySqlMIT
- 關於教程的一個問題
- 請教一個關於EJB建立物件時的問題物件
- 一個MySQL多表查詢的問題MySql
- 一個MySQL死鎖問題的反思MySql
- MySQL一個有意思的問題MySql
- 關於MySql 設定一個間隔時間 執行一個事件MySql事件
- 最近積累的幾個關於 PHP 類與 MySQL 的小問題PHPMySql
- 基於mysql資料庫 關於sql優化的一些問題MySql資料庫優化
- mysql的自增id的一個問題MySql
- mysql臨時表的問題MySql
- 初學 GoLang 遇到的一個關於時間的坑...Golang
- 關於mysql和jsp的中文問題~謝謝MySqlJS
- 編譯libodb-mysql.lib時遇到的一個問題編譯MySql
- 關於Integer面試的一個問題面試
- 一個關於Java Excel的問題JavaExcel
- 一個關於SessionBean呼叫的問題。SessionBean
- 一個關於prototype模式的問題?模式