MySQL的备份和恢复案例

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 当发生掉电或硬件故障,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
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
5月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
424 10
|
10月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
7月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
495 36
|
7月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
436 5
|
7月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
407 0
|
9月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
408 28
|
9月前
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
230 15
|
9月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
11月前
|
存储 SQL 关系型数据库
服务器数据恢复—云服务器上mysql数据库数据恢复案例
某ECS网站服务器,linux操作系统+mysql数据库。mysql数据库采用innodb作为默认存储引擎。 在执行数据库版本更新测试时,操作人员误误将在本来应该在测试库执行的sql脚本在生产库上执行,导致生产库上部分表被truncate,还有部分表中少量数据被delete。
291 25

推荐镜像

更多