姚耀 發表於 2026-3-6 08:36:00

怎么样在MySQL上使用备份恢复

<h1 id="1数据库服务备份恢复操作">1.数据库服务备份恢复操作</h1>
<pre><code class="language-bash">物理备份数据方式
#        拷贝数据库数据目录信息,实现物理备份(冷备)

步骤一:停止数据库服务
/etc/init.d/mysqld stop

步骤二:将数据库目录进行拷贝/压缩
cp -a /data/3306/data /backup/data-2026-03-05

步骤三:模拟数据库损坏
drop database oldboy;
drop database school;
drop database xiaoA;


步骤四:修复数据库中数据
/etc/init.d/mysqld stop
vim /etc/my.cnf

datadir=加载备份数据目录信息
/etc/init.d/mysqld start

rm -rf /data/3307/data/*
cp -a /backup/data-2026-03-05/* /data/3307/data
/etc/init.d/mysqld start
</code></pre>
<pre><code class="language-bash">利用物理备份工具备份数据,实现物理热备(热备)(Xtrabackup)
物理备份工具链接:https://www.percona.com/downloads/
应用物理备份工具需要关注版本信息:
xbk        8.4版本        完成数据库备份                mysql 8.4以上版本进行备份               
xbk        8.0版本        完成数据库备份                mysql 8.0以上版本进行备份
xbk        2.4版本        完成数据库备份                mysql 8.0以下版本进行备份

部署xbk工具并应用:
步骤一:解压安装部署备份工具
cd /usr/local/
tar xf percona-xtrabackup-8.0.35-34-Linux-x86_64.glibc2.28.tar.gz
ln -s percona-xtrabackup-8.0.35-34-Linux-x86_64.glibc2.28 xbk
vim /etc/profile
export PATH='$PATH:/usr/local/xbk/bin'
source /etc/profile

步骤二:应用备份工具备份数据
实现数据库数据物理备份
mkdir -p /backup/xbk/{full,inc01}
-- 一定确认好以上创建备份目录是空目录
xtrabackup --defaults-file=/data/3307/my80.cnf --host=10.0.0.51 --port=3307 --user=root --password=123456--backup--target-dir=/backup/xbk/full
成功备份后,会显示以下信息
completed OK!

--defaults-file   -- 备份工具进行备份数据时,需要加载备份数据库实例配置文件(配置文件存储默认路径,参数可省略)
--backup          -- 实现数据库数据备份操作
--target-dir      -- 将原有数据库数据目录信息备份到指定路径中

模拟数据库数据异常
drop database oldboy;
drop database school;
drop database xiaoA;

停止数据库服务运行
/etc/init.d/mysqld stop
rm -rf /data/3307/data/*
rm -rf /data/3307/logs/*

完成数据修复过程
xtrabackup --prepare --target-dir=/backup/xbk/full
内存数据恢复成功: completed OK!
-- 表示加载备份数据信息,实现将原有数据库服务内存中数据恢复

xtrabackup --defaults-file=/data/3307/my80.cnf --copy-back --target-dir=/backup/xbk/full
磁盘数据恢复成功: completed OK!
chown -R mysql.mysql /data/3307/data
chown -R mysql.mysql /data/3307/log/
-- 表示加载备份数据信息,实现将原有数据库服务磁盘中数据恢复(恢复原有数据目录中数据文件)

/etc/init.d/mysqld start
</code></pre>
<h2 id="实现数据库数据物理备份">实现数据库数据物理备份</h2>
<pre><code class="language-sh">实现数据库数据物理备份(全量+增量)

rm -rf /backup/xbk/{full,inc01}/*

步骤一:完成第一全量备份
xtrabackup --defaults-file=/data/3307/my80.cnf --host=10.0.0.51 --port=3307 --user=root --password=123456--backup --parallel=4 --target-dir=/backup/xbk/full

--parallel   利用此参数可以设置备份过程xbk进程对应线程信息,可以提高备份数据效率

步骤二:模拟进行增量数据创建
create database xkb;
create table t1 (id int,name char(10));
insert into t1 values (1,'xiaoA'),(2,'xiaoB');

步骤三:进行第一次增量备份
xtrabackup --defaults-file=/data/3307/my80.cnf --host=10.0.0.51 --port=3307 --user=root --password=123456 --backup --parallel=4 --target-dir=/backup/xbk/inc01--incremental-basedir=/backup/xbk/full

--incremental-basedir表示用于做数据信息变化对比,将此目录中数据作为对比对象(LSN),从而识别增量数据

扩展说明:如果还想进行第二次增量备份,如何执行备份操作
xtrabackup --defaults-file=/data/3307/my80.cnf --host=10.0.0.51 --port=3307 --user=root --password=123456 --backup --parallel=4 --target-dir=/backup/xbk/inc02--incremental-basedir=/backup/xbk/inc01

步骤四:模拟数据损坏
drop database oldboy;
drop database game;
drop database xkb;

完成数据修复过程(全量+增量)
步骤五:完成数据恢复操作
pkill mysqld
rm -rf /backup/data-2026-03-05/*
rm -rf /data/3307/log/*

xtrabackup --prepare--apply-log-only--target-dir=/backup/xbk/full
-- 加载全量目录中数据信息
xtrabackup --prepare--apply-log-only--target-dir=/backup/xbk/full --incremental-dir=/backup/xbk/inc01
--apply-log-only   简单理解:表示可以将全量和增量数据有效整合,保证内存中数据恢复完整
-- 将增量数据信息和全量数据信息合并整合

xtrabackup --prepare--target-dir=/backup/xbk/full
-- 将内存中数据进行恢复
xtrabackup --defaults-file=/data/3307/my80.cnf --copy-back--target-dir=/backup/xbk/full
-- 将磁盘中数据进行恢复

chown -R mysql.mysql /backup/data-2026-03-05/
chown -R mysql.mysql /data/3307/log/

步骤六:重新启动数据库服务检查数据信息
show databases;
</code></pre>
<h1 id="2数据库服务架构环境部署">2.数据库服务架构环境部署</h1>
<h3 id="1实现数据库主从同步架构">(1).实现数据库主从同步架构</h3>
<pre><code class="language-bash">作用01:可以实现数据信息实时备份保存
作用02:可以实现高可用架构部署
作用03:可以实现负载均衡架构部署
</code></pre>
<h3 id="2实现数据库主从同步原理️️️">(2).实现数据库主从同步原理❗️❗️❗️</h3>
<pre><code class="language-bash">两种方法介绍:

##########                1.详细说明                ##########
根据主从同步操作流程:
01.需要在主库中进行全量备份数据和创建主从同步用户
02.在从库中加载全量备份数据,然后再将主库中增量数据做同步处理
03.在从库中进行主从功能配置
        连接主库配置:地址配置                端口配置       用户信息       密码信息
        同步数据配置:配置需要加载binlog文件信息                加载位置点信息
        change master to ......
04.将配置信息会自动保存到数据库master.info文件中
05.启动主从同步功能                start slave;
        主从功能启动成功,会在从库出现两个线程
        IO线程;加载master.info文件信息,和主库建立连接
        SQl线程:空闲
06.主库接收IO线程连接请求后,会创建主库线程
        mysql dump:和从库IO线程对接,维持主从会话/监控binlog日志信息,将信息发送给IO线程
07.从库接收主库binlog日志信息
        IO线程:将接收到的binlog日志信息保存到relaylog日志中(中继日志)
                        在master.info文件中做binlog文件或位置点信息修改
        SQl线程:读取relaylog日志信息,并将日志信息中的事务语句进行执行
                        将relaylog日志信息读取的位置点,进行保存到relaylog.info文件中


##########                2.简单介绍                ##########
根据主从同步会应用进程和文件做介绍

实现主从同步原理需要应用三个线程和四个文件
#        ------三个线程------
IO线程:        实现主从之间建立连接会话
                  负责接收binlog日志事务信息/负责接收需要同步事务语句信息,会存储信息到中继日志
                  负责修改master.info文件中同步位置点信息
                  
SQl线程:        读取中继日志中事务语句信息,会将语句信息在从库执行
                  负责修改relaylog.info文件中已经回放事务信息的位置点
                  
dump线程:        负责从库维护会话建立
                  监控二进制日志信息,并将变化信息发送给从库

#        ------四个文件------
binlog:       记录主库中完成时误操作信息(DDL/DCL/DML),存储在主库               
                  如何查看:show binlog events in 'xxx';
                  
relaylog:记录主库中完成事务操作信息(DDL/DCL/DML),存储在从库
                  show relaylog events in 'xxx';
                  
master.info:   记录链接主库的配置信息,还有同步数据的位置点信息

relaylog.info: 记录中继日志被读取的位置点信息
</code></pre>
<h3 id="3实现数据库主从同步架构搭建">(3).实现数据库主从同步架构搭建</h3>
<h4 id="方式一采用传统方式实现主从搭建">方式一:采用传统方式实现主从搭建</h4>
<pre><code class="language-bash">环境准备:
10.0.0.51db-01 主库   数据库服务实例 8.0.36
10.0.0.52db-02 从库   数据库服务实例 8.0.36
10.0.0.53db-03 从库   数据库服务实例 8.0.36

步骤一:主库备份数据和创建主从同步用户
create user repl@'10.0.0.%' identified with mysql_native_password by '123456';
grant Replication slave on *.* to repl@'10.0.0.%';

mysqldump -uroot -p666666 -A --source-data &gt;/backup/all-03-05.sql

scp -rp /backup/all-03-05.sql 10.0.0.122:/backup/
scp -rp /backup/all-03-05.sql 10.0.0.123:/backup/

步骤二:从库进行主库传输后全量数据恢复
mysql &lt; /backup/all-03-05.sql
全量备份后位置点信息:binlog.0000011380

步骤三:在从库中进行主从功能配置
CHANGE MASTER TO
MASTER_HOST='10.0.0.51',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.000001',
MASTER_LOG_POS=1380;
-- 以上配置可以在mysql.slave_master_info 表中查看到配置信息

步骤四:激活主从同步数据功能
start slave;
-- 激活主从同步功能,就会在从库中创建IO线程和SQL线程,主库会创建dump线程



</code></pre>
<h3 id="4主从同步异常如何监控排查问题">(4).主从同步异常如何监控排查问题</h3>
<pre><code class="language-sh">show slave status\G
-- 查看主从同步状态信息,可以确认主从同步是否正常或异常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
-- 表示主从同步正常,如果未显示两个Yes信息,表示主从同步异常

Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
-- 当IO或SQL线程出现问题,以上信息中会显示对应线程出现错误异常原因

Master_Log_File: binlog.000001
Read_Master_Log_Pos: 1568
-- 以上信息表示IO线程接收到事务位置点信息
Relay_Master_Log_File: binlog.000001
Exec_Master_Log_Pos: 1568
-- 以上信息表示SQL线程执行的事务位置点信息

Seconds_Behind_Master: 0
-- 以上信息表示主从同步过程,是否有同步延迟情况

Replicate_Do_DB:         
Replicate_Ignore_DB:   
-- 设置SQL线程对于指定数据库是否回放数据信息的白名单和黑名单设置

Replicate_Do_Table:            
Replicate_Ignore_Table:
-- 设置SQL线程对于指定数据表是否回放数据信息的白名单和黑名单设置

Replicate_Wild_Do_Table:      
Replicate_Wild_Ignore_Table:
-- 实现SQL数据库针对表的同步模糊设置,实现白名单和黑名单设置
</code></pre>
<h1 id="总结">总结</h1>
<pre><code class="language-bash">01 数据库服务备份恢复
   物理备份恢复
   -- 复制方式备份恢复(冷备)
   -- 工具方式备份恢复(热备-xbk)
   全量数据备份与全量数据恢复/增量数据备份与增量数据恢复
02 数据库服务主从同步
   数据库主从同步原理(重要) 根据主从建立流程叙述主从原理/根据主从建立涉及到3线程和4文件做描述
   数据库主从同步实践      利用传统方式实现主从同步
   数据库主从状态查看(监控) 关注线程状态 数据同步延迟情况
</code></pre><br><br>
来源:https://www.cnblogs.com/jindongyan666/p/19675890
頁: [1]
查看完整版本: 怎么样在MySQL上使用备份恢复