眼镜小龙 發表於 2025-12-18 11:35:24

MySQL核心日志与备份恢复示例详解

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">1.二进制日志</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">1.1 概述</a></li><li><a href="#_lab2_0_1">1.2 磁盘文件</a></li><li><a href="#_lab2_0_2">1.3 过期时间</a></li><li><a href="#_lab2_0_3">1.4 日志格式</a></li><li><a href="#_lab2_0_4">1.5 刷盘策略</a></li><li><a href="#_lab2_0_5">1.6 mysqlbinlog工具</a></li><ul class="third_class_ul"><li><a href="#_label3_0_5_0">1.6.1 准备数据</a></li><li><a href="#_label3_0_5_1">1.6.2 查看binlog</a></li><li><a href="#_label3_0_5_2">1.6.3 数据恢复</a></li></ul></ul><li><a href="#_label1">2.数据备份与恢复</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_6">2.1 分类</a></li><ul class="third_class_ul"><li><a href="#_label3_1_6_3">2.1.1 按数据存储形式划分</a></li><li><a href="#_label3_1_6_4">2.1.2 按数据库运行状态划分</a></li><li><a href="#_label3_1_6_5">2.1.3 按备份数据范围划分</a></li></ul><li><a href="#_lab2_1_7">2.2 mysqldump</a></li><ul class="third_class_ul"><li><a href="#_label3_1_7_6">2.2.1 工具介绍</a></li><li><a href="#_label3_1_7_7">2.2.2 示例</a></li><li><a href="#_label3_1_7_8">2.2.3 数据一致性问题</a></li></ul><li><a href="#_lab2_1_8">2.3 mysqlimport</a></li><ul class="third_class_ul"><li><a href="#_label3_1_8_9">2.3.1 工具介绍</a></li><li><a href="#_label3_1_8_10">2.3.2 示例</a></li></ul><li><a href="#_lab2_1_9">2.4 Xtrabackup</a></li><ul class="third_class_ul"><li><a href="#_label3_1_9_11">2.4.1 工具介绍</a></li><li><a href="#_label3_1_9_12">2.4.2 示例</a></li></ul></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>1.二进制日志</h2>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>1.1 概述</h3>
<p><code>作用:</code>二进制日志(Binary Log)以<strong>二进制格式</strong>存储,<strong>记录所有修改数据库数据的SQL语句(如insert、update、delete)或事件(如表结构变更)</strong></p>
<p><code>核心功能:</code></p>
<ul><li><strong>主从复制</strong>:主库通过二进制日志将数据变更同步到从库</li><li><strong>数据恢复</strong>:配合MySQL 自带的二进制日志解析工具mysqlbinlog,可将二进制日志转换为 SQL 语句并执行</li></ul>
<p><code>配置:</code></p>
<p><strong>系统级配置</strong>:使用Vim 编辑器编辑MySQL的配置文件(vim /etc/mysql/my.cnf),永久生效</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811280928.png" /></p>
<p><strong>会话级配置</strong>:在命令行客户端中设置变量session sql_log_bin,仅本次连接生效</p>
<div class="jb51code"><pre class="brush:sql;">-- 1 -&gt; 开启
-- 0 -&gt; 关闭
mysql&gt; set session sql_log_bin = ;
mysql&gt; show variables like '%sql_log_bin%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin   | ON   |
+---------------+-------+
</pre></div>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>1.2 磁盘文件</h3>
<ul><li>二进制日志文件名由 <strong>基本名 + 数字扩展名</strong> 组成,每生称新的文件时数字扩展名递增,从而保证有序的文件序列。当发生以下情况时会生成新的日志文件:
<ul><li>服务器重启</li><li>在命令行客户端刷新日志</li></ul></li></ul>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811280916.png" /></p>
<p>日志文件的大小达到 max_binlog_size设置的上线(默认值1GB)</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811280940.png" /></p>
<p>可以使用reset master重置日志文件和索引文件为初始状态</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811280924.png" /></p>
<p class="maodian"><a name="_lab2_0_2"></a></p><h3>1.3 过期时间</h3>
<p>在配置文件my.cnf中配置日志文件的过期时间,默认为2592000秒(30天),过期后会自动删除</p>
<div class="jb51code"><pre class="brush:sql;">#MySQL服务器配置

#二进制日志过期时间
binlog_expire_logs_seconds=2592000</pre></div>
<p>查看系统变量</p>
<div class="jb51code"><pre class="brush:sql;">mysql&gt; show variables like '%binlog_expire_logs_seconds%';
+----------------------------+---------+
| Variable_name            | Value   |
+----------------------------+---------+
| binlog_expire_logs_seconds | 2592000 |
+----------------------------+---------+
</pre></div>
<p class="maodian"><a name="_lab2_0_3"></a></p><h3>1.4 日志格式</h3>
<ul><li><code>statement:</code>记录的是 SQL 语句本身,即实际执行的 SQL 语句
<ul><li><strong>优点</strong>:仅记录 SQL 语句,占用空间少</li><li><strong>缺点</strong>:某些情况下可能导致主从数据不一致,例如使用非确定性函数(如 now() 或 rand() )时,主从服务器执行结果可能不同</li></ul></li><li><code>row:</code>记录的是每一行数据的变更情况,即具体哪些行被修改以及修改后的值<ul><li><strong>优点</strong>:数据一致性高,避免了非确定性函数的问题,适用于复杂的复制场景</li><li><strong>缺点</strong>:日志文件较大,尤其是批量操作时,会记录大量行变更信息</li></ul></li><li><code>mixed:</code>结合了statement和row格式的优点。默认情况下使用statement格式记录,但在某些可能导致不一致的场景下自动切换为row格式<ul><li><strong>优点</strong>:平衡了日志大小和数据一致性</li><li><strong>缺点</strong>:仍需注意某些特殊情况下可能存在的一致性问题</li></ul></li></ul>
<p style="text-align:center">推荐使用row格式</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811280942.png" /></p>
<p class="maodian"><a name="_lab2_0_4"></a></p><h3>1.5 刷盘策略</h3>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281051.png" /></p>
<p>binlog日志文件的刷盘策略可以通过sync_binlog系统变量来设置</p>
<ul><li><strong>sync_binlog=0</strong>:由操作系统决定刷盘时机。性能最高,但宕机时可能丢失较多binlog数据</li><li><strong>sync_binlog=1(推荐)</strong>:每次事务提交时都会刷盘,确保binlog不丢失。安全性最高,但性能较低</li><li><strong>sync_binlog=N(N&gt;1)</strong>:每N次事务提交后刷盘一次。平衡性能与安全性</li></ul>
<p class="maodian"><a name="_lab2_0_5"></a></p><h3>1.6 mysqlbinlog工具</h3>
<p><code>简介:</code>mysqlbinlog是MySQL自带的二进制日志解析工具,用于查看和管理MySQL的二进制日志文件(binlog)<br /><code>主要功能:</code></p>
<ul><li><strong>查看二进制日志内容</strong>:将二进制日志转换为可读的文本格式</li><li><strong>过滤日志事件</strong>:按时间、位置或数据库名筛选特定日志记录</li><li><strong>生成SQL脚本</strong>:将日志内容还原为SQL语句,用于数据恢复</li><li><strong>远程解析</strong>:支持解析远程MySQL服务器的二进制日志</li></ul>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811280912.png" /></p>
<ul><li>postion:每条日志都以 # at 开始,后⾯的数字表示该条日志记录的事件在文件中的偏移量</li><li>timestamp:事件发生的时间戳</li><li>server id:服务器标识</li><li>end_log_pos:下一个事件在文件中的偏移量(等于当前事件的结束偏移量+1)</li><li>type:事件类型(Query)</li><li>thread_id:执行事件的线程id</li><li>exec_time:执行事件花费的时间</li><li>error_code:错误码(0表示没有错误)</li></ul>
<p class="maodian"><a name="_label3_0_5_0"></a></p><h4>1.6.1 准备数据</h4>
<div class="jb51code"><pre class="brush:sql;">-- 建库
drop database if exists testdb;
create database testdb character set utf8mb4 collate utf8mb4_0900_ai_ci;
use testdb
-- 建表
create table t1 (
id bigint not null,
name varchar(20) not null
);
-- 写⼊
insert into t1 (id, name) values (101, 'user101');
insert into t1 (id, name) values (102, 'user102');
insert into t1 (id, name) values (103, 'user103');
insert into t1 (id, name) values (104, 'user104');
insert into t1 (id, name) values (105, 'user105');
insert into t1 (id, name) values (106, 'user106');
-- 更新
update t1 set name = 'person101' where id = 101;
update t1 set name = 'person102' where id = 102;
update t1 set name = 'person103' where id = 103;
-- 删除
delete from t1 where id = 104;
delete from t1 where id = 105;
delete from t1 where id = 106;</pre></div>
<p class="maodian"><a name="_label3_0_5_1"></a></p><h4>1.6.2 查看binlog</h4>
<div class="jb51code"><pre class="brush:sql;">mysqlbinlog --no-defaults --database=testdb --base64-output=decode-rows -vv --start-position=421 --stop-position=4626 binlog.000001
</pre></div>
<ul><li>no-defaults:禁止读取默认配置文件(如my.cnf),确保命令执行不受配置文件参数干扰</li><li>database:限定只显示与指定数据库相关的日志记录,过滤其他库的操作</li><li>base64-output=decode-rows:对二进制日志中的行事件(row格式日志)进行Base64解码,否则这类事件会以Base64编码形式显示</li><li>vv:双倍详细模式(verbose level 2),输出最完整的日志信息</li><li>start-position:从二进制日志文件的指定位置开始解析</li><li>stop-position:在二进制日志文件的指定位置停止解析</li></ul>
<p class="maodian"><a name="_label3_0_5_2"></a></p><h4>1.6.3 数据恢复</h4>
<ul><li>删除数据库<div class="jb51code"><pre class="brush:sql;">drop database testdb;</pre></div></li><li>通过日志文件恢复数据<div class="jb51code"><pre class="brush:sql;">mysqlbinlog --no-defaults --skip-gtids=true --start-position=234 --stop-position=4470 binlog.000001 | mysql -uroot -p -h127.0.0.1 -P3306
</pre></div></li></ul>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811280972.png" /></p>
<p class="maodian"><a name="_label1"></a></p><h2>2.数据备份与恢复</h2>
<p class="maodian"><a name="_lab2_1_6"></a></p><h3>2.1 分类</h3>
<p class="maodian"><a name="_label3_1_6_3"></a></p><h4>2.1.1 按数据存储形式划分</h4>
<p><strong>逻辑备份</strong>:备份数据库的逻辑结构和数据内容(如SQL语句、导出文件),与物理存储无关。例如MySQL的mysqldump</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281048.png" /></p>
<ul><li>备份文件中包含SQL语句,稍加修改就可以在不同数据库系统上执行</li><li>可以备份整个数据库或特定的数据库对象(使用<code>database</code>关键字创建的对象)</li><li>备份和恢复的速度比物理备份慢</li><li><strong>物理备份</strong>:直接复制数据库的物理文件(如数据文件、日志文件)。这种备份方法不涉及数据库的逻辑结构,而是直接在文件系统层面上复制数据库的存储结构(相当于Windows系统的Ctrl + C)</li></ul>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281039.png" /></p>
<ul><li>通常不能跨数据库厂商进行备份与恢复</li><li>可以非常快速地备份和恢复大型数据库,因为不需要解析SQL语句,直接复制文件即可</li></ul>
<p class="maodian"><a name="_label3_1_6_4"></a></p><h4>2.1.2 按数据库运行状态划分</h4>
<ul><li><strong>冷备份(离线备份)</strong>:需停止数据库服务后备份,备份过程中数据库服务不可用
<ul><li>影响业务连续性</li><li>技术实现较简单,不需要考虑数据一致性和并发控制</li><li>不会对数据库性能产生影响</li></ul></li><li><strong>热备份(在线备份)</strong>:在数据库运行时进行备份,备份过程中数据库服务依然可用<ul><li>备份数据是系统当前最新的</li><li>不影响业务连续性</li><li>在高负载情况下,可能对数据库性能产生一定影响</li><li>技术实现复杂,需要考虑数据一致性和并发控制</li></ul></li><li><strong>温备份</strong>:介于冷备份和热备份之间的一种备份方式,数据库在备份过程中部分可用或者处于只读模式<ul><li>业务中断时间较少</li></ul></li></ul>
<p class="maodian"><a name="_label3_1_6_5"></a></p><h4>2.1.3 按备份数据范围划分</h4>
<p><strong>全量备份</strong>:备份整个数据库或文件系统的所有数据,包括所有的文件、数据库表和配置文件等。不依赖于其他备份,可用独立恢复数据</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281181.png" /></p>
<p><strong>增量备份</strong>:仅备份自上次备份后变化的数据块</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281157.png" /></p>
<p><strong>差异备份</strong>:仅备份自上次全量备份以来所有变化的数据</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281196.png" /></p>
<p class="maodian"><a name="_lab2_1_7"></a></p><h3>2.2 mysqldump</h3>
<p class="maodian"><a name="_label3_1_7_6"></a></p><h4>2.2.1 工具介绍</h4>
<p><code>作用:</code>它是MySQL数据库系统提供的命令行工具,用于<strong>逻辑备份</strong>和<strong>数据导出</strong>。它生成包含SQL语句的文本文件,可用于重建数据库结构和数据<br /><code>核心功能:</code></p>
<ul><li><strong>备份数据库</strong>:导出表结构、数据、存储过程、触发器等</li><li><strong>恢复数据</strong>:通过导入SQL文件恢复数据库状态</li><li><strong>跨版本兼容</strong>:导出的SQL文件可在不同MySQL版本间迁移</li></ul>
<p class="maodian"><a name="_label3_1_7_7"></a></p><h4>2.2.2 示例</h4>
<ul><li>创建目录<div class="jb51code"><pre class="brush:bash;">mkdir /backup/mysql</pre></div></li><li>导出<div class="jb51code"><pre class="brush:bash;">mysqldump -uroot -p -h127.0.0.1 -P3306 -B testdb &gt; /backup/mysql/dump.sql</pre></div></li></ul>
<p>查看导出的SQL文件</p>
<div class="jb51code"><pre class="brush:bash;">cat /backup/mysql/dump.sql</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281213.jpg" /></p>
<ul><li>删除数据库<div class="jb51code"><pre class="brush:sql;">drop database testdb;
</pre></div></li><li>导入数据<ul><li>在命令行通过MySQL客户端工具直接恢复<div class="jb51code"><pre class="brush:bash;">mysql -uroot -p &lt; /backup/mysql/dump.sql</pre></div></li><li>登录MySQL客户端导入SQL文件<div class="jb51code"><pre class="brush:bash;">source /backup/mysql/dump.sql</pre></div></li></ul></li><li>查看数据<div class="jb51code"><pre class="brush:sql;">mysql&gt; use testdb;
Database changed
mysql&gt; select * from t1;
+-----+-----------+
| id| name      |
+-----+-----------+
| 101 | person101 |
| 102 | person102 |
| 103 | person103 |
+-----+-----------+</pre></div></li></ul>
<p class="maodian"><a name="_label3_1_7_8"></a></p><h4>2.2.3 数据一致性问题</h4>
<ul><li>mysqldump备份数据时的执行流程如下<ul><li>连接数据库</li><li>收集需要备份的数据</li><li>对所有待备份表加读锁</li><li>生成数据插入语句</li><li>释放锁</li></ul></li><li>备份过程中可能会产生数据一致性问题<ul><li>mysqldump在备份时默认情况下不会回滚未提交的事务,因此备份可能包含未提交的事务中的数据更改</li><li>如果在加读锁后发生事务回滚,备份结果备份可能包含部分事务的中间状态</li></ul></li></ul>
<p><strong>解决办法</strong>:使用<code>--single-transaction</code>,在事务中备份,使用MVCC获取一致性视图</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281163.png" /></p>
<p class="maodian"><a name="_lab2_1_8"></a></p><h3>2.3 mysqlimport</h3>
<p class="maodian"><a name="_label3_1_8_9"></a></p><h4>2.3.1 工具介绍</h4>
<p><code>作用:</code>它是MySQL数据库系统提供的命令行工具,用于高效地将文本文件数据导入到数据库表中。它是<strong>load data infile</strong>语句的封装,适用于批量数据加载场景<br /><code>核心功能:</code></p>
<ul><li><strong>快速导入</strong>:直接读取文件并加载到表,跳过SQL解析环节,性能优于逐行insert</li></ul>
<p class="maodian"><a name="_label3_1_8_10"></a></p><h4>2.3.2 示例</h4>
<ul><li>查看MySQL允许导出的授权目录<div class="jb51code"><pre class="brush:sql;">mysql&gt; show variables like 'secure_file_priv';
+------------------+-----------------------+
| Variable_name    | Value               |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
</pre></div></li><li>导出<div class="jb51code"><pre class="brush:sql;">select * from t1 into outfile '/var/lib/mysql-files/t1.txt';
</pre></div></li></ul>
<p>查看导出的文本文件</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281144.png" /></p>
<ul><li>删除数据表<div class="jb51code"><pre class="brush:sql;">delete from t1;
</pre></div></li><li>导入<div class="jb51code"><pre class="brush:sql;">mysqlimport -uroot -p testdb /var/lib/mysql-files/t1.txt
</pre></div>
<div class="jb51code"><pre class="brush:sql;">mysql&gt; select * from t1;
+-----+-----------+
| id| name      |
+-----+-----------+
| 101 | person101 |
| 102 | person102 |
| 103 | person103 |
+-----+-----------+
</pre></div>
<ul><li>查看数据</li></ul></li></ul>
<p class="maodian"><a name="_lab2_1_9"></a></p><h3>2.4 Xtrabackup</h3>
<p class="maodian"><a name="_label3_1_9_11"></a></p><h4>2.4.1 工具介绍</h4>
<p><code>作用:</code>Xtrabackup 是由 Percona 开发的一款开源MySQL数据库备份工具。它通过热备份实现高性能的数据库备份与恢复,适用于大规模生产环境<br /><code>核心功能:</code></p>
<ul><li><strong>热备份</strong>:在不中断数据库服务的情况下进行备份</li><li><strong>压缩与加密</strong>:支持备份文件的压缩和加密,提升安全性和存储效率</li><li><strong>快速可靠</strong>:备份速度快且可靠,同时会对备份的数据进行自动校验,确保备份数据的完整性</li><li><strong>性能影响小</strong>:在备份过程中,Xtrabackup对数据库的性能影响较小,不会增加太多的性能压力</li></ul>
<p><code>官网:</code><a href="https://www.percona.com/downloads" rel="external nofollow"   target="_blank">Xtrabackup下载网址</a></p>
<p><code>版本选择:</code></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281228.png" /></p>
<p><strong>查看Linux系统版本</strong></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281242.png" /></p>
<p><strong>查看MySQL版本</strong></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281273.png" /></p>
<ul><li><strong>XtraBackup 2.4</strong>:支持 MySQL 5.1、5.5、5.6 和 5.7,但不支持 MySQL 8.0</li><li><strong>XtraBackup 8.0</strong>:专为 MySQL 8.0 设计,但早期版本(如 8.0.12)不支持 MySQL 8.0.20 及以上版本</li><li>若使用 MySQL 8.0.20 及以上版本,建议选择 XtraBackup 8.0.27-19 或更高版本</li></ul>
<p><strong>查看CPU架构</strong></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281267.png" /></p>
<p><code>安装软件源</code></p>
<ul><li>把在Windows系统上下载完毕的<strong>percona-xtrabackup-80_8.0.35-34-1.noble_amd64.deb</strong>文件上传至Linux服务器</li><li>安装软件源</li></ul>
<div class="jb51code"><pre class="brush:bash;"># 安装软件源
dpkg -i percona-xtrabackup-80_8.0.35-34-1.noble_amd64.deb
# 更新源
apt update
# 安装xtrabackup
apt install percona-xtrabackup-80
# 如果提示缺少依赖运行以下命令安装
apt-get install -f
# 更新源
apt update
# 安装xtrabackup
apt install percona-xtrabackup-80</pre></div>
<p>验证是否安装成功</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281262.png" /></p>
<p class="maodian"><a name="_label3_1_9_12"></a></p><h4>2.4.2 示例</h4>
<p>创建备份用户</p>
<div class="jb51code"><pre class="brush:sql;">mysql&gt; create user 'backup_user'@'localhost' identified with mysql_native_password by '123456Aa@@';
Query OK, 0 rows affected (0.00 sec)
mysql&gt; grant backup_admin,process,select,reload,lock tables,replication client,event on *.* to 'backup_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)</pre></div>
<ul><li>默认情况下密码策略要求密码包含<strong>大小写字母、数字和特殊字符</strong></li><li>查看需要备份的目录</li></ul>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281367.jpg" /></p>
<p>备份数据文件</p>
<div class="jb51code"><pre class="brush:sql;">xtrabackup --defaults-file=/etc/mysql/my.cnf --host=localhost --port=3306 --user=backup_user --password=123456Aa@@ --use-memory=1G --parallel=2 --backup --target-dir=/backup/mysql/full
</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281224.jpg" /></p>
<p>移动或删除原来的的数据目录</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281368.jpg" /></p>
<p>创建数据目录同名的空目录</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281383.png" /></p>
<ul><li>xtrabackup --prepare 命令用于将备份数据转换为可恢复的数据库状态。该步骤对物理备份文件执行事务日志回放和回滚未提交事务,确保数据文件的一致性</li><li>数据恢复</li></ul>
<div class="jb51code"><pre class="brush:bash;"># 准备
xtrabackup --prepare --target-dir=/backup/mysql/full
# 数据恢复
xtrabackup --defaults-file=/etc/mysql/my.cnf --copy-back --parallel=2 --target-dir=/backup/mysql/full</pre></div>
<p>为恢复后的数据目录授权</p>
<div class="jb51code"><pre class="brush:bash;">chown -R mysql:mysql /var/lib/mysql</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121811281316.jpg" /></p>
<p>重启MySQL服务</p>
<div class="jb51code"><pre class="brush:sql;">systemctl restart mysql</pre></div>
<p>登录数据库验证数据</p>
<div class="jb51code"><pre class="brush:sql;">mysql&gt; use testdb;
No connection. Trying to reconnect...
Connection id:    8
Current database: *** NONE ***
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql&gt; select * from t1;
+-----+-----------+
| id| name      |
+-----+-----------+
| 101 | person101 |
| 102 | person102 |
| 103 | person103 |
+-----+-----------+</pre></div>
頁: [1]
查看完整版本: MySQL核心日志与备份恢复示例详解