建个门户网站,百度提交wordpress,济南网站推广哪家好,毕业设计做健身房网站的意义文章目录 1. 数据库备份的分类1.1 从物理和逻辑上分类1.1.1 物理备份1.1.2 逻辑备份 1.2 从数据库的备份策略角度上分类1.2.1 完全备份1.2.2 差异备份1.2.3 增量备份 1.3 常见的备份方法 2. MySQL完全备份2.1 完全备份简介2.2 优点与缺点2.3 实现物理冷备份与恢复2.3.1 实现流程… 文章目录 1. 数据库备份的分类1.1 从物理和逻辑上分类1.1.1 物理备份1.1.2 逻辑备份 1.2 从数据库的备份策略角度上分类1.2.1 完全备份1.2.2 差异备份1.2.3 增量备份 1.3 常见的备份方法 2. MySQL完全备份2.1 完全备份简介2.2 优点与缺点2.3 实现物理冷备份与恢复2.3.1 实现流程2.3.2 前置准备2.3.3 实现物理冷备份 2.4 使用mysqldump备份数据库2.5 使用source命令恢复数据库2.6 使用mysql命令恢复数据库 3. MySQL增量备份与恢复3.1 使用完全备份所带来的问题3.2 增量备份简介3.3 特点3.4 增量备份与日志的关系3.4.1 二进制日志对备份的意义 3.5 增量恢复方法类别3.5.1 一般恢复3.5.2 基于位置恢复3.5.3 基于时间点恢复 3.6 增量备份3.6.1 开启二进制日志功能3.6.2 实现增量备份2.6.3 一般恢复3.6.4 端点恢复3.6.4.1 基于位置恢复3.6.4.2 基于时间点恢复 1. 数据库备份的分类
1.1 从物理和逻辑上分类
1.1.1 物理备份
对数据库操作系统的物理文件如数据文件、日志文件等的备份
1.1.2 逻辑备份
对数据库逻辑组件如表等数据库对象的备份
1.2 从数据库的备份策略角度上分类
1.2.1 完全备份
每次对数据库进行完整的备份
1.2.2 差异备份
备份自从上次完全备份之后修改的文件仅备份最近一次完全备份以来变化的数据备份较慢还原简单
1.2.3 增量备份
只有在上次完全备份或增量备份后被修改的文件才会备份仅备份最近一次完全备份或增量备份如果存在增量以来变化的数据备份较快还原复杂 1.3 常见的备份方法 物理冷备 备份时数据库处于关闭状态直接打包数据库文件 备份速度快恢复时也是最简单的 专用备份工具mysqldump或mysqlhotcopy mysqldump常用的逻辑备份工具 mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表 启用二进制日志进行增量备份· 进行增量备份需要刷新二进制日志 第三方工具备份 免费的MySQL热备份软件Percona XtraBackup
2. MySQL完全备份
2.1 完全备份简介
是对整个数据库、数据库结构和文件结构的备份保存的是备份完成时刻的数据库是差异备份与增量备份的基础
2.2 优点与缺点 优点 备份与恢复操作简单方便 缺点 数据存在大量重复 占用大量备份空间 备份与恢复时间长
2.3 实现物理冷备份与恢复
2.3.1 实现流程
关闭MySQL数据库 使用tar命令直接打包数据库文件夹 直接替换现有MySQL目录
2.3.2 前置准备
mysql1 :192.168.67.100
mysql2 :192.168.67.101mysql -uroot -pabc123
#登录数据库create datbbase scj;
#新建数据库use scj;
#进入数据库create table scj1 (id int, name varchar(10), age int, sex char(2), hobby varchar(50));
#新建表show tables;
#查看数据库#添加数据
insert into scj1 values (1, 张三, 22, 男, java);
insert into scj1 values (2, 李四, 23, 男, shell);
insert into scj1 values (3, 王五, 24, 男, 云计算);
insert into scj1 values (4, 赵四, 25, 男, url);
insert into scj1 values (5, 尼古拉斯, 26, 男, html);
insert into scj1 values (6, 日川钢板, 27, 男, css);create table scj2 like scj1;
insert into scj2 (select * from scj1);
#克隆一个名为scj2的表show tables from scj;
#查看是否创建成功2.3.3 实现物理冷备份
quit
#退出数据库systemctl stop mysqld
#关闭数据库
cd /usr/local/mysql/data
#前往mysql默认日志目录下mkdir /opt/backup
#创建备份日志文件目录tar zcvf /opt/backup/mysql_full_$(date -d -1 day %Y.%m.%d).tar.gz ./data/
#打包压缩上一天的data目录到/opt/backup目录下并标上日期#拓展
date %Y/%m/%d
#只显示当前日期date %Y-%m01
#显示当月第一天date -d 1 day %Y/%m/%d
#显示明天date -d -1 day %Y/%m/%d
#显示昨天
或
date -d 1 day ago %Y/%m/%ddate -d $(date %Y%m01) -1 day %Y/%m/%d
#显示上月最后一天date -d (date -d 1 mouth %Y%m01) -1 day %Y/%m/%d
#显示当月最后一天cd /optscp mysql_full_2023.09.18.tar.gz 192.168.67.101:/opt
#将打包的data目录远程拷贝到另一台mysql主机的opt目录下#前往mysql2
systemctl stop mysqld
#关闭mysql服务cd /usr/local/mysql
mv data/ data.bak
#将现data目录改名为data.bakmv mysql_full_2023.09.18.tar.gz /usr/local/mysql/
#将此压缩包转移到mysql用户目录下tar xf mysql_full_2023.09.18.tar.gz
#解压缩mysql1的data目录systemctl start mysqld
#打开mysql服务mysql -uroot -pabc123
#进入数据库show databases;
#查看现有数据库show tables from scj;
#查看库中现有数据库select * from scj.scj1;
#查看表内容2.4 使用mysqldump备份数据库
#基本格式
mysqldump -u [用户名] -p[密码] --databases 库名1 [库名2] … /备份路径/备份文件名.sql
#导出的就是数据库脚本文件#完全备份一个或多个完整的库包括其中所有的表mysqldump -uXXX -p[XXX] 库名 XXX.sql
#备份指定库中的所有表数据不包含创建库的操作mysqldump -uroot -pabc123 scj /opt/backup/scj.sql
#只备份表和表中的内容并没有备份库cd /opt/backup
lscat scj.sql |egrep -v ^--|^/\*|^$
#过滤出需要的信息mysqldump -uroot -pabc123 --databases scj /opt/backup/scj_full.sql
#备份一个完整的库到/opt/backup目录下cat scj_full.sql |egrep -v ^--|^/\*|^$
#过滤出需要的信息mysqldump -u [用户名] -p[密码] --all-databases /备份路径/备份文件名.sqlmysqldump -u root -pabc123 --all-databases /opt/all_full.sql
#完全备份 MySQL 服务器中所有的库cat all_full.sql |grep ^CREATE DATABASEmysqldump -u root -p[密码] 库名 [表名1] [表名2] … /备份路径/备份文件名.sql
#备份指定库中的一个或多个表数据不包含创建库的操作mysqldump -u root -pabc123 scj scj2 /opt/backup/scj_scj2.sql
#备份scj库中scj2表cat scj_scj2.sql |egrep -v ^--|^/\*|^$
#查看备份内容信息2.5 使用source命令恢复数据库
#记得提前备份#模拟环境
#先登录mysql
mysql -uroot -pabc123mysqldrop databases scj;
#删除scj库source /opt/backup/scj_full.sql
#恢复完整的scj库#注一定要用绝对路径#也可以只用表数据进行恢复
create database scj;
#创建新scj库use scj;
#进入scj库source /opt/backup/scj.sql
#恢复库中表数据#因为scj.sql中不包含有创建库的操作所以可以在任意一个库中导入表数据2.6 使用mysql命令恢复数据库
#基本格式
mysql -uXXX -pXXX [库名] XXX.sql #如果sql文件只包含表的备份要指定库名
或
cat XXX.sql | mysql -uXXX -pXXX [库名]mysql -uroot -pabc123 scj scj.sql
#需要提前创建库mysql -uroot -pabc123 scj_full.sql
#直接恢复完整的数据库mysql -uroot -pabc123 -e drop database scj;
#-e 执行命令后退出数据库mysql -uroot -pabc123 -e show databases;
#查看是否删除完成mysql -uroot -pabc123 scj_full.sqlmysql -uroot -pabc123 -e show databases;
#查看是否恢复完成3. MySQL增量备份与恢复
3.1 使用完全备份所带来的问题
备份数据中有重复数据备份时间与恢复时间过长
3.2 增量备份简介
是自上一次备份后增加和变化的文件或内容
3.3 特点
没有重复数据备份量不大时间短恢复需要上次完全备份及完全备份之后所有的增量备份才能恢复而且要对所有增量备份进行逐个反推恢复
3.4 增量备份与日志的关系
MySQL没有提供直接的增量备份方法可通过MySQL提供的二进制日志间接实现增量备份
3.4.1 二进制日志对备份的意义
二进制日志保存了所有更新或者可能更新数据库的操作二进制日志在启动MySQL服务器后开始记录并在文件达到max binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件只需定时执行flushlogs方法重新创建新的日志生成二进制文件序列并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份
3.5 增量恢复方法类别
3.5.1 一般恢复
将所有备份的二进制日志内容全部恢复
3.5.2 基于位置恢复
数据库在某一时间点可能既有错误的操作也有正确的操作可以基于精准的位置跳过错误的操作
3.5.3 基于时间点恢复
跳过某个发生错误的时间点实现数据恢复
3.6 增量备份
3.6.1 开启二进制日志功能
vim /etc/my.cnf
#编辑配置文件#添加
log-binmysql-bin
binlog_format MIXED #可选指定二进制日志(binlog)的记录格式为 MIXED
server-id 1#二进制日志(binlog)有3种不同的记录格式STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式)默认格式是STATEMENTsystemctl restart mysqld
#重新启动服务ls /usr/local/mysql/data#因为二进制文件内容默认是二进制字符人是看不懂的
#所以使用mysqlbinlog命令
mysqlbinlog --no-defaults --base64-outputdecode-rows -v /usr/local/mysql/data/mysql-bin.000001
#以base64方式进行解码按行进行读取编码显示详细内容指定mysql-bin.000001文件#除了可以用重启来刷新mysql二进制文件还可以使用mysqladmin命令来刷新二进制文件mysqladmin -uroot -pabc123 flush-logs
#再次生成新的二进制日志文件cat mysql-bin.index
#该文件保存着所有的二进制文件的序列号3.6.2 实现增量备份
#模拟环境
select * from scj.scj1
#事先准备表#当天二进制文件是没有操作数据的
cat /usr/local/mysql/data/mysql-bin.000003
#查看最新二进制日志文件#首先实现完全备份
mkdir /opt/backupcd /opt/backup
mkdir full bin
#full目录做完全备份bin做增量备份vim /opt/mysqlquan.sh
#编写完全备份脚本
#!/bin/bash
mysqldump -u root -p123456 --all-databases /bak/all_$(date %F).sql chmod 700 /opt/mysqlquan.sh
#添加属主的权限vim /opt/binlog.sh
#编写增量备份脚本
#!/bin/bash
filename$(sed -n $p /usr/local/mysql/data/mysql-bin.index | awk -F / {print $2})
#使用sed命令打印二进制日志文件最后一行内容作为filename变量的值
mv /usr/local/mysql/data/$filename /bak/binlog_$(date %F)
#将二进制日志移动到备份目录下并将移动后的文件名称加上日期
mysqladmin -uroot -pabc123 flush-logs
#生成新的二进制日志文件 chmod 700 /opt/binlog.sh
#添加属主的权限crontab -e
#做计划任务mysqldump -uroot -pabc123 scj scj1 /opt/backup/full/scj_scj1-$(date %Y.%m.%d).sql
#将scj库下scj1表备份到/opt/backup/full下mysqladmin -uroot -pabc123 flush-logs
#重新生成一个二进制文件#进入数据库
#插入两条数据
insert into scj.scj1 values (7, 小黑子, 25, 男, 黑坤坤);
insert into scj.scj1 values (8, 小仙女, 18, 女, 打拳);select * from scj.scj1;
#查看内容mysqladmin -uroot -pabc123 flush-logs
#保存上一个文件并生成新一个文件mv -f mysql-bin.000004 /opt/backup/bin/mysql-bin.000004-$(date -d 1 day _%Y.%m.%d)#进入数据库
#插入两条数据
insert into scj.scj1 values (9, giao桑, 28, 男, giao);
insert into scj.scj1 values (10, 翠花, 18, 女, 看打拳);select * from scj.scj1;
#查看内容mysqladmin -uroot -pabc123 flush-logs
#保存上一个文件并生成新一个文件mv -f mysql-bin.000005 /opt/backup/bin/mysql-bin.000005-$(date -d 1 day _%Y.%m.%d)#进入数据库
#模拟被删库跑路了
drop databbase scj;2.6.3 一般恢复
#现在进行恢复
create database scj;
#新建库mysql -uroot -pabc123 scj /opt/backup/full/scj_scj1-2023.09.20.sql
#首先恢复基础表数据#进入数据库
select * from scj.scj1
#查看表内容#恢复第二次输入的内容
mysqlbinlog --no-defaults /opt/backup/bin/mysql-bin.000004-_20230921 | mysql -uroot -pabc123#进入数据库
select * from scj.scj1
#查看表内容#恢复第三次输入的内容
mysqlbinlog --no-defaults /opt/backup/bin/mysql-bin.000005-_2023.09.22 | mysql -uroot -pabc1233.6.4 端点恢复
#将二进制文件转译
mysqlbinlog --no-defaults --base64-outputdecode-rows -v mysql-bin.000004-_20230921 mysql-bin-2023.09.21mysqlbinlog --no-defaults --base64-outputdecode-rows -v mysql-bin.000005-_2023.09.22 mysql-bin-2023.09.223.6.4.1 基于位置恢复
#基本格式
mysqlbinlog --no-defaults --start-position位置点 --stop-position位置点 二进制日志文件 | mysql -uXXX -pXXX#示例
#只恢复小黑子那一段#进入数据库清空表数据
truncate table scj.scj1;vim /opt/backup/bin/vim mysql-bin-2023.09.21
#查看具体位置点mysqlbinlog --no-defaults --start-position293 --stop-position526 /opt/backup/bin/mysql-bin.000004-_20230921 | mysql -uroot -pabc123
#将具体的位置点传往数据库服务器
#注要使用二进制文件不要用编码后的二进制文件#前往数据库
select * from scj.scj1;
#查看内容3.6.4.2 基于时间点恢复
#基本格式
mysqlbinlog --no-defaults --start-datetimeYYYY-mm-dd HH:MM:SS --stop-datetimeYYYY-mm-dd HH:MM:SS 二进制日志文件 | mysql -uXXX -pXXX#示例
#只恢复小仙女那一段#进入数据库清空表数据
truncate table scj.scj1;vim /opt/backup/bin/vim mysql-bin-2023.09.21
#查看具体时间点mysqlbinlog --no-defaults --start-datetime2023-09-20 0:37:43 --stop-datetime2023-09-20 0:40:35 /opt/backup/bin/mysql-bin.000004-_20230921 | mysql -uroot -pabc123
#将具体时间点范围内的数据传往数据库服务器内#前往数据库
select * from scj.scj1;
#查看内容