重点:
多种日志:通用日志,慢查询日志
二进制日志
备份:热备份,冷备份
mysqldump 工具( 备份与还原 )
主从复制的工作原理
主从复制的实现
5)备份和恢复
5.1)备份恢复概述( 数据备份一定要重视 )
备份 与 还原( 二者缺一不可 )
5.1.1)为什么要备份
灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击、误操作测试等数据丢失场景。
参考链接:https://www.toutiao.com/a6939518201961251359/
5.1.2)备份类型
数据安全笔记:https://www.cnblogs.com/bitrabbit/p/13929478.html
完全备份,部分备份
完全备份:整个数据集( 如果数据量不大的情况下,可以每天都全量备份 )
小技巧:假设我们在每天的凌晨 2 点进行全量备份,但在 10 点遇到了问题,导致 2 点到 10 点之间的数据丢失,我们其实可以通过二进制日志文件来恢复数据。二进制日志文件记录了 2 点到 10 点间的所有操作,可以帮助我们将数据还原到出问题之前的状态。因此,尽管我们无法恢复 2 点到 10 点之间的具体数据,但我们可以通过操作记录将数据还原到接近10点的状态,从而减少数据丢失的影响。因此,我们才说二进制日志很重要,他可以帮助我们还原到出现问题前的时刻,避免数据大量丢失。
部分备份:只备份数据子集,如部分库或表。
完全备份、增量备份、差异备份
增量备份:仅备份最近一次完全备份或增量备份以来变化的数据(如果存在增量),备份较快,还原复杂。
周一:完全备份( 必须先做一个完全备份 )
周二:增量备份( 增量备份的是什么?备份的是周一到周二之间 变化的数据 )
周三:增量备份( 增量备份的是什么?备份的是周二到周三之间 变化的数据 )
周四:增量备份( 增量备份的是什么?备份的是周三到周四之间 变化的数据 )
周五:数据被破坏( 如何还原?先还原周一的完全备份,再依次还原周二周三周四的增量备份,再基于二进制日志文件恢复 临近数据被破坏时间段之前的操作到最近一个增量备份之间的操作 )
差异备份:仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单。
周一:完全备份( 必须先做一个完全备份 )
周二:差异备份( 差异备份的是什么?备份的是周一到周二之间 变化的数据 )
周三:差异备份( 差异备份的是什么?备份的是周一到周三之间 变化的数据 )
周四:差异备份( 差异备份的是什么?备份的是周一到周四之间 变化的数据 )
周五:数据被破坏( 如何还原?先还原周一的完全备份,再还原最近的一个差异备份即可,再基于二进制日志文件恢复 临近数据被破坏时间段之前到最后一个差异备份之间的操作)
注意:二进制日志文件 不应该与 数据文件 放在同一磁盘
冷、温、热备份
冷备:读、写操作均不可进行,数据库停止服务( 影响业务 )
温备:读操作可执行;但写操作不可执行( 只能读不能写 )
热备:读、写操作均可执行,( 数据库不受影响 )
MyISAM:温备,不支持热备
InnoDB:都支持( 能热备就热备 )
物理和逻辑备份
物理备份:直接复制数据文件进行备份,与存储引擎有关,占用较多的空间,速度快。
逻辑备份:从数据库中 "导出" 数据另存而进行的备份,与存储引擎无关,占用空间少,速度慢,可能丢失精度。
5.1.3)备份什么?
数据
二进制日志、InnoDB 的事务日志
用户帐号,权限设置,程序代码(存储过程、函数、触发器、事件调度器)
服务器的配置文件
5.1.4)备份注意要点
能容忍最多丢失多少数据
备份产生的负载
备份过程的时长
温备的持锁多久
恢复数据需要在多长时间内完成( 建议脚本化 )
需要备份和恢复哪些数据
5.1.5)还原要点
做还原测试,用于测试备份的可用性
还原演练,写成规范的技术文档( 定期演练 )
5.1.6)备份工具
cp,tar 等复制归档工具:物理备份工具,适用所有存储引擎;只支持冷备;完全和部分备份。( 必须:异机器备份 或 异地域备份 )
LVM 的快照:先加读锁,做快照后解锁,几乎热备;借助文件系统工具进行备份。
mysqldump:逻辑备份工具,适用所有存储引擎,对 MyISAM 存储引擎进行温备;支持完全或部分备份;对 InnoDB 存储引擎支持热备,结合 binlog 的增量备份。( 常用 )
xtrabackup:由 Percona 提供支持对 InnoDB 做热备(物理备份)的工具,支持完全备份、增量备份。( 更专业的备份工具 )
MariaDB Backup:从 MariaDB 10.1.26 开始集成,基于 Percona XtraBackup 2.3.8 实现。
mysqlbackup:热备份, MySQL Enterprise Edition 组件。
mysqlhotcopy:PERL 语言实现,几乎冷备,仅适用于 MyISAM 存储引擎,使用 LOCK TABLES、FLUSH TABLES和 cp 或 scp 来快速备份数据库。
5.1.7)实战案例:数据库冷备份和还原
注意:备份与还原主机的数据库版本要保持一致
MySQL 8.0( 数据库冷备份与还原案例 )
冷备份:生产环境少用,因为冷备份需要停止数据库服务
源主机:192.168.80.130
目标主机:192.168.80.150
注意:源主机与目标主机都需要安装 rsync 软件包
---- 备份过程 ----
// 在源主机 ( 192.168.80.130 ) 执行 ( 停止数据库服务 )
[root@centos8 ~] yum install rsync -y
[root@centos8 ~] systemctl stop mysqld
// 备份数据 ( 将相关文件复制到远程主机 )
# 如果配置及二进制文件相关有特殊设置也需要备份
[root@centos8 ~] yum install rsync -y
[root@centos8 ~] rsync -a /var/lib/mysql 192.168.80.150:/data/ # 注意: 192.168.80.150 须事先存在 /data/ 目录
---- 还原过程 ----
// 目标主机安装数据库服务
[root@centos8 ~] ll /data # 验证冷备份过来的数据
[root@centos8 ~] yum install mysql-server -y # 目标主机安装数据库服务 ( 需与源主机的数据库版本一致 )
// 将拷贝过来的备份文件复制到相关目录
[root@centos8 ~] cp -a /data/mysql/* /var/lib/mysql/
// 启用数据库服务
[root@centos8 ~] systemctl start mysqld
[root@centos8 ~] systemctl enable mysqld
// 验证
[root@centos8 ~] mysql
Mariadb 10.3
// 在目标服务器 (10.0.0.18) 安装 mariadb-server, 不启动服务
[root@centos8 ~] yum install mariadb-server
// 在源主机 (10.0.0.8) 执行 ( 停止数据库服务 )
[root@centos8 ~] systemctl stop mariadb
// 复制相关文件 ( 将相关文件复制到远程主机 )
[root@centos8 ~] scp -r /var/lib/mysql/* 10.0.0.18:/var/lib/mysql/
[root@centos8 ~] scp /etc/my.cnf.d/mariadb-server.cnf 10.0.0.18:/etc/my.cnf.d/
[root@centos8 ~] scp -r /data/logbin/ 10.0.0.18:/data/ # 10.0.0.18 须事先存在 /data/ 目录
// 复制相关文件并保留属性: 可以用 rsync
[root@centos8 ~] rsync /etc/my.cnf.d/mariadb-server.cnf 10.0.0.18:/etc/my.cnf.d/
[root@centos8 ~] rsync -av /var/lib/mysql/ 10.0.0.18:/var/lib/mysql/
[root@centos8 ~] rsync -av/data/logbin/ 10.0.0.18:/data/ # 10.0.0.18 须事先存在 /data/ 目录
// 在目标主机 (10.0.0.18) 执行
[root@centos8 ~] chown -R mysql.mysql /var/lib/mysql/
[root@centos8 ~] chown -R mysql.mysql /data/logbin/
[root@centos8 ~] systemctl start mariadb
5.2)mysqldump 备份工具
5.2.1)mysqldump 说明
逻辑备份工具:
mysqldump,mydumper,phpMyAdmin( MySQL 数据库服务必须是启动状态 )
Schema 和数据存储在一起、巨大的 SQL 语句、单个巨大的备份文件。
mysqldump 是 MySQL 的客户端命令,通过 mysql 协议连接至 mysql 服务器进行备份。
mysqldump 是 MySQL 自带的逻辑备份工具。
它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的 insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。
命令格式
mysqldump 参考:MySQL :: MySQL 5.7 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program
// 支持指定数据库和指定多表的备份, 但数据库本身定义不备份
1) 备份指定数据库或指定数据表
mysqldump [OPTIONS] database [tables]
// 支持指定数据库备份, 包含数据库本身定义也会备份
2) -B 备份多个数据库
mysqldump [OPTIONS] -B DB1 [DB2 DB3...]
// 备份所有数据库, 包含数据库本身定义也会备份
3) -A 备份所有数据库
mysqldump [OPTIONS] -A [OPTIONS]
演示:
// 备份单个数据库 hellodb
mysqldump -uroot -p hellodb > /root/hellodb.sql
// 查看备份的 SQL 文件
cat /root/hellodb.sql | grep -i create ( 发现该 SQL 文件并没有创建数据库的 SQL )
// 还需要我们"手动创建数据库"
// 才能导入成功该 SQL 文件
// ( 但我们并不知道当时创建该数据库时的字符集等等信息 )
// ( 因此不建议使用该备份方式~ )
mysql> create database hellodb;
Query OK, 1 row affected (0.01 sec)
mysql hellodb < hellodb.sql
演示:( 推荐使用 -B 选项备份数据库 )
// 使用 -B 选项备份数据库
mysqldump -B hellodb hellodb_2 > hellodb_all.sql
// 备份的 SQL 文件存在创建数据库的 SQL 语法
cat hellodb_all.sql | grep -i create
// 非交互式: 删除 hellodb 数据库
mysql -e 'drop database hellodb'
mysql -e 'show databases'
// 导入验证
mysql < /root/hellodb_all.sql
mysql -e 'show databases'
演示:( -A 选项:导出 mysql 数据库 + 自建的数据库 )
// 备份所有数据库
mysqldump -A > /root/all.sql
// 删库跑路
systemctl stop mysqld
rm -rf /var/lib/mysql/*
// 启用数据库
systemctl start mysqld
# 如果无法启用数据库服务
# 卸载重装数据库服务试试
yum remove mysql-server -y
yum install mysql-server -y
// 还原数据库
mysql < /root/all.sql
// 验证
mysql -e 'show databases'
mysqldump 常见通用选项:
-A, --all-databases // 备份所有数据库, 含 create database
-B, --databases db_name... // 指定备份的数据库, 包括 create database 语句
-E, --events: // 备份相关的所有事件 event scheduler
-R, --routines: // 备份所有存储过程和自定义函数
--triggers: // 备份表相关触发器, 默认启用, 用 --skip-triggers, 不备份触发器
--default-character-set=utf8 // 指定字符集 ( 备份时候建议加该选项 )
--master-data[=N] // ( "此选项数据库服务需启用二进制日志") "很重要的一个选项"
# 我们使用该选项指定当前备份的时间点
# 后续可以基于二进制日志文件恢复
# 数据被破坏时间段之前 到 最近一个备份数据之间的操作
1: 所备份的数据之前加一条记录为 CHANGE MASTER TO 语句, 非注释, 不指定 #, 默认为 1, 适合于主从复制多机使用
2: 记录为被注释的 # CHANGE MASTER TO 语句, 适合于单机使用, ( 适用于备份还原 )
此选项会自动关闭 --lock-tables 功能, 自动打开-x | --lock-all-tables 功能 (除非开启 --single-transaction)
-F, --flush-logs // 备份前滚动日志, 锁定表完成后, "执行 flush logs 命令, 生成新的二进制日志文件" 配合 -A 或 -B 选项时, 会导致刷新多次数据库. 建议在同一时刻执行转储和日志刷新, 可通过和 --single-transaction 或 -x, "--master-data 一起使用实现, 此时只刷新一次二进制日志" ( 这样就不需要找二进制日志的位置,因为刷新了新的二进制文件,直接将新的二进制文件恢复即可 )
--compact // 去掉注释, 适合调试, 节约备份占用的空间, ( 生产不建议 )
-d, --no-data // "只备份表结构,不备份数据" 即只备份 create table
-t, --no-create-info // "只备份数据,不备份表结构" 即不备份 create table
-n, --no-create-db // 不备份 create database, 可被 -A 或 -B 覆盖 ( 默认 )
--flush-privileges // 备份 MySQL 或相关时需要使用 ( 刷新权限 )
-f, --force // 忽略 SQL 错误, 继续执行 ( 强制执行 )
--hex-blob // 使用十六进制符号转储二进制列, 当有包括 BINARY, VARBINARY, BLOB, BIT 的数据类型的列时使用 ( 避免乱码 )
-q, --quick // 不缓存查询, 直接输出, 加快备份速度
5.2.2)实战案例( 重点 )
利用二进制日志,将数据库还原至最新状态
演示:( MySQL 小技巧:删库跑路如何恢复 )
实战案例:利用二进制日志,将数据库还原至最新状态
参考:记一次mysql从删库到恢复-CSDN博客
参考:【MySQL】删库跑路?了解下bin-log! - 掘金
mysqldump --master-data[=N]
--master-data=2 ( 适用于备份还原 )( 记录二进制日志文件名和位置 )
0) "前置条件" ( 开启二进制日志功能 )
## 并将二进制日志文件与数据库文件分开存放
1. 创建二进制日志文件的存放目录
mkdir /mysql/data/logbin -pv
chown -R mysql:mysql /mysql/data/logbin/
2. 定义二进制日志文件路径 ( 服务器选项: log-bin )
vim /etc/my.cnf
vim /etc/my.cnf.d/mysql-server.cnf # MySQL 8.0
[mysqld]
log_bin # 开启二进制日志功能 ( 必须 )
log-bin=/mysql/data/logbin/mysql-bin # 定义二进制日志文件路径
3. 重启 mariadb 服务
setenforce 0 # 关闭 SELinux ( 重要 )
systemctl restart mariadb.service
# 如重启报错 ( 可以尝试查看日志 tail -f /var/log/mysql/mysqld.log )
# 将报错信息发送至 ChatGPT 为你提供解决思路
4. 验证
ll /mysql/data/logbin
cat /mysql/data/logbin/mysql-bin.index ( 该文件记录当前已有的二进制日志文件列表 )
5. 验证
select @@sql_log_bin;
select @@log_bin;
1) 基于 mysqldump 完全备份数据库
mysqldump -A --master-data=2 > /data/all.sql
mysqldump -A --master-data=2 | gzip > /data/all.sql.gz # 建议: 备份并压缩
2) 备份完成后, "继续操作数据库"
mysql hellodb;
insert teachers values(5,'xiaoming',20,'M');
insert teachers values(6,'xiaohong',18,'F');
select * from teachers;
// 瞅瞅二进制日志
ll /mysql/data/logbin
// 查看完全备份文件
vim /data/all.sql // 该备份文件 ( 记录着当时二进制文件的备份位置 )
如图:该行记录着 mysqldump 命令运行时
二进制日志文件 binlog 的起始位置,这有助于我们恢复近期的二进制日志数据
3) 直接"删库跑路"
systemctl stop mysqld
rm -rf /var/lib/mysql/*
4) 先导出有用处的二进制日志文件
# 查看二进制日志文件中记录的备份位置信息
cat /data/all.sql | grep '^-- CHANGE MASTER TO'
# 然后进入二进制日志文件存放目录
cd /mysql/data/logbin
# 从特定的二进制日志位置开始提取数据,并将结果保存到一个新的SQL文件中
# 将有用处的二进制日志信息都导入一个新的 sql 文件
# 也就是执行完完全备份命令后 ( 记录的二进制日志内容 )
mysqlbinlog --start-position=7667 mysql-bin.000002 > /data/binlog.sql
# 验证文件
vim /data/binlog.sql
5) 恢复数据库
systemctl start mysqld # 启用数据库服务 ( 现在的数据库相当于是新安装的 )
set sql_log_bin=0; # 先临时禁用二进制日志记录功能 ( 避免在恢复过程中产生更多的日志数据 )
source /data/all.sql # 还原 mysqldump 数据库文件 ( 完全备份数据 )
source /data/binlog.sql # 还原 binlog 二进制日志数据
set sql_log_bin=1; # 继续开启二进制日志功能
6) 验证数据库
use hellodb;
select * from teachers;
mysqldump 的 MyISAM 存储引擎相关的备份选项:
MyISAM 不支持事务,只能支持温备;不支持热备
所以必须先锁定要备份的库,而后启动备份操作。
x,--lock-all-tables // "加全局读锁,锁定所有库的所有表" 同时加 --single-transaction 或 --lock-tables 选项会关闭此选项功能, 注意: 数据量大时, 可能会导致长时间无法并发访问数据库
-l,--lock-tables // 对于需要备份的每个数据库, 在启动备份之前分别锁定其所有表, 默认为 on, --skip-lock-tables 选项可禁用, 对备份 MyISAM 的多个库, 可能会造成数据不一致
// 注: 以上选项对 InnoDB 表一样生效, 实现温备, 但不推荐使用
mysqldump 的 InnoDB 存储引擎相关的备份选项:
InnoDB 存储引擎支持事务,可以利用事务的相应的隔离级别,实现热备,也可以实现温备但不建议用。
--single-transaction
// 此选项 Innodb 中推荐使用, 不适用 MyISAM
// "此选项会开始备份前, 先执行 START TRANSACTION 指令开启事务" ( 热备 )
// 此选项通过在单个事务中转储所有表来创建一致的快照. 仅适用于存储在支持多版本控制的存储引擎中的表 ( 目前只有 InnoDB 可以); 转储不保证与其他存储引擎保持一致. 在进行单事务转储时,要确保有效的转储文件 ( 正确的表内容和二进制日志位置 ), 没有其他连接应该使用以下语句: ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE, 此选项和 --lock-tables ( 此选项隐含提交挂起的事务 ) 选项是相互排斥, 备份大型表时,建议将 --single-transaction 选项和 --quick 结合一起使用
5.2.3)生产环境实战备份策略
InnoDB 建议备份策略
--single-transaction 确保备份在单个事务中完成。
--master-data=1 这个选项的作用是在备份中包含复制相关的信息。
--flush-privileges 在备份后刷新 MySQL 的权限
--default-character-set=utf8确保了导出的数据使用 UTF-8 编码
mysqldump -uroot -pP@ssw0rd123456 -A -F -E -R --triggers --single-transaction --master-data=1 --flush-privileges --default-character-set=utf8 --hex-blob
>${BACKUP}/fullbak_${BACKUP_TIME}.sql
MyISAM 建议备份策略
-X ( 全局读锁 )
mysqldump -uroot -pP@ssw0rd123456 -A -F -E -R -x --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob >${BACKUP}/fullbak_${BACKUP_TIME}.sql
5.2.3)mysqldump 备份还原实战案例
5.2.3.1)实战案例:特定数据库的备份脚本
[root@centos8 ~] vim mysql_backup.sh
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
TIME=`date +%F_%H-%M-%S`
DIR=/backup # 备份数据库的目录
DB=hellodb # 注意修改需要备份的数据库名称
PASS=P@ssw0rd123456 # 数据库密码
[ -d $DIR ] || mkdir $DIR
mysqldump -uroot -p "$PASS" -F -E -R --triggers --single-transaction --master-data=2 --default-character-set=utf8 -q -B $DB | gzip > ${DIR}/${DB}_${TIME}.sql.gz
// 授权
chmod +x mysql_backup.sh
// 计划任务
crontab -e
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
18 * * * * /root/mysql_backup.sh
// 验证
ll /backup
// 测试备份数据是否可以用于还原 ( "重要" )
cd /backup && gzip -d hellodb_2024-02-02_22-18-01.sql.gz
// 删库跑路
mysql
drop database hellodb;
// 测试还原
set sql_log_bin=0; # 临时禁用二进制日志功能
source /backup/hellodb_2024-02-02_22-18-01.sql
set sql_log_bin=1; # 开启二进制日志功能
// 验证数据库
show tables;
5.2.3.2)实战案例:分库备份并压缩
// 方式一
[root@centos8 ~] for db in `mysql -uroot -e 'show databases' | grep -Ev '^(Database|information_schema|performance_schema)$'`;do mysqldump -B $db | gzip > /backup/$db.sql.gz;done
// 方式二
[root@centos8 ~] mysql -uroot -e 'show databases' | grep -Ev '^(Database|information_schema|performance_schema)$' | while read db;do mysqldump -B $db | gzip > /backup/$db.sql.gz;done
// 方式三
[root@centos8 ~] mysql -uroot -e 'show databases' | grep -Ev '^(Database|information_schema|performance_schema)$' | sed -rn 's#(.*)#mysqldump -B \1 | gzip > /backup/\1.sql.gz#p' | bash
// 方式四
[root@centos8 ~] mysql -uroot -e 'show databases' | sed -rn '/^(Database|information_schema|performance_schema)$/!s#(.*)#mysqldump -B \1 | gzip > /backup/\1.sql.gz#p' | bash
5.2.3.3)实战案例:分库备份的实战脚本
// 列出 MySQL 服务器上的所有数据库
// 并从中排除 Database、schema和 sys 这三个数据库
mysql -uroot -e'show databases'
mysql -uroot -e'show databases' | grep -Ev "^Database|.*schema$|sys"
[root@centos8 ~] cat backup_db.sh
#!/bin/bash
TIME=`date +%F_%H-%M-%S`
DIR=/backup # 备份数据库的目录
PASS=P@ssw0rd123456 # 数据库密码
[ -d "$DIR" ] || mkdir $DIR
for DB in `mysql -uroot -p "$PASS" -e 'show databases' | grep -Ev "^Database|.*schema$|sys"`;do
mysqldump -F --single-transaction --master-data=2 --default-character-set=utf8 -q -B $DB | gzip > ${DIR}/${DB}_${TIME}.sql.gz
done
// 运行脚本
bash backup_db.sh
// 验证
ll /backup
5.2.3.4)实战案例:完全备份和还原
// 开启二进制日志
[root@centos8 ~] vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
log-bin
// 备份
[root@centos8 ~] mysqldump -uroot -pmagedu -A -F --single-transaction --master-data=2 | gzip > /backup/all-`date +%F`.sql.gz
// 还原
[root@centos8 backup] yum install mariadb-server
[root@centos8 backup] gzip -d all-2019-11-27.sql.gz
[root@centos8 ~] mysql
MariaDB [(none)]> set sql_log_bin=off;
MariaDB [(none)]> source /backup/all-2019-11-27.sql
MariaDB [(none)]> set sql_log_bin=on;
5.2.3.5)实战案例:利用二进制日志,还原数据库最新状态
// 二进制日志独立存放
[mysqld]
log-bin=/data/mysql/mysql-bin
// 完全备份, 并记录备份的二进制位置
mysqldump -uroot -pmagedu -A -F --default-character-set=utf8 --single-transaction --master-data=2 | gzip > /backup/all_`date +%F`.sql.gz
// 修改数据库
insert students (name,age,gender)value('mage',20,'M');
insert students (name,age,gender)value('wang',22,'M');
// 损坏数据库
rm -rf /var/lib/mysql/*
// 还原
cd /backup
gzip -d all_2019-11-25.sql.gz
// CentOS 8 需要事先生成数据库相关文件, CentOS7 不需要执行此步
mysql_install_db --user=mysql
systemctl restart mariadb
MariaDB [(none)]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 998 |
| mysql-bin.000002 | 28090 |
| mysql-bin.000003 | 342 |
+------------------+-----------+
3 rows in set (0.000 sec)
MariaDB [(none)]> set sql_log_bin=0;
MariaDB [(none)]> source /data/all_2019-11-25.sql
[root@centos8 ~] grep '^-- CHANGE MASTER TO' /data/all_2019-11-25.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=328;
// 二进制日志的备份
[root@centos8 mysql] mysqlbinlog mysql-bin.000001 --start-position=328 > /backup/inc.sql
[root@centos8 mysql] mysqlbinlog mysql-bin.000002 >> /backup/inc.sql
MariaDB [(none)]> set sql_log_bin=0;
MariaDB [(none)]> source /backup/inc.sql
MariaDB [(none)]> set sql_log_bin=1;
5.2.3.6)实战案例:mysqldump 和二进制日志结合实现差异(增量)备份
[root@centos8 ~] mysqldump -uroot -p -A -F --single-transaction --master-data=2 | gzip > /backup/all-`date +%F`.sql.gz
// 观察上面备份文件中记录的二进制文件和位置, 定期将其之后生成的所有二进制日志进行复制备份
[root@centos8 ~] cp /var/lib/mysql/mariadb-bin.000003 /backup // 假设 mariadb-bin.000003 是后续生成的二进制日志
[root@centos8 ~] mysqlbinlog backup/mariadb-bin.000003 > /backup/inc.sql
5.2.3.7)实战案例:恢复误删除的表
案例说明
每天