文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用mysqldump备份

2024-04-02 19:55

关注

这篇文章将为大家详细讲解有关如何使用mysqldump备份,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

问题描述

在一次使用mysqldump备份单表部分数据时,发现无备份数据。阵针对这一奇怪现象,进行分析。

问题复现与分析
#表结构信息
mysql> show create table test.t1;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_t` (`time`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
#表数据信息
mysql> select * from test.t1;
+----+---------------------+
| id | time                |
+----+---------------------+
| 1 | 2018-12-10 22:15:39 |
| 2 | 2018-12-10 22:15:47 |
| 3 | 2018-12-10 22:15:50 |
| 4 | 2018-12-10 22:15:56 |
| 5 | 2018-12-10 22:15:57 |
| 6 | 2018-12-10 22:15:58 |
| 7 | 2018-12-10 22:15:58 |
| 8 | 2018-12-10 22:16:06 |
| 9 | 2018-12-10 22:16:06 |
| 10 | 2018-12-10 22:16:07 |
| 11 | 2018-12-10 22:16:08 |
| 12 | 2018-12-10 22:16:13 |
| 13 | 2018-12-10 22:16:13 |
| 14 | 2018-12-10 22:16:14 |
| 15 | 2018-12-10 22:16:15 |
+----+---------------------+
15 rows in set (0.00 sec)

使用mysqldump --where选项备份t1表部分数据。

#使用mysqldump根据time列条件备份
mysqldump -uroot -p123456 --default-character-set=utf8 -q --master-data=2 --single-transaction --databases test --tables t1 --where "time>'2018-12-10 22:16:08'">beifen.sql
#通过备份文件可以看出备份结果中并无数据。
...
LOCK TABLES `t1` WRITE;
;
;
UNLOCK TABLES;
...

在MySQL中使用相同条件查询,并无异常,可以查到数据。

[root@master ~]# mysql -uroot -p123456 -e "select * from test.t1 where time>'2018-12-10 22:16:08'"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+---------------------+
| id | time                |
+----+---------------------+
| 12 | 2018-12-10 22:16:13 |
| 13 | 2018-12-10 22:16:13 |
| 14 | 2018-12-10 22:16:14 |
| 15 | 2018-12-10 22:16:15 |
+----+---------------------+

尝试备份t1全表数据

mysqldump -uroot -p123456 --default-character-set=utf8 -q --master-data=2 --single-transaction --databases test --tables t1 >beifen.sql
#有数据,但是仔细对照,我们可以发现时间回退了八个小时。
LOCK TABLES `t1` WRITE;
;
INSERT INTO `t1` VALUES (1,'2018-12-10 14:15:39'),(2,'2018-12-10 14:15:47'),(3,'2018-12-10 14:15:50'),(4,'2018-12-10 14:15:56'),(5,'2018-12-10 14:15:57'),(6,'2018-12-10 14:15:58'),(7,'2018-12-10 14:15:58'),(8,'2018-12-10 14:16:06'),(9,'2018-12-10 14:16:06'),(10,'2018-12-10 14:16:07'),(11,'2018-12-10 14:16:08'),(12,'2018-12-10 14:16:13'),(13,'2018-12-10 14:16:13'),(14,'2018-12-10 14:16:14'),(15,'2018-12-10 14:16:15');
;
UNLOCK TABLES;
#查看mysqldump备份文件头部信息,mysqldump使用的是中时区。
...
;
...
#查看MySQL和系统时区。
mysql> show variables like '%time%';
+---------------------------------+-------------------+
| Variable_name | Value |
+---------------------------------+-------------------+
| binlog_max_flush_queue_time | 0 |
| connect_timeout | 10 |
| datetime_format | %Y-%m-%d %H:%i:%s |
| default_password_lifetime | 0 |
| delayed_insert_timeout | 300 |
| explicit_defaults_for_timestamp | OFF |
| flush_time | 0 |
| have_statement_timeout | YES |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_old_blocks_time | 1000 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lc_time_names | en_US |
| lock_wait_timeout | 31536000 |
| log_timestamps | UTC |
| long_query_time | 10.000000 |
| max_execution_time | 0 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 60 |
| slow_launch_time | 2 |
| system_time_zone | CST |
| time_format | %H:%i:%s |
| time_zone | +08:00 |
| timestamp | 1544775697.554299 |
| wait_timeout | 28800 |
+---------------------------------+-------------------+
29 rows in set (0.01 sec)
[root@master ~]# date -R
Wed, 12 Dec 2018 16:00:34 +0800
#模拟数据恢复
mysql> drop table test.t1;
mysql -uroot -p123456<beifen
mysql> select * from t1;
+----+---------------------+
| id | time |
+----+---------------------+
| 1 | 2018-12-10 22:15:39 |
| 2 | 2018-12-10 22:15:47 |
| 3 | 2018-12-10 22:15:50 |
| 4 | 2018-12-10 22:15:56 |
| 5 | 2018-12-10 22:15:57 |
| 6 | 2018-12-10 22:15:58 |
| 7 | 2018-12-10 22:15:58 |
| 8 | 2018-12-10 22:16:06 |
| 9 | 2018-12-10 22:16:06 |
| 10 | 2018-12-10 22:16:07 |
| 11 | 2018-12-10 22:16:08 |
| 12 | 2018-12-10 22:16:13 |
| 13 | 2018-12-10 22:16:13 |
| 14 | 2018-12-10 22:16:14 |
| 15 | 2018-12-10 22:16:15 |
+----+---------------------+
15 rows in set (0.00 sec)
#数据恢复正常。但是存在一个问题,因为mysqldump备份时会把数据进行时区转换,导致mysqldump过滤条件与筛选的数据差8个小时,所以可能会使where条件过滤不准确。比如文章开头所碰到的问题。

解决办法

#使用--skip-tz-utc,不使用mysqldump默认的中时区。
mysqldump --default-character-set=utf8 -q --master-data=2 --single-transaction --databases test --tables t1 --where "time='2018-12-10 22:16:08'" -uroot -p123456 --skip-tz-utc>beifen.sql
#数据完全正确,文件头部无时区转换,所以数据恢复时正常。
LOCK TABLES `t1` WRITE;
;
INSERT INTO `t1` VALUES (11,'2018-12-10 22:16:08');
;
UNLOCK TABLES;

关于“如何使用mysqldump备份”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯