MySQL的备份和恢复案例

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 当发生掉电或硬件故障,MySQL重新启动时会自动进行Crash Recovery,从日志文件中读取pending的信息,rollback uncommit同时把已经提交的交易flush到datafile,这些信息可以从MySQL的错误日志中看到,这里我用kill -9模拟宕机

Crash Recovery


当发生掉电或硬件故障,MySQL重新启动时会自动进行Crash Recovery,从日志文件中读取pending的信息,rollback uncommit同时把已经提交的交易flush到datafile,这些信息可以从MySQL的错误日志中看到,这里我用kill -9模拟宕机:

image.png


使用mysqldump进行 SQL-Format备份和恢复

全量备份:


shell> mysqldump --all-databases --master-data --single-transaction > backup_sunday_1_PM.sql

这里包含着备份时间点信息:


--
-- Position to start replication or point-in-time recovery from
--
CHANGE MASTER TO MASTER_LOG_FILE='master-binlog.000015', MASTER_LOG_POS=194;


我们可以在备份时进行日志切换


shell> mysqldump --single-transaction --flush-logs --master-data=2 \
         --all-databases > backup_sunday_1_PM.sql


这里包含这一个新的日志文件信息:


--
-- Position to start replication or point-in-time recovery from
--
-- CHANGE MASTER TO MASTER_LOG_FILE='master-binlog.000016', MASTER_LOG_POS=194;
--
-- Current Database: `data`
--


加上参数–delete-master-logs 可以在备份的同时把不需要的binlog删除。


恢复的时候使用


shell> mysql < backup_sunday_1_PM.sql


恢复完成后,数据的状态处于 Sunday 1 p.m,如果要将数据前滚使用类似下面的命令


shell> mysqlbinlog gbichot2-bin.000016 gbichot2-bin.000017 | mysql

用于升级测试可以只导出结构


shell> mysqldump --all-databases --no-data --routines --events > dump-defs.sql


使用mysqldump进行 Delimited-Text备份和恢复

备份至的目录受 参数–secure-file-priv的限制,可能会出现


mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement when executing 'SELECT INTO OUTFILE'


备份一个test数据库


root@scutech:~/test# mysqldump --tab=/var/lib/mysql-files/ test
root@scutech:~/test# ll /var/lib/mysql-files/
total 288
drwxrwx---  2 mysql mysql   4096 Jan 13 14:49 ./
drwxr-xr-x 65 root  root    4096 Dec 25 13:59 ../
-rw-r--r--  1 root  root    1336 Jan 13 14:49 a.sql
-rw-rw-rw-  1 mysql mysql     12 Jan 13 14:49 a.txt
-rw-r--r--  1 root  root    1395 Jan 13 14:49 person.sql
-rw-rw-rw-  1 mysql mysql 235718 Jan 13 14:49 person.txt
-rw-r--r--  1 root  root    1442 Jan 13 14:49 person_myisam.sql
-rw-rw-rw-  1 mysql mysql    153 Jan 13 14:49 person_myisam.txt
-rw-r--r--  1 root  root    1516 Jan 13 14:49 shirt.sql
-rw-rw-rw-  1 mysql mysql    110 Jan 13 14:49 shirt.txt
-rw-r--r--  1 root  root    1287 Jan 13 14:49 t1.sql
-rw-rw-rw-  1 mysql mysql      2 Jan 13 14:49 t1.txt
-rw-r--r--  1 root  root    1287 Jan 13 14:49 t2.sql
-rw-rw-rw-  1 mysql mysql      0 Jan 13 14:49 t2.txt
-rw-r--r--  1 root  root    1287 Jan 13 14:49 t3.sql
-rw-rw-rw-  1 mysql mysql      6 Jan 13 14:49 t3.txt



我们看到每个表备份了两个文件,一个建表的sql语句,一个数据文件。

恢复时使用:

root@scutech:~/test# mysql test < /var/lib/mysql-files/a.sql
oot@scutech:~/test# mysqlimport test /var/lib/mysql-files/a.txt
test.a: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0


也可以在mysql客户端里面使用


mysql> use test
Database changed
mysql> load data infile 'a.txt' into table a;
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
mysql> load data infile '/var/lib/mysql-files/a.txt' into table a;
Query OK, 3 rows affected (0.04 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0


使用binlog进行时间点恢复

查看当期binlog的状态:



mysql> show binary logs;
+----------------------+-----------+
| Log_name             | File_size |
+----------------------+-----------+
| master-binlog.000001 |       573 |
| master-binlog.000002 |       217 |
| master-binlog.000003 |       217 |
| master-binlog.000004 |       217 |
| master-binlog.000005 |       654 |
| master-binlog.000006 |       217 |
| master-binlog.000007 |   9556015 |
| master-binlog.000008 |   3816423 |
| master-binlog.000009 | 136315184 |
| master-binlog.000010 |  48873328 |
| master-binlog.000011 |   3145957 |
| master-binlog.000012 |   1690153 |
| master-binlog.000013 |   1869349 |
| master-binlog.000014 |   1204862 |
| master-binlog.000015 |       245 |
| master-binlog.000016 |    461332 |
+----------------------+-----------+
16 rows in set (0.00 sec)
mysql> show master status
    -> ;
+----------------------+----------+--------------+------------------+-----------------------------------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                             |
+----------------------+----------+--------------+------------------+-----------------------------------------------+
| master-binlog.000016 |   461332 |              |                  | 8e17f3ff-1b31-11ea-95c6-fa163e0ec694:1-489093 |
+----------------------+----------+--------------+------------------+-----------------------------------------------+
1 row in set (0.01 sec)



查询binlog中的内容


root@scutech:/var/lib/mysql# mysqlbinlog master-binlog.000016|head
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#200113 14:38:14 server id 135  end_log_pos 123 CRC32 0xc7ee4177  Start: binlog v 4, server v 5.7.28-log created 200113 14:38:14
# Warning: this binlog is either in use or was not closed properly.
BINLOG '
VhAcXg+HAAAAdwAAAHsAAAABAAQANS43LjI4LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AXdB7sc=


导入使用


# mysqlbinlog --skip-gtids master-binlog.000016|mysql


恢复到指定时间点可以使用:


mysqlbinlog --stop-datetime="2020-01-13 18:16:52" master-binlog.000006|mysql


恢复到指定的 Event Positions

mysqlbinlog --stop-position=45883 master-binlog.000006 |tail -n 20
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
66 4
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
48 3
|
1月前
|
SQL 关系型数据库 MySQL
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
|
1月前
|
SQL 关系型数据库 MySQL
案例剖析,MySQL共享锁引发的死锁问题!
案例剖析,MySQL共享锁引发的死锁问题!
|
1月前
|
消息中间件 关系型数据库 MySQL
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
120 0
|
14天前
|
关系型数据库 MySQL 数据库
一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
19 3
|
17天前
|
存储 关系型数据库 MySQL
基于案例分析 MySQL 权限认证中的具体优先原则
【10月更文挑战第26天】本文通过具体案例分析了MySQL权限认证中的优先原则,包括全局权限、数据库级别权限和表级别权限的设置与优先级。全局权限优先于数据库级别权限,后者又优先于表级别权限。在权限冲突时,更严格的权限将被优先执行,确保数据库的安全性与资源合理分配。
|
1月前
|
安全 关系型数据库 MySQL
MySQL用户备份
【10月更文挑战第2天】MySQL用户备份
52 3
|
1月前
|
存储 关系型数据库 MySQL
MySQL如何备份?
【10月更文挑战第2天】MySQL如何备份?
83 3
|
2月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
48 2
zabbix agent集成percona监控MySQL的插件实战案例
下一篇
无影云桌面