MySQL-备份(三)

备份作用:保证数据的安全和完整。

一 备份类别

|------|---------------------|----------------------------------------------|
| 类别 | 物理备份 xtrabackup | 逻辑备份mysqldump |
| 对象 | 数据库物理文件 | 数据库对象(如用户、表、存储过程等) |
| 可移植性 | 差,不能恢复到不同版本mysql | 对象级备份,可移植性强 |
| 占用空间 | 占用空间大 | 占用空间小 |
| 恢复效率 | 效率高(上百G建议使用) | 效率低 |
| 适用场景 | 大型业务系统的容灾恢复、系统级全量备份 | 主备数据库之间的增量数据备份、 不同业务系统之间数据同步、 业务不中断升级过程中数据迁移 |

二 逻辑备份具体操作

mysqldump连接参数

  • -u mysql用户名
  • -p mysql用户密码
  • -S mysql本地socket文件
  • -h 指定主机地址
  • -P 指定mysql端口

使用mysqldump命令进行数据备份_mysqldump备份数据库-CSDN博客

mysqldump备份参数

全量备份:导出所有库、表、数据,转存储为SQL文件 --all--databases, -A 转储所有数据库中的所有表

指定备份库下的多个表

指定哪些数据库,进行备份

备份单个数据表

备份多个表

只备份表结构 --no-data参数

只备份数据

三 锁表

基于会话锁表,防止他们冲突写入数据库

单独锁某个表

mysql> lock table a.city write;

mysql> unlock tables;

全局读锁,针对普通用户的写入权限

set global read_only=1;

set global read_only=0;

四 二进制binlog日志

作用:将 增删改 SQL语句记录下来(insert、update、delete、create、drop、alter、等关键字)

  1. 记录mysql数据的增量数据,用于增量数据库恢复
  2. 主从数据复制

开启:配置文件中设置

复制代码
#查看binlog日志
show binary logs;
#模拟binglog日志更新,随便插入数据,查看position变化
show master status;

binlog二进制转为可读性日志(使用mysqlbinlog --base64-output=decode-rows -vv 二进制日志 > x.txt)

cpp 复制代码
./mysqlbinlog --base64-output=decode-rows -vv   /data/mysql/data/atguigu-bin.000263> /tmp/decode-mysql-log.txt

五 拓展

mysql默认使用引擎是innodb,支持事务

开启二进制日志后,每次进行 增删改 操作,都会被计入,其position会变化

参考文档 :
MySQL基于xtrabackup、binlog实现全量备份、增量备份_extrabackup binlog-CSDN博客

使用mysqldump命令进行数据备份_mysqldump备份数据库-CSDN博客

六 多binlog日志恢复数据

模拟题:

1.先创建一个库a,flush logs(生成新的binlog日志)

2.创建一个表b,flush logs

3.插入数据到a.b表,flush logs

4.删除表b

如何恢复表b?

1.先停止binlog记录 :mysql> set sql_log_bin=0;

2.查找对应binlog日志,以及postitons:

mysqlbinlog --start-position =XX --stop-position =XX mysql-log-bin.000007 日志2 日志3 > /tmp/1.sql 在source恢复

3.查看数据恢复,重新开启binlog记录

七、基于GTID的binlog应用

六中需要我们,眼睛去观察每个事务操作的postion值,比较麻烦,从mysql5.7开始提供了更易于数据恢复的GTID模式。

  1. 通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID。
  2. 这种方式强化了数据库的主备一致性,故障恢复以及容错能力。
  3. 在原来基于二进制日志的复制中,从库需要告知主库要从哪个偏移量pos值进行增量同步,如果指定错误会造成数据的遗漏,从而造成数据的不一致。

GTID (Global Transaction IDentifier) 是全局事务标识。它具有全局唯一性,一个事务对应一个GTID。

查看事务:show binlog events in "日志名";

开启(必备参数):

cpp 复制代码
[mysqld]
gtid-mode=ON
enforce-gtid-consistency=true
log-slave-updates=ON
server_id=1

每个事务有一个id,不需要特别麻烦的去看每个事务的postion范围

mysqlbinlog --skip-gtids --include-gtids='65c03c38-b158-11ee-915b-000c291d9a97:1-293-294' mysql-log-bin.000263 > /opt/2.sql

相关推荐
csdn_aspnet1 小时前
在 MacOS 中安装 MySQL 8
mysql·macos
清风6666662 小时前
基于单片机的水塔液位检测与智能调节报警系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
gplitems1232 小时前
Technox – IT Solutions & Services WordPress Theme: A Practical
linux·服务器·数据库
不剪发的Tony老师3 小时前
MySQL 9.5创新版发布,有哪些新功能?
数据库·mysql
布朗克1683 小时前
MySQL 及 SQL 注入详细说明
数据库·sql·mysql·1024程序员节
武子康4 小时前
Java-154 深入浅出 MongoDB 用Java访问 MongoDB 数据库 从环境搭建到CRUD完整示例
java·数据库·分布式·sql·mongodb·性能优化·nosql
我科绝伦(Huanhuan Zhou)4 小时前
MySQL一键升级脚本(5.7-8.0)
android·mysql·adb
Austindatabases4 小时前
DBA 从“修电脑的” 到 上演一套 “数据治理” 大戏 --- 维护DBA生存空间,体现个体价值
数据库·dba
LB21124 小时前
Redis黑马点评 day01
数据库·redis·缓存
白小筠5 小时前
创建Django项目
数据库·django·sqlite