日常使用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
--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 */;
/*!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
[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
--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 */;
/*!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 */;
当前还没有任何评论