mysqldump 导出时的时区问题

日常使用DB导出的问题

由于平常导出mysql时,往往不太注意参数,处理的仅限于一些普通的操作,如以下命令:

mysqldump -uroot -p \
    --host=192.168.1.1 --port=3306 \
    --lock-tables=false --no-create-info \
    --skip-lock-tables \
    --skip-add-locks \
    --skip-disable-keys \
    --column-statistics=0 \
    --complete-insert \
    db_name table_name > table_name.sql

在生成的文件中会看到这么一些内容:

/*!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_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!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 */;

其中最关键的就是 SET TIME_ZONE='+00:00' 然后就导致了最终的结果,时间很多都对应不上。

官方的帮助文档信息

开始尝试在mysqldump的帮助文档中搜索信息,timezone没有搜索到,于是搜索tz, 真还有,加上 --skip-tz-utc 搞定这个问题。

[loveyu@lan-dev db4]$ mysqldump --help|grep timezone
[loveyu@lan-dev db4]$ mysqldump --help|grep tz
  --tz-utc            SET TIME_ZONE='+00:00' at top of dump to allow dumping of
                      (Defaults to on; use --skip-tz-utc to disable.)
tz-utc                            TRUE

最后的导出语句

mysqldump -uroot -p \
    --host=192.168.1.1 --port=3306 \
    --lock-tables=false --no-create-info \
    --skip-lock-tables \
    --skip-add-locks \
    --skip-disable-keys \
    --column-statistics=0 \
    --complete-insert \
    --skip-tz-utc \
    db_name table_name > table_name.sql

最后在查看相关信息时,发现时区相关内容已经没有了。

/*!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 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!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 */;

当前还没有任何评论

写下你最简单的想法