【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 時區設定的一個常用 sql 命令MySql
- mysql的時區錯誤問題MySql
- MySQL關於資料字典的一個疑問MySql
- MySQL:一個特殊的問題MySql
- 關於 Homestead 連線 MySQL 問題MySql
- MySQL關於事務常見的問題MySql
- 關於 mysql 中的 rand () 查詢問題MySql
- MySQL:一次timestamp時區轉換導致的問題MySql
- CV關於Mysql中ON與Where區別問題詳解buaMySql
- [20180403]關於時區問題.txt
- 一個MySQL多表查詢的問題MySql
- 【mysql】關於連線mysql資料庫時出現的時區錯誤time zoneMySql資料庫
- 最近積累的幾個關於 PHP 類與 MySQL 的小問題PHPMySql
- 關於MySQL使用的時長MySql
- 基於mysql資料庫 關於sql優化的一些問題MySql資料庫優化
- 關於MySql 設定一個間隔時間 執行一個事件MySql事件
- 【Mysql】修改mysql時區MySql
- 初學 GoLang 遇到的一個關於時間的坑...Golang
- 小心避坑:MySQL分頁時出現的資料重複問題MySql
- 對於MySQL遠端連線中出現的一個問題總結MySql
- mysql關於臨時表的總結MySql
- 關於一個歸檔問題?
- mysql 執行一段時間比較慢問題處理經過MySql
- mysql相關問題總結MySql
- NSDate 時間比較中的時區問題.
- 關於Integer面試的一個問題面試
- 關於mysql字元和數字型別轉換的問題研究MySql字元型別
- MySQL中鎖的相關問題DTQUMySql
- 關於 mysql 中的 select * from table_a,table_b 的問題MySql
- mysql 5.7.11查詢分割槽表的一個問題MySql
- 記錄一個新專案遇到的 MySQL 問題MySql
- Elasticsearch中關於transform的一個問題分析ElasticsearchORM
- 使用MySQL時遇到的各種坑MySql
- mysql關於mysql.server的總結MySqlServer
- 《關於MySQL的一些騷操作》MySql
- 【MySQL】時區修改MySql
- MySQL 問題MySql
- 埋在 MYSQL 資料庫應用中的17個關鍵問題!MySql資料庫
- mysql 遇到的問題MySql