手机网站建设开什么类型的票,在线制作假亲子鉴定书,wordpress显示英文版,域名使用费用一年多少钱数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中#xff0c;数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因#xff1a; 程序错误人为操作错误运算错误磁盘故障灾难#xff08;如火灾、地震#xff09;和盗窃
数据库备份…数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因 程序错误人为操作错误运算错误磁盘故障灾难如火灾、地震和盗窃
数据库备份的分类和备份策略
数据库备份的分类
物理备份
物理备份对数据库操作系统的物理文件如数据文件、日志文件等的备份。
物理备份方法
冷备份(脱机备份) 是在关闭数据库的时候进行的热备份(联机备份) 数据库处于运行状态依赖于数据库的日志文件温备份数据库锁定表格不可写入但可读的状态下进行备份操作
逻辑备份
逻辑备份对数据库逻辑组件如表等数据库对象的备份。
即以sql语句的形式把库、表结构、表数据保存下来。
数据库的备份策略
完全备份全量备份每次对数据库进行完整的备份。差异备份备份自从上次完全备份之后被修改过的文件。增量备份只有在上次完全备份或者增量备份后被修改的文件才会被备份。
常见的备份方法
物理冷备 完全备份
备份时数据库处于关闭状态直接打包数据库文件备份速度快恢复时也是最简单的
专用备份工具mydump或mysqlhotcopy 完全备份逻辑备份
mysqldump常用的逻辑备份工具 导出为sql脚本mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表
启用二进制日志进行增量备份 增量备份
进行增量备份需要刷新二进制日志
第三方工具备份
免费的MySQL热备份软件Percona XtraBackup
MySQL完全备份介绍
什么是完全备份
完全备份是对整个数据库、数据库结构和文件结构的备份保存的是备份完成时刻的数据库是差异备份与增量备份的基础
完全备份的优缺点
优点
备份与恢复操作简单方便
缺点
数据存在大量的重复占用大量的备份空间备份与恢复时间长
完全备份的方法
物理冷备份与恢复
关闭MySQL数据库使用tar命令直接打包数据库文件夹直接替换现有MySQL目录即可
mysqldump备份与恢复
MySQL自带的备份工具可方便实现对MySQL的备份可以将指定的库、表导出为SQL脚本使用命令mysq|导入备份的数据
演示
物理冷备份
完全备份 systemctl stop mysqld #先关闭服务 mkdir /backup/ #创建备份目录 rpm -q xz #使用xz工具进行压缩检查xz工具是否已安装 yum install xz -y #如果没安装可以先yum安装 tar Jcf /backup/mysql_all_$(date %F).tar.xz /usr/local/mysql/data #打包数据库文件。 /usr/local/mysql/data 为数据库文件存放目录 cd /backup/ #切换到备份目录 ls #查看目录内容 tar tf mysql_all_2022-06-05.tar.xz #查看tar包内的文件 完全恢复
将数据库迁移到另一台主机测试完全恢复。 #主机A使用scp命令将tar包传给另一台主机B scp /backup/mysql_all_2022-10-26.tar.xz 192.168.100.104:/opt ##主机B的操作## systemctl stop mysqld #关闭mysql cd /opt/ mkdir /opt/bak/ #创建备份目录 tar Jxf mysql_all_2022-10-26.tar.xz -C /opt/bak/ #将tar包解压到备份目录 cd /opt/bak/ #切换到tar包的解压目录 \cp -af usr/local/mysql/data/ /usr/local/mysql #将data目录复制到/usr/local/mysql/目录下覆盖原有文件 systemctl start mysqld #启动mysql mysql -u root -p #登录数据库查看 show databases; use yuji; show tables; select * from class; 主机B 逻辑备份使用mysqldump工具
mysqldump是常用的逻辑备份工具。
mysqldump可以将指定的库、表导出为SQL脚本。
mysqldump完全备份
完全备份一个或多个完整的库包括库中所有的表 mysqldump -uroot -p[密码] --databases 库名1 [库名2].. /备份路径/备份文件名.sql#导出的就是数据库脚本文件 /opt/mysql_bak/yuji.sql #完全备份一个库yuji mysqldump -u root -p --databases yuji market /opt/mysql_bak/yuji-market.sql #完全备份多个库yuji库和market库 完全备份MySQL服务器中所有的库包括库中所有的表 mysqldump -u root -p[密码] --all-databases / 备份路径/备份文件名.sql
完全备份指定库中的部分表
只备份表sql语句中只有对表的操作没有对库的操作。恢复时需要人为确认库存在。 mysqldump -u root -p[密码] [-d] 库名 表名1 [表名2] ... /备份路径/备份文件名.sql #使用“-d选项说明只保存数据库的表结构 #不使用“-d”选项说明表数据也进行备份 mysqldump完全恢复
先启动mysql systemctl start mysqld
恢复数据库
先删除数据库之后进行恢复。 ##删除数据库## mysql -u root -p -e drop database school; #-e选项用于指定连接MySQL后执行的命令命令执行完后自动退出 mysql -u root -p -e SHOW DATABASES; #查看当前有哪些数据库 ##恢复数据库## mysql -u root -p /opt/mysql_bak/school.sql #重定向输入库文件 mysql -u root -p -e SHOW DATABASES; #查看当前有哪些数据库 恢复数据表
当备份文件中只包含表的备份而不包含创建的库的语句时执行导入操作时必须指定库名且目标库必须存在。 ##备份school库中的jieqian表## mysqldump -uroot -p school jieqian /opt/mysql_bak/school_jieqian.sql ##删除school库中的jieqian表## mysql -u root -p -e drop table school.jieqian; mysql -u root -p -e show tables from school; #查看school库中的表已无jieqian表 ##恢复school库中的jieqian表## mysql -u root -p school /opt/mysql_bak/school_jieqian.sql #重定向导入备份文件必须指定库名且目标库必须存在 mysql -u root -p -e show tables from school; MySQL增量备份与恢复
MySQL增量备份介绍
使用mysqldump进行完全备份存在的问题
备份数据中有重复数据备份时间与恢复时间过长
增量备份是什么
是自上一次备份后增加/变化的文件或者内容
增量备份的特点
没有重复数据备份量不大时间短恢复需要上次完全备份及完全备份之后所有的增量备份才 能恢复而且要对所有增量备份进行逐个反推恢复
MySQL增量备份的方法 MySQL没有提供直接的增量备份方法 可通过MySQL提供的二进制日志间接实现增量备份 MySQL二进制日志对备份的意义 二进制日志保存了所有更新或者可能更新数据库的操作二进制日志在启动MySQL服务器后开始记录并在文件达到 max_binlog_size所设置的大小或者接收到flush logs命令后重新 创建新的日志文件只需定时执行flush logs方法重新创建新的日志生成二进制文 件序列并及时把这些日志保存到安全的地方就完成了一个时间 段的增量备份
MySQL数据库增量恢复 一般恢复 将所有备份的二进制日志内容全部恢复 基于位置恢复 数据库在某一时间点可能既有错误的操作也有正确的操作可以基于精准的位置跳过错误的操作 基于时间点恢复 跳过某个发生错误的时间点实现数据恢复
增量备份与恢复 操作演示
增量备份
1、开启二进制日志功能 vim /etc/my.cnf
[mysqld]
log-binmysql-bin #开启二进制日志。如果使用相对路径则保存在/usr/local/mysql/data/目录下
binlog_format MIXED #可选指定二进制日志(binlog)的记录格式为MIXED
server-id 1
systemctl restart mysqld
ls -l /usr/local/mysql/data/mysql-bin.* 2、可每周对数据库或表进行完全备份 mysqldump -u root -p school class /bak/school_class_$(date %F).sql mysqldump -u root -p --databases school /bak/school_$(date %F).sql 3.插入新数据以模拟数据的增加或变更 use school; insert into class values(9, lsy) ; insert into class values(10, lsy1) ; 4.再次生成新的二进制日志文件例如mysql -bin.000003 mysqladmin -u root -p flush-logs #之前的步骤3的数据库操作会保存到mysql-bin.000004文件中之后数据库数据再发生变化则保存在mysql-bin.00005文件中 5.查看二进制日志文件的内容 cp /usr/local/mysql/data/mysql-bin.000004 /bak/ mysqlbinlog --no-defaults --base64-outputdecode-rows -v /bak/mysql-bin.000004 #--base64-outputdecode-rows使用64位编码机制去解码并按行读取 #-v显示详细内容 6.模拟丢失更改的数据的恢复步骤。 use school; delete from class where id9; #删除今天新增加的两条数据 delete from class where id10; #增量恢复今天新增加的两条数据记录保存在mysql-bin.000004日志中 mysqlbinlog --no-defaults /bak/mysql-bin.000004 | mysql -u root -p mysql -u root -p -e select * from school.class; #查看表中数据 断点恢复
基于位置的断点恢复 mysqlbinlog --no-defaults --start-position位置点 文件名 | mysql -u root -p #从某一个位置点开始恢复一直到日志结尾 mysqlbinlog --no-defaults --stop-position位置点 文件名 | mysql -u root -p #从日志开头一直恢复到某一个位置点前结束 mysqlbinlog --no-defaults --start-positionxxx--stop-position位置点 文件名 | mysql -u root -p #从某一个位置点开始恢复一直到某一个位置点前结束 基于时间点的断点恢复
注意日期必须是yyyy-mm-dd的格式。 mysqlbinlog --no-defaults --start-datetime时间点 文件名 | mysql -u root -p #从某一个时间点开始恢复一直到日志结尾 mysqlbinlog --no-defaults --stop-datetime时间点 文件名 | mysql -u root -p #从日志开头一直恢复到某一个时间点前结束 mysqlbinlog --no-defaults --start-datetime起始时间点 --stop-datetime结束时间点 文件名 | mysql -u root -p #从某一个时间点开始恢复一直到某一个位置点前结束