数据库备份
| 因数据量庞大,所以我们采用物理方式对mysql数据库进行备份。 |
| 使用xtrabackup工具包对mysql数据库进行物理备份: |
| 特点: |
| 备份过程快速、可靠; |
| 备份过程不会打断正在执行的事务; |
| 能够基于压缩等功能节约磁盘空间和流量; |
| 自动实现备份检验; |
| 还原速度快; |
原理:

| 备份开始时首先会开启一个后台检测进程,实时检测mysql redo的变化,一旦发现redo中有新的日志写入,立刻将日志记入后台日志文件xtrabackup_log中。之后复制innodb的数据文件和系统表空间文件ibdata1,待复制结束后,执行flush tables with read lock操作,复制.frm,MYI,MYD,等文件(执行flush tableswith read lock的目的是为了防止数据表发生DDL操作,并且在这一时刻获得binlog的位置)最后会发出unlock tables,把表设置为可读可写状态,最终停止xtrabackup_log。 |
| |
| 步骤: |
| 1、 执行备份命令 |
| innobackupex --user=backup --password=*** --socket=/tmp/mysqld.sock --defaults-file=/etc/my.cnf /data/backup/ |
| 2、检查备份文件完整性 |
| 1)、查看以下文件是否存在 |
| backup-my.cnf、 xtrabackup_binary、xtrabackup_binlog_info 、xtrabackup_checkpoints xtrabackup_logfile xtrabackup_info |
| |
| 2)、检查文件 |
| xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息; |

| xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。 |

| backup-my.cnf —— 备份命令用到的配置选项信息; |

| xtrabackup_info ——记录备份的基本信息,uuid、备份命令、备份时间、binlog、LSN、以及其他加密压缩等信息。 |
| |

数据库恢复
原理:

| 这一阶段会启动xtrabackup内嵌的innodb实例,回放xtrabackup日志xtrabackup_log,将提交的事务信息变更应用到innodb数据/表空间,同时回滚未提交的事务(这一过程类似innodb的实例恢复)。 |
| 步骤: |
| 要先关闭mysql数据库,重命名或者删除原数据文件目录都可以,再创建一个新的数据文件目录,将备份数据复制到新的数据文件目录下,赋权,修改权限,启动数据库 |
| 1、/etc/init.d/mysqld stop |
| 2、mv /data/mysql /data/mysql_bak |
| 3、mkdir /data/mysql |
| 4、innobackupex --apply-log /data/backup/2018-05-21_10-05-04/ |
| 5、innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/backup/2018-05-21_10-05-04/ |
| 6、chown -R mysql.mysql /data/mysql |
| 7、/etc/init.d/mysqld start |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统