1 Star 0 Fork 120

勇敢牛牛/DBA

forked from panglijing/DBA 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
RDBMS1_DAY06_知识点版 7.71 KB
一键复制 编辑 原始数据 按行查看 历史
panglijing 提交于 2021-11-17 03:50 . update RDBMS1_DAY06_知识点版.
一、数据备份与恢复
2.1 数据备份相关概念
1) 数据备份方式:
物理备份:直接拷贝数据库目录(使用系统命令 cp 或 tar)
逻辑备份:使用MySQL服务提供的命令或安装
第三方软件提供的命令,对已有数据做备份。
2) 数据备份策略:
完全备份: 备份所有数据
增量备份:备份上次备份后新产生的数据 (每次判断新数据 和前一次备份数据比较)
差异备份: 备份完全备份后新产生的数据(每次判断新数据 都是和完全备份数据做比较)
在工作中通常使用的备份策略
完全备份+增量备份
完全备份+差异备份
实现的方式 就是计划任务+备份脚本(可以使用shell 或 python 编写备份脚本)
物理备份回与恢复的优缺点:
优点:备份恢复简单
缺点:
备份和恢复数据均需要停止数据库服务(若不停止服务也可以备份,但会导致备份的不完全)
仅仅适用于同操作系统恢复数据
备份数据量大 备份时间长 浪费存储空间
适合 :线下服务器的数据库备份 数据量小的备份
逻辑备份之 使用MySQL服务提供的mysqldump命令对数据做备份和恢复
备份和恢复数据要求服务是运行的且管理员能登录(服务停止反而 备份和恢复不了数据)
完全备份命令格式;
]# mysqldump -uroot -p密码 数据库名 > /备份目录名/文件名.sql
数据库名的表示方式:
库名 表名 例如 tarena user #对一张表做完全备份(只备份一张表的所有记录)
-B 库名 例如 -B tarena #备份一个库下的所有表
-B 库名1 库名1 例如 -B tarena mysql #一起备份多个库的所有表
-A 或 --all-databases #备份一台服务器上的所有数据
恢复数据命令格式
]# mysql -uroot -p密码 < /备份目录名/文件名.sql
使用单张表的备份文件恢复数据 ,要写库名
]# mysql -uroot -p密码 库名 < /备份目录名/文件名.sql
mysqldump缺点
使用mysqldump备份文件恢复数据的时候,也会锁表
锁表 就是给表加锁 加了锁之后 无论对表做select 访问还是insert 访问 都不允许
备份或恢复数据操作完成后 会自动释放锁, 才允许对表做查询或存储操作。
所以在使用mysqldump备份时 要赶在访问量少的时候去备份。
使用完全备份文件恢复数据 只能把数据恢复到 备份时刻的状态,备份后再多出来的数据无法恢复
查看备份文件里的锁表命令
create table tarena.user1 select name, uid from tarena.user limit 3;
select * from tarena.user1;
exit;
]# mysqldump -uroot -pNSD2107...a tarena user1 > /root/user1.sql
]# vim /root/user1.sql
lock tables "write"
unlock tables;
~~~~~~~~~~~使用binlog日志文件实现对数据的时时备份
1 binlog日志介绍?
也称做 二进制日志
MySQL服务日志文件的一种
记录除查询之外的所有SQL命令
可用于数据的备份和恢复
配置mysql主从同步的必要条件
MySQL服务共有4种类型的日志文件:
错误日志文件 查询日志文件 慢查询日志文件 binlog日志文件
默认只有错误日志文件是启用的,其他3种没有启用
错误日志文件
vim /etc/my.cnf
[mysqld]
log-error=/var/log/mysqld.log
:wq
]#ls /var/log/mysqld.log 记录数据库服务启动信息和报错信息
2 启用binlog日志文件
3 自定义日志文件存放的位置和名称
4 查看日志文件的内容
5 binlog日志相关管理命令
~~~~~~~~使用binlog日志文件恢复数据
使用日志恢复所有数据(执行日志文件里记录的所有命令)
命令格式如下:
]# mysqlbinlog /目录名/日志文件名 | mysql -uroot -p密码
使用日志恢复部分数据(执行日志文件里记录的 指定范围的sql命令)
]# mysqlbinlog 选项 /目录名/日志文件名 | mysql -uroot -p密码
时间范围选项
起始时间 --start-datetime=""
结束时间 --stop-datetime=""
偏移量范围选项
起始偏移量 --start-position=偏移量数字
结束偏移量 --stop-position=偏移量数字
查看日志文件记录sql命令的格式?
mysql> show variables like "binlog_format";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
修改日志文件记录sql命令的格式?
~~~~使用第三方软件percona提供的备份命令innobackupex 对数据做备份和恢复
特点:在线热备不锁表 适合生产环境下备份业务。
注意:恢复数据时必须清空数据库目录 rm -rf /var/lib/mysql/*
安装提供命令的软件
数据完全备份与恢复 (对数据做完全备份也不锁表)
备份数据命令格式
]#innobackupex -uroot -p密码 /备份目录名 --no-timestamp
--no-timestamp 可选项,不用系统的日期做存放备份文件的目录名
恢复数据命令格式
第1步 准备恢复数据
]#innobackupex --apply-log /备份目录名
第2步 拷贝数据
]#innobackupex --copy-back /备份目录名
恢复数据的操作步骤:
1) 停止数据库服务
2) 清空数据库目录
3) 准备恢复数据
4) 拷贝数据
5) 修改数据库目录的所有者者组用户为mysql
6) 启动数据库服务
7) 管理员root用户登录服务查看数据
使用完全备份文件 恢复1张的数据
具体操作步骤:
1) 删除表空间 (表名.ibd) 用来存储表记录的文件 select * from 表;
删除表空间就是把数据库目录下没有记录的表名.idb文件删除
2) 导出表信息(生成备份目录下备份数据的信息文件)
3) 拷贝表信息文件到数据库目录下
4) 修改表信息文件的所有者及组用户为mysql
5) 导入表空间
6) 删除数据库目录下的表信息文件
7) 查看表记录
数据增量备份与恢复
说明:增量备份是备份上次备份后新产生的数据
所以在执行增量备份之前 必须得先有一次备份 不然的话无法得知那些数据是新数据
通常增量备份之前的备份 就应该是完全备份 比如 每周的周一都对数据做完全备份
每周的周二到周日 对数据都做增量备份
增量备份数据的命令格式
--incremental 备份新数据并定义新数据存放的目录名
--incremental-basedir 备份新数据参考的备份目录名
]#innobackupex -uroot -p密码 --incremental /目录名
--incremental-basedir=/目录名 --no-timestamp
增量恢复数据的命令格式
--incremental-dir 增量备份数据存放的目录名
]#innobackupex --apply-log --redo-only /首次备份目录名 #准备恢复数据
]#innobackupex --apply-log --redo-only /首次备份目录名 --incremental-dir=/目录名 #合并数据
使用增量备份文件恢复数据的具体操作步骤:
1) 停止数据库服务
2) 清空数据库目录
3) 准备恢复数据 (告诉程序innobackupex从什么位置开始合并数据)
4) 合并数据 (合并的次数要增量备份的次数一样 并且合并的顺序也有与增量备份的顺序一致)
5) 恢复数据 (把合并后的数据拷贝到数据库目录下)
6) 修改数据库目录的所有者和组用户为mysql
7) 启动服务
8) 查看数据
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/brave-co/dba.git
[email protected]:brave-co/dba.git
brave-co
dba
DBA
master

搜索帮助