<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>运维派</title><link>https://ywpie.com/</link><description>专注运维与数据库技术分享</description><item><title>达梦数据库教程（16）审计规则介绍与配置</title><link>https://ywpie.com/post/86.html</link><description>&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、达梦数据库审计功能介绍&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;数据库审计功能的主要作用是对数据的操作进行记录，比如谁在什么时间、通过什么IP、执行了什么SQL。只有当配置了合理的审计规则后，才能对&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;异常&lt;/span&gt;数据（&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;如数据不知道为什么被删除或修改&lt;/span&gt;）进行追溯。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;达梦数据库采用三权分立设计，&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;必须需要专门的审计账号&amp;nbsp;SYSAUDITOR 才能进行审计配置（&lt;/span&gt;SYSDBA 账号也没有权限&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;）&lt;/span&gt;。SYSAUDITOR 账号在完成数据库安装后会默认创建，默认密码&amp;nbsp;SYSAUDITOR&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;二、达梦数据库审计配置&lt;/span&gt;&lt;/h2&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、开启审计功能&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DM8 的审计功能默认是关闭的，需登录 SYSAUDITOR 账号开启。达梦数据库的审计分为普通审计和实时检测，实时检测比较少用，主要&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;用于安全防护，可在操作发生时自动告警、断开连接甚至锁账号&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;开启普通审计，默认0为关闭审计；1为开启普通审计；2为开启普通审计&amp;nbsp;+&amp;nbsp;实时检测
SP_SET_ENABLE_AUDIT(1);

--&amp;nbsp;验证是否生效
SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;V$DM_INI&amp;nbsp;WHERE&amp;nbsp;PARA_NAME&amp;nbsp;=&amp;nbsp;&amp;#39;ENABLE_AUDIT&amp;#39;;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、审计规则配置&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;达梦数据库支持三个级别的审计规则，从粗到细依次为系统级、语句级、对象级。&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2.1 系统级审计&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;审计功能开启后自动生效，无需额外配置，审计内容包含数据库启停、参数修改、主备日志传输故障等系统事件&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2.2 语句级审计&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;针对某类 SQL 操作进行审计，全局生效，适合需要全实例覆盖的场景&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;&lt;p&gt;-- 语法规则&lt;br/&gt;-- SP_AUDIT_STMT(&amp;#39;审计选项&amp;#39;, &amp;#39;用户名&amp;#39;, &amp;#39;ALL/SUCCESSFUL/FAIL&amp;#39;); &amp;nbsp; &amp;nbsp;如果不限定用户，第二个参数应该传字符串 &amp;#39;NULL&amp;#39;，而不是真正的 NULL&lt;br/&gt;&lt;br/&gt;-- 审计所有用户的登录登出&lt;br/&gt;SP_AUDIT_STMT(&amp;#39;CONNECT&amp;#39;, &amp;#39;NULL&amp;#39;, &amp;#39;ALL&amp;#39;);&lt;br/&gt;&lt;br/&gt;-- 审计所有用户的 DML 操作&lt;br/&gt;SP_AUDIT_STMT(&amp;#39;INSERT TABLE&amp;#39;, &amp;#39;NULL&amp;#39;, &amp;#39;ALL&amp;#39;);&lt;br/&gt;SP_AUDIT_STMT(&amp;#39;UPDATE TABLE&amp;#39;, &amp;#39;NULL&amp;#39;, &amp;#39;ALL&amp;#39;);&lt;br/&gt;SP_AUDIT_STMT(&amp;#39;DELETE TABLE&amp;#39;, &amp;#39;NULL&amp;#39;, &amp;#39;ALL&amp;#39;);&lt;br/&gt;&lt;br/&gt;-- 审计所有用户的 DDL 操作&lt;br/&gt;SP_AUDIT_STMT(&amp;#39;TABLE&amp;#39;, &amp;#39;NULL&amp;#39;, &amp;#39;ALL&amp;#39;);&lt;br/&gt;&lt;br/&gt;-- 审计某个用户的操作&lt;br/&gt;SP_AUDIT_STMT(&amp;#39;UPDATE TABLE&amp;#39;, &amp;#39;APPUSER&amp;#39;, &amp;#39;ALL&amp;#39;);&lt;br/&gt;-- 取消审计，参数必须与设置时完全一致才能取消&lt;br/&gt;SP_NOAUDIT_STMT(&amp;#39;INSERT TABLE&amp;#39;, &amp;#39;NULL&amp;#39;, &amp;#39;ALL&amp;#39;);&lt;/p&gt;&lt;/pre&gt;&lt;h4&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2.3 对象级审计&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;精确到具体的表、视图或存储过程，可进一步细化到列级别，适合对核心业务表做重点审计&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;语法规则
--&amp;nbsp;SP_AUDIT_OBJECT(&amp;#39;操作&amp;#39;,&amp;nbsp;&amp;#39;用户&amp;#39;,&amp;nbsp;&amp;#39;模式&amp;#39;,&amp;nbsp;&amp;#39;对象名&amp;#39;,&amp;nbsp;&amp;#39;时机&amp;#39;);
--&amp;nbsp;SP_AUDIT_OBJECT(&amp;#39;操作&amp;#39;,&amp;nbsp;&amp;#39;用户&amp;#39;,&amp;nbsp;&amp;#39;模式&amp;#39;,&amp;nbsp;&amp;#39;对象名&amp;#39;,&amp;nbsp;&amp;#39;列名&amp;#39;,&amp;nbsp;&amp;#39;时机&amp;#39;);

--&amp;nbsp;审计所有人对&amp;nbsp;HR.SALARY&amp;nbsp;表的&amp;nbsp;INSERT&amp;nbsp;和&amp;nbsp;UPDATE
SP_AUDIT_OBJECT(&amp;#39;INSERT&amp;#39;,&amp;nbsp;&amp;#39;NULL&amp;#39;,&amp;nbsp;&amp;#39;HR&amp;#39;,&amp;nbsp;&amp;#39;SALARY&amp;#39;,&amp;nbsp;&amp;#39;ALL&amp;#39;);
SP_AUDIT_OBJECT(&amp;#39;UPDATE&amp;#39;,&amp;nbsp;&amp;#39;NULL&amp;#39;,&amp;nbsp;&amp;#39;HR&amp;#39;,&amp;nbsp;&amp;#39;SALARY&amp;#39;,&amp;nbsp;&amp;#39;ALL&amp;#39;);

--&amp;nbsp;只审计&amp;nbsp;AMOUNT&amp;nbsp;列的修改
SP_AUDIT_OBJECT(&amp;#39;UPDATE&amp;#39;,&amp;nbsp;&amp;#39;NULL&amp;#39;,&amp;nbsp;&amp;#39;HR&amp;#39;,&amp;nbsp;&amp;#39;SALARY&amp;#39;,&amp;nbsp;&amp;#39;AMOUNT&amp;#39;,&amp;nbsp;&amp;#39;ALL&amp;#39;);

--&amp;nbsp;取消对象级审计（参数同样需完全匹配）
SP_NOAUDIT_OBJECT(&amp;#39;INSERT&amp;#39;,&amp;nbsp;&amp;#39;NULL&amp;#39;,&amp;nbsp;&amp;#39;HR&amp;#39;,&amp;nbsp;&amp;#39;SALARY&amp;#39;,&amp;nbsp;&amp;#39;ALL&amp;#39;);&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3、审计日志管理&lt;/span&gt;&lt;/h3&gt;&lt;h4&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3.1 审计日志存放路径&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;默认存放在数据目录中，文件命名格式为 AUDIT_&amp;lt;GUID&amp;gt;_&amp;lt;创建时间&amp;gt;.log&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;查看审计文件实际存放路径
SELECT&amp;nbsp;AUD_PATH&amp;nbsp;FROM&amp;nbsp;V$AUDIT_SPACE;

--&amp;nbsp;查看所有审计文件列表
SELECT&amp;nbsp;FILEPATH,&amp;nbsp;BEGIN_TIME,&amp;nbsp;LENGTH/1024/1024&amp;nbsp;AS&amp;nbsp;SIZE_MB,&amp;nbsp;IS_FULL&amp;nbsp;FROM&amp;nbsp;V$AUDIT_FILE&amp;nbsp;ORDER&amp;nbsp;BY&amp;nbsp;BEGIN_TIME&amp;nbsp;DESC;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;如需自定义日志存放路径，修改 dm.ini&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#&amp;nbsp;静态参数，修改后需重启
AUD_PATH&amp;nbsp;=&amp;nbsp;/data/dm_audit&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3.2 审计日志相关参数配置&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;以下参数都在dm.ini中进行配置，部分静态参数需要重启数据库生效&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· AUD_PATH&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：审计文件存放路径&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;AUDIT_MAX_FILE_SIZE&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;： 单个审计日志的最大大小，单位为MB&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;调整单个审计文件的大小为&amp;nbsp;500MB
SP_SET_PARA_VALUE(1,&amp;nbsp;&amp;#39;AUDIT_MAX_FILE_SIZE&amp;#39;,&amp;nbsp;500);&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;AUDIT_SPACE_LIMIT&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：审计日志可以占用的最大磁盘空间，单位为MB，0表示不限制&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;查看当前审计空间用量
SELECT&amp;nbsp;AUD_PATH,&amp;nbsp;AUDIT_MAX_FILE_SIZE,&amp;nbsp;AUD_SPACE_LIMIT,AUD_SPACE_FREE,&amp;nbsp;AUDIT_IS_NORMAL&amp;nbsp;FROM&amp;nbsp;V$AUDIT_SPACE;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;AUDIT_KEEP_DAYS&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：审计文件最小保留天数，如果配置了具体天数，优先级大于&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;AUDIT_SPACE_LIMIT，&lt;/span&gt;即达到审计文件总存储空间大小的限制也不会删除在指定保留天数内的审计日志&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;AUDIT_FILE_FULL_MODE&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：磁盘不足时对审计日志的处理策略，&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1=当审计文件创建失败时发生阻塞；&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2=审计文件创建失败时不再审计；&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3=先尝试删除符合条件的审计文件，如果删除后还是创建失败则不再审计&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3.3 清理与切换审计日志&lt;/span&gt;&lt;/h4&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;删除指定时间点前的审计文件，受&amp;nbsp;AUDIT_KEEP_DAYS&amp;nbsp;保护的文件不会被删除
SP_DROP_AUDIT_FILE(&amp;#39;2026-07-01&amp;nbsp;00:00:00&amp;#39;,0);

--&amp;nbsp;手动切换审计文件（生成新文件），1=切换普通审计文件，2=同时切换普通+实时审计文件
SP_SWITCH_AUDIT_FILE(1);&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3.4 查看审计记录&lt;/span&gt;&lt;/h4&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;查看最近的审计记录
SELECT&amp;nbsp;USERNAME,&amp;nbsp;OPERATION,&amp;nbsp;SCHNAME,&amp;nbsp;OBJNAME,SQL_TEXT,&amp;nbsp;SUCC_FLAG,&amp;nbsp;OPTIME,&amp;nbsp;IP
FROM&amp;nbsp;SYSAUDITOR.V$AUDITRECORDS
ORDER&amp;nbsp;BY&amp;nbsp;OPTIME&amp;nbsp;DESC;

--&amp;nbsp;按用户过滤
SELECT&amp;nbsp;USERNAME,&amp;nbsp;OPERATION,&amp;nbsp;SQL_TEXT,&amp;nbsp;OPTIME
FROM&amp;nbsp;SYSAUDITOR.V$AUDITRECORDS
WHERE&amp;nbsp;USERNAME&amp;nbsp;=&amp;nbsp;&amp;#39;APPUSER&amp;#39;
ORDER&amp;nbsp;BY&amp;nbsp;OPTIME&amp;nbsp;DESC;&lt;/pre&gt;</description><pubDate>Thu, 09 Jul 2026 15:19:29 +0800</pubDate></item><item><title>Oracle教程（6）SGA\PGA\REDO核心参数调优</title><link>https://ywpie.com/post/82.html</link><description>&lt;h2&gt;&lt;strong style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、Oracle核心参数介绍&lt;/span&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;h3&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、SGA&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;SGA（System Global Area）是 Oracle 实例启动时分配的共享内存区域，所有连接到该实例的会话都共用这块内存，&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;是整个数据库实例对外提供服务的公共内存池&lt;/span&gt;（和&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;&amp;nbsp;MySQL的 InnoDB Buffer Pool 类似&lt;/span&gt;）。SGA主要包含以下部分：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· Shared Pool：用于缓存 SQL 解析结果、执行计划和数据字典信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· Buffer Cache：用于缓存数据块，减少物理读&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;Redo Log Buffer：用于临时存放尚未写入磁盘的重做日志条目。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Oracle 的 SGA 是集合体，而 MySQL 的内存管理相对分散，Buffer Pool、Sort Buffer、Join Buffer 等是各自独立配置的参数，没有一个统一的实例级共享内存区概念&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、PGA&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;PGA（Program Global Area）是 Oracle 实例中每个进程或会话所私有的内存区域，每个区域不与其他会话共享。主要用于排序操作、哈希连接等需要临时空间的操作。当一个会话 ORDER BY、GROUP BY 或者大表之间的 HASH JOIN 时，如果数据量超过 PGA 能提供的内存上限，就会发生排序溢出到磁盘，导致性能下降。在&amp;nbsp;MySQL 中与之对应的是每个连接独立分配的 sort_buffer_size、join_buffer_size、tmp_table_size 等参数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3、&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;REDO LOG&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;在 Oracle 中 REDO LOG 和 MySQL 一样都是通过重做日志记录数据库所有数据变更操作的&amp;quot;重放记录&amp;quot;，这样可以在实例崩溃后，通过 Redo Log 可以把数据恢复到崩溃前的状态，保证事务的持久性。在 MySQL 中 REDO LOG 是循环覆盖写入的，而 Oracle 采用多个日志组循环写入的机制，当一个日志组写满后会触发日志切换（log switch），同时触发增量检查点（checkpoint），把脏数据写回数据文件。如果日志组设置过小，会导致切换过于频繁，对性能造成明显影响。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Oracle 的 &lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;REDO LOG&lt;/span&gt; 搭配归档日志（&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;归档日志是 Redo Log 切换后被复制保存的历史副本&lt;/span&gt;）来实现时间点恢复，也就是说 Oracle 用 &lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;REDO LOG&lt;/span&gt; 兼顾实例恢复和时间点恢复两个目的，而 MySQL 把这两个职责拆成了 &lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;REDO LOG&amp;nbsp;&lt;/span&gt;（实例恢复）和 Binlog（时间点恢复、主从复制）两套独立的日志系统。&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;二、Oracle内存管理方式介绍&lt;/span&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Oracle 提供了三种内存管理方式&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; interlaced=&quot;enabled&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;ue-table-interlace-color-single firstRow&quot;&gt;&lt;td width=&quot;306&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;strong&gt;管理方式&lt;/strong&gt;&lt;/td&gt;&lt;td width=&quot;306&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;strong&gt;关键参数&lt;/strong&gt;&lt;/td&gt;&lt;td width=&quot;306&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;strong&gt;适用场景&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;ue-table-interlace-color-double&quot;&gt;&lt;td width=&quot;306&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;AMM自动内存管理&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;306&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;MEMORY_TARGET&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;306&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;background-color: #FF0000;&quot;&gt;不推荐&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;ue-table-interlace-color-single&quot;&gt;&lt;td width=&quot;306&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;ASMM自动共享内存管理&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;306&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;SGA_TARGET + PGA_AGGREGATE_TARGET&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;306&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;生产环境推荐&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;ue-table-interlace-color-double&quot;&gt;&lt;td valign=&quot;middle&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;手动管理&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;middle&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;逐项指定各子池大小&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;middle&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;对内存有精细控制需求时&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;之所以不推荐通过 AMM 方式来自动进行内存管理，是因为通过 MEMORY_TARGET 自动管理 SGA + PGA听起来方便，但由于 AMM 模式在高并发场景下会频繁的出现内存移动，反而增大了性能开销&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、SGA配置最佳实践&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;通常建议 SGA 总量不超过服务器物理内存的 60%，剩余部分留给 OS、PGA 以及其他进程&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;查看当前&amp;nbsp;SGA&amp;nbsp;配置
SHOW&amp;nbsp;PARAMETER&amp;nbsp;SGA;

--&amp;nbsp;设置&amp;nbsp;SGA_TARGET，让&amp;nbsp;Oracle&amp;nbsp;在这个总量内自动分配各子池
ALTER&amp;nbsp;SYSTEM&amp;nbsp;SET&amp;nbsp;SGA_TARGET=8G&amp;nbsp;SCOPE=SPFILE;
ALTER&amp;nbsp;SYSTEM&amp;nbsp;SET&amp;nbsp;SGA_MAX_SIZE=8G&amp;nbsp;SCOPE=SPFILE;

--&amp;nbsp;设置&amp;nbsp;Shared&amp;nbsp;Pool&amp;nbsp;子池最小值，防止&amp;nbsp;AMM/ASMM&amp;nbsp;压缩得过小出现ORA-04031共享池耗尽的情况
ALTER&amp;nbsp;SYSTEM&amp;nbsp;SET&amp;nbsp;SHARED_POOL_SIZE=2G&amp;nbsp;SCOPE=SPFILE;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;子池参考比例（以 16G SGA 为例）：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· Buffer Cache&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：10～12G ，SGA 里占比最大，越大越好。命中率低于 95% 就需要考虑加大 Buffer Cache，正常生产环境应该维持在 98% 以上&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;查询&amp;nbsp;Buffer&amp;nbsp;Cache&amp;nbsp;命中率
SELECT&amp;nbsp;ROUND((1&amp;nbsp;-&amp;nbsp;(phys.value&amp;nbsp;/&amp;nbsp;(cur.value&amp;nbsp;+&amp;nbsp;con.value)))&amp;nbsp;*&amp;nbsp;100,&amp;nbsp;2)&amp;nbsp;AS&amp;nbsp;&amp;quot;Buffer命中率%&amp;quot;&amp;nbsp;FROM&amp;nbsp;v$sysstat&amp;nbsp;phys,&amp;nbsp;v$sysstat&amp;nbsp;cur,&amp;nbsp;v$sysstat&amp;nbsp;con
WHERE&amp;nbsp;phys.name&amp;nbsp;=&amp;nbsp;&amp;#39;physical&amp;nbsp;reads&amp;#39;&amp;nbsp;AND&amp;nbsp;cur.name&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;#39;db&amp;nbsp;block&amp;nbsp;gets&amp;#39;&amp;nbsp;AND&amp;nbsp;con.name&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;#39;consistent&amp;nbsp;gets&amp;#39;;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;Shared Pool&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：2～4G，OLTP 系统多，SQL 复杂度高则需要更大。&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;硬解析率超过 30% 就需要排查是否 Shared Pool 太小，或应用层没有使用绑定变量&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;查询&amp;nbsp;Shared&amp;nbsp;Pool&amp;nbsp;的硬解析率
SELECT&amp;nbsp;ROUND(hard.value&amp;nbsp;/&amp;nbsp;parse.value&amp;nbsp;*&amp;nbsp;100,&amp;nbsp;2)&amp;nbsp;AS&amp;nbsp;&amp;quot;硬解析率%&amp;quot;&amp;nbsp;FROM&amp;nbsp;v$sysstat&amp;nbsp;hard,&amp;nbsp;v$sysstat&amp;nbsp;parse
WHERE&amp;nbsp;hard.name&amp;nbsp;=&amp;nbsp;&amp;#39;parse&amp;nbsp;count&amp;nbsp;(hard)&amp;#39;&amp;nbsp;AND&amp;nbsp;parse.name&amp;nbsp;=&amp;nbsp;&amp;#39;parse&amp;nbsp;count&amp;nbsp;(total)&amp;#39;;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;Large Pool&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：512M～1G，RMAN、并行查询、Shared Server 使用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;Redo Log Buffer&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：128M～256M，一般不需要特别大，写满即刷盘&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、PGA配置最佳实践&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;高并发场景下 PGA 的总消耗是所有活跃会话 PGA 之和，所以在估算服务器内存分配时，不能忽略这块消耗。&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;通用经验是PGA_AGGREGATE_TARGET = 物理内存 × 20%，如果是以批量处理、数据仓库为主的系统可以提高到 30%，OLTP 系统则适当降低。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;查看当前&amp;nbsp;PGA&amp;nbsp;配置
SHOW&amp;nbsp;PARAMETER&amp;nbsp;PGA;

--&amp;nbsp;设置&amp;nbsp;PGA&amp;nbsp;总目标值（Oracle&amp;nbsp;会尽可能在此范围内为各会话分配内存）
ALTER&amp;nbsp;SYSTEM&amp;nbsp;SET&amp;nbsp;PGA_AGGREGATE_TARGET=4G&amp;nbsp;SCOPE=SPFILE;

--&amp;nbsp;设置&amp;nbsp;PGA&amp;nbsp;硬上限，防止撑爆内存，超过后&amp;nbsp;Oracle&amp;nbsp;会强制终止消耗最多&amp;nbsp;PGA&amp;nbsp;的会话，生产环境建议设置为&amp;nbsp;PGA_AGGREGATE_TARGET&amp;nbsp;的2倍
ALTER&amp;nbsp;SYSTEM&amp;nbsp;SET&amp;nbsp;PGA_AGGREGATE_LIMIT=8G&amp;nbsp;SCOPE=SPFILE;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;排查 PGA 是否成为瓶颈，如果sorts (disk)&amp;nbsp;磁盘排序次数过高，说明 PGA 不够用&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;SELECT&amp;nbsp;name,&amp;nbsp;value&amp;nbsp;FROM&amp;nbsp;v$sysstat&amp;nbsp;WHERE&amp;nbsp;name&amp;nbsp;IN&amp;nbsp;(&amp;#39;sorts&amp;nbsp;(memory)&amp;#39;,&amp;nbsp;&amp;#39;sorts&amp;nbsp;(disk)&amp;#39;);&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3、REDO LOG配置最佳实践&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Redo Log 最常见的问题就是日志组太小导致切换过于频繁。&lt;span style=&quot;font-size: 16px; background-color: #FFFF00;&quot;&gt;Oracle 官方建议&lt;span style=&quot;font-size: 16px; background-color: #FFFF00;&quot;&gt;最少保留 3 组日志组（高并发写入场景 4～6 组&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap; background-color: #FFFF00;&quot;&gt;），&lt;/span&gt;&lt;/span&gt;日志切换频率控制在每 15～30 分钟一次，如果每小时切换次数超过 4 次就需要考虑扩大日志组&lt;/span&gt;。&lt;span style=&quot;font-size: 16px;&quot;&gt;如果发现某些高峰时段每小时切换次数很高（如 50MB 大小的日志组每小时上百次切换），就需要立即扩大日志组大小&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;查看当前切换频率
SELECT&amp;nbsp;TO_CHAR(first_time,&amp;nbsp;&amp;#39;YYYY-MM-DD&amp;nbsp;HH24&amp;#39;)&amp;nbsp;AS&amp;nbsp;hour,COUNT(*)&amp;nbsp;AS&amp;nbsp;switches&amp;nbsp;FROM&amp;nbsp;v$log_history&amp;nbsp;WHERE&amp;nbsp;first_time&amp;nbsp;&amp;gt;&amp;nbsp;SYSDATE&amp;nbsp;-&amp;nbsp;1
GROUP&amp;nbsp;BY&amp;nbsp;TO_CHAR(first_time,&amp;nbsp;&amp;#39;YYYY-MM-DD&amp;nbsp;HH24&amp;#39;)&amp;nbsp;ORDER&amp;nbsp;BY&amp;nbsp;1;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;日志组大小参考，&lt;span style=&quot;font-size: 16px;&quot;&gt;注意这里是单个日志组大小，不是所有组加起来的总量。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table interlaced=&quot;enabled&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;ue-table-interlace-color-single firstRow&quot;&gt;&lt;td width=&quot;470&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;系统类型&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td width=&quot;470&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;推荐单个日志组大小&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;ue-table-interlace-color-double&quot;&gt;&lt;td width=&quot;470&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;轻量 OLTP&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;470&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;500M～1G&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;ue-table-interlace-color-single&quot;&gt;&lt;td width=&quot;470&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;中等业务量&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;470&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1G～2G&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;ue-table-interlace-color-double&quot;&gt;&lt;td width=&quot;470&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;高并发 / 批量写入&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;470&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2G～4G&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br/&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;新增日志组&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: nowrap;&quot;&gt;日志组大小不允许直接修改，只能新增更大的日志组，再删掉原来小的，操作顺序如下&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;第一步：新增日志组，指定序号和日志路径、日志大小
ALTER&amp;nbsp;DATABASE&amp;nbsp;ADD&amp;nbsp;LOGFILE&amp;nbsp;GROUP&amp;nbsp;4&amp;nbsp;&amp;#39;/u01/oradata/orcl/redo04.log&amp;#39;&amp;nbsp;SIZE&amp;nbsp;1G;
ALTER&amp;nbsp;DATABASE&amp;nbsp;ADD&amp;nbsp;LOGFILE&amp;nbsp;GROUP&amp;nbsp;5&amp;nbsp;&amp;#39;/u01/oradata/orcl/redo05.log&amp;#39;&amp;nbsp;SIZE&amp;nbsp;1G;
ALTER&amp;nbsp;DATABASE&amp;nbsp;ADD&amp;nbsp;LOGFILE&amp;nbsp;GROUP&amp;nbsp;6&amp;nbsp;&amp;#39;/u01/oradata/orcl/redo06.log&amp;#39;&amp;nbsp;SIZE&amp;nbsp;1G;

--&amp;nbsp;第二步：手动触发切换，让旧日志组变为&amp;nbsp;INACTIVE&amp;nbsp;状态
ALTER&amp;nbsp;SYSTEM&amp;nbsp;SWITCH&amp;nbsp;LOGFILE;
ALTER&amp;nbsp;SYSTEM&amp;nbsp;CHECKPOINT;

--&amp;nbsp;第三步：确认旧日志组状态为&amp;nbsp;INACTIVE
SELECT&amp;nbsp;group#,&amp;nbsp;status,&amp;nbsp;members,&amp;nbsp;bytes/1024/1024&amp;nbsp;AS&amp;nbsp;mb&amp;nbsp;FROM&amp;nbsp;v$log;

--&amp;nbsp;第四步：删除状态为INACTIVE的旧日志组
ALTER&amp;nbsp;DATABASE&amp;nbsp;DROP&amp;nbsp;LOGFILE&amp;nbsp;GROUP&amp;nbsp;1;
ALTER&amp;nbsp;DATABASE&amp;nbsp;DROP&amp;nbsp;LOGFILE&amp;nbsp;GROUP&amp;nbsp;2;
ALTER&amp;nbsp;DATABASE&amp;nbsp;DROP&amp;nbsp;LOGFILE&amp;nbsp;GROUP&amp;nbsp;3;

--&amp;nbsp;第五步：删除操作系统上的旧日志文件（Oracle&amp;nbsp;不会自动删除物理文件）
rm&amp;nbsp;/u01/oradata/orcl/redo01.log&lt;/pre&gt;</description><pubDate>Wed, 01 Jul 2026 10:16:42 +0800</pubDate></item><item><title>Linux时间同步——chrony的配置与使用</title><link>https://ywpie.com/post/87.html</link><description>&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、chrony 工具介绍&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;chrony 相比 ntpd 服务而言是更现代的NTP时间同步方案，它的同步算法更激进，在服务启动几分钟后就能达到较高精度，并且可以对偏差较大的服务器进行&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;强制同步（在&amp;nbsp;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;ntpd 下如果偏差超过 1000 秒会直接退出同步而不是强制校正&lt;/span&gt;）。仍然需要强调的是chrony和ntpd&lt;/span&gt;不能同时运行，它们会互相冲突抢占 UDP 123 端口&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;二、chrony 使用教程&lt;/span&gt;&lt;/h2&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、安装chrony&lt;/span&gt;&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;yum&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;chrony&lt;/pre&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、配置chrony&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;chrony 的主配置文件为 /etc/chrony.conf，以下是常用配置项说明：&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#&amp;nbsp;指定上游&amp;nbsp;NTP&amp;nbsp;服务器，iburst&amp;nbsp;表示启动时快速发送多个请求加速初始同步
server&amp;nbsp;10.1.18.114&amp;nbsp;iburst
server&amp;nbsp;ntp.aliyun.com&amp;nbsp;iburst

#&amp;nbsp;允许内网客户端向本机同步（本机作为内网&amp;nbsp;NTP&amp;nbsp;服务器时启用）
allow&amp;nbsp;192.168.1.0/24

#&amp;nbsp;当无法连接外部&amp;nbsp;NTP&amp;nbsp;时，允许系统作为自身时钟源
local&amp;nbsp;stratum&amp;nbsp;10

#&amp;nbsp;记录时钟漂移信息，用于断网后的时钟估算
driftfile&amp;nbsp;/var/lib/chrony/drift

#&amp;nbsp;启用日志记录
logdir&amp;nbsp;/var/log/chrony
log&amp;nbsp;measurements&amp;nbsp;statistics&amp;nbsp;tracking&lt;/pre&gt;&lt;h3&gt;3、启动chrony服务&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;systemctl&amp;nbsp;start&amp;nbsp;chronyd
systemctl&amp;nbsp;enable&amp;nbsp;chronyd&lt;/pre&gt;&lt;h3&gt;4、查看同步源&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;通过chronyc sources -v可以查看同步源信息，主要观察同步源的状态&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;*&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：当前同步源&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;+&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：可用候选源&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;?&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：不可达或未响应&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;x&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：被标记为异常的源&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;&amp;nbsp;chronyc&amp;nbsp;sources&amp;nbsp;-v&lt;/pre&gt;&lt;p&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/06/202606221782110816821151.jpg&quot; title=&quot;chrony1.jpg&quot; alt=&quot;chrony1.jpg&quot;/&gt;&lt;/p&gt;&lt;h3&gt;5、查看同步状态&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;chronyc&amp;nbsp;tracking

Reference&amp;nbsp;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;0A011272&amp;nbsp;(10.1.18.114)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#当前同步的上游时间源&amp;nbsp;
Stratum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#时间源层级，数字越小越精确&amp;nbsp;&amp;nbsp;
System&amp;nbsp;time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;0.000001690&amp;nbsp;seconds&amp;nbsp;fast&amp;nbsp;of&amp;nbsp;NTP&amp;nbsp;time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#本地时钟与&amp;nbsp;NTP&amp;nbsp;时间的偏差&amp;nbsp;&amp;nbsp;
Last&amp;nbsp;offset&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;+0.000002484&amp;nbsp;seconds
RMS&amp;nbsp;offset&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;0.000368575&amp;nbsp;seconds
Leap&amp;nbsp;status&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Normal&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#Normal&amp;nbsp;表示同步正常&lt;/pre&gt;&lt;h3&gt;6、手动强制同步&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;chronyc&amp;nbsp;makestep&lt;/pre&gt;</description><pubDate>Mon, 22 Jun 2026 14:50:18 +0800</pubDate></item><item><title>Linux时间同步——ntpd的配置与使用</title><link>https://ywpie.com/post/35.html</link><description>&lt;h2 style=&quot;text-wrap: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;一、NTP时间同步介绍&lt;/span&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;NTP是网络时间协议 Network Time Protocol 的简称。通过 NTP 服务可以确保不同设备或者服务之间的时间一致性，尤其是一些高可用或集群化的服务，节点之间的时间偏差是不允许有误差的。在互联网上有许多可靠的共用NTP服务器，如清华、阿里等，我们可以通过与这些服务器同步使本地服务器间的时间一致、准确。&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; background-color: #FFFF00;&quot;&gt;在 CentOS 7 或之前的系统中默认使用 ntp&amp;nbsp;作为默认的时间同步方案，在 CentOS 7 之后改为 chrony，两者不可同时运行。&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;二、ntpd使用教程&lt;/span&gt;&lt;/h2&gt;&lt;h3 style=&quot;text-wrap: wrap;&quot;&gt;1、安装&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;NTPD服务&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;只需要通过yum命令就可以快速安装NTP相关工具包，&lt;/span&gt;安装完成后系统会产生以下几个主要工具：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· ntpd&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：NTP 守护进程，在后台运行，负责持续进行同步时钟&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;ntpq&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：用于查看NTP同步状态和时间源信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;ntpdate&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：手动同步工具，常用于首次校时或偏差过大时的强制纠偏&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;ntpstat&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：显示当前同步状态&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;yum&amp;nbsp;install&amp;nbsp;ntp&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3 style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、NTP手动同步配置&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;通过ntpdate命令并指定ntp服务器地址后可以进行手动同步，如手动配置与阿里云NTP同步&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;&lt;p&gt;ntpdate ntp.aliyun.com&lt;br/&gt;&lt;/p&gt;&lt;/pre&gt;&lt;h3 style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;; font-size: 16px;&quot;&gt;3、NTP自动同步配置&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;; font-size: 16px;&quot;&gt;编辑NTP配置文件，具体内容如下&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#&amp;nbsp;记录系统时钟频率漂移值
driftfile&amp;nbsp;/var/lib/ntp/drift&amp;nbsp;&amp;nbsp;

pidfile&amp;nbsp;/var/run/ntpd.pid
logfile&amp;nbsp;/var/log/ntp.log

#&amp;nbsp;安全策略：默认拒绝所有非本地访问
restrict&amp;nbsp;default&amp;nbsp;kod&amp;nbsp;nomodify&amp;nbsp;notrap&amp;nbsp;nopeer&amp;nbsp;noquery
restrict&amp;nbsp;-6&amp;nbsp;default&amp;nbsp;kod&amp;nbsp;nomodify&amp;nbsp;notrap&amp;nbsp;nopeer&amp;nbsp;noquery

#&amp;nbsp;允许本地回环地址用于状态查询
restrict&amp;nbsp;127.0.0.1&amp;nbsp;nomodify
restrict&amp;nbsp;::1&amp;nbsp;nomodify

#&amp;nbsp;本地伪时钟源，作为兜底时间源
server&amp;nbsp;127.127.1.0
fudge&amp;nbsp;127.127.1.0&amp;nbsp;stratum&amp;nbsp;10

#&amp;nbsp;实际&amp;nbsp;NTP&amp;nbsp;上游服务器
server&amp;nbsp;ntp.aliyun.com&amp;nbsp;iburst&amp;nbsp;minpoll&amp;nbsp;4&amp;nbsp;maxpoll&amp;nbsp;10&lt;/pre&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;启动NTP服务后客户端会立即进行一次同步，并且会周期性地与服务器进行时间同步，通常为每隔1小时进行一次时间同步，具体频率可以通过配置进行调整。&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; background-color: #FFFF00;&quot;&gt;需要注意的是ntpd 有一个内置保护机制，&lt;span style=&quot;font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px; text-wrap-mode: wrap; background-color: #FFFF00;&quot;&gt;如果服务器与NTP时间相差超过1000 秒，&lt;/span&gt;ntpd 会主动退出而不是强制校正。如果要重新与服务器进行同步，必须先用 ntpdate 进行一次手动同步将时间拉近后再启动 ntpd 才能自动同步&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;systemctl&amp;nbsp;start&amp;nbsp;ntpd&lt;/pre&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3 style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;4、查询同步状态&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;通过ntpstate或者ntpq命令可以查看NTP服务器同步是否正常：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap; font-size: 16px;&quot;&gt;* 号表示当前已选用的服务器；&lt;/span&gt;&lt;span style=&quot;font-size: 16px; text-wrap: nowrap;&quot;&gt;reach列如果不为0表示能访问服务器；offset 表示本地时间与服务器差值（ms）&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;&amp;nbsp;ntpq&amp;nbsp;-p
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remote&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;refid&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st&amp;nbsp;t&amp;nbsp;when&amp;nbsp;poll&amp;nbsp;reach&amp;nbsp;&amp;nbsp;&amp;nbsp;delay&amp;nbsp;&amp;nbsp;&amp;nbsp;offset&amp;nbsp;&amp;nbsp;jitter
==============================================================================
*203.107.6.88&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100.107.25.114&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;u&amp;nbsp;&amp;nbsp;&amp;nbsp;11&amp;nbsp;&amp;nbsp;&amp;nbsp;16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;59.353&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.896&amp;nbsp;&amp;nbsp;15.879&lt;/pre&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;查看服务器是否启用NTPD&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;timedatectl&lt;/pre&gt;&lt;p&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2025/07/202507091752026560485789.png&quot; title=&quot;ntp.png&quot; alt=&quot;ntp.png&quot;/&gt;&lt;/p&gt;</description><pubDate>Mon, 22 Jun 2026 14:04:55 +0800</pubDate></item><item><title>Ansible教程（3）使用Playbook进行多任务编排</title><link>https://ywpie.com/post/85.html</link><description>&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、Ansible&amp;nbsp;Playbook介绍&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;如果基于AD-Hoc去执行多任务（如安装Nginx、修改配置文件、启动服务），需要先使用yum或command模块安装程序，再使用copy模块复制配置文件，最后使用service模块启动服务。为了解决这种多任务繁琐的情况，可以使用Ansible的playbook（剧本）功能&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;二、Ansible&amp;nbsp;Playbook构成&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Inventory：主机列表，表示剧本中的任务要应用在哪些主机上&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Tasks：具体任务，即调用哪些模块完成操作，可以配置多个任务&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Variables：变量，包含内置变量和自定义变量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Templates：模板，即使用模板语法来灵活变更的配置文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Handlers与notify：触发器，由某事件触发执行的操作，比如修改配置文件后自动重启服务&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;三、Ansible&amp;nbsp;Playbook语法&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、playbook本质是包含了一个或多个任务的YAML配置文件，通常以.yaml或者.yml结尾&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、在单一的一个playbook文件中，使用连续的三个中横线（---）作为每个play的区分&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3、缩进必须统一，不能空格和tab混合使用，缩进级别需要一致，同样的缩进代表同样的级别&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4、使用冒号“:”之后还需要书写内容的话，则需要空一格才能书写&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;5、使用短横线“-”后必须追加一个空格&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;四、Ansible&amp;nbsp;Playbook参数&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· hosts：指定远程主机（多个主机用逗号分隔）或主机组&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;-&amp;nbsp;hosts:&amp;nbsp;webservers&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;remote_user：指定执行任务的用户（可以定义在hosts字段下，也可单独给每个task定义），通常是root用户，也可指定非root用户使用sudo方式执行任务&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;-&amp;nbsp;hosts:&amp;nbsp;192.168.1.31
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remote_user:&amp;nbsp;root&amp;nbsp;&amp;nbsp;#定义全局用户&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· tasks：任务信息将定义在此字段下&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;tasks:&amp;nbsp;
&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;run&amp;nbsp;df&amp;nbsp;-h
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remote_user:&amp;nbsp;test&amp;nbsp;&amp;nbsp;#单独为task定义用户
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shell:&amp;nbsp;name=df&amp;nbsp;-h&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;sudo（可省略）：如果设置为yes，那么sudo_user指定的用户在执行任务时会获得root权限&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;sudo_user（可省略）：指定需要使用sudo执行操作的用户&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;tasks:&amp;nbsp;
&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;run&amp;nbsp;df&amp;nbsp;-h
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sudo_user:&amp;nbsp;test
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sudo:&amp;nbsp;yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shell:&amp;nbsp;name=df&amp;nbsp;-h&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;connection（可省略）：通过什么方式连接到远程主机，默认为SSH&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;gather_facts（可省略）：如果明确不需要通过setup模块来获取远程主机facts信息，可以使用这个选项，能提升一定的性能&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;-&amp;nbsp;hosts:&amp;nbsp;all
&amp;nbsp;&amp;nbsp;gather_facts_:&amp;nbsp;no
&amp;nbsp;&amp;nbsp;tasks:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;sleep&amp;nbsp;5
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;command:&amp;nbsp;sleep&amp;nbsp;5&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· ignore_errors（可省略）：默认情况下ansible会因为一个错误导致后面的任务全部失败，有些时候可能会忽略一些错误的发生，让其他任务能正常执行&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;-hosts:&amp;nbsp;all
&amp;nbsp;&amp;nbsp;tasks:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;ignore_test
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;command:&amp;nbsp;/bin/false
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ignore_errors:&amp;nbsp;yes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;touch&amp;nbsp;file
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file:&amp;nbsp;path=/tmp/test.txt&amp;nbsp;state=touch&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;五、Ansible&amp;nbsp;Playbook基础示例&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、基本示例&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;-&amp;nbsp;hosts:&amp;nbsp;webservers
&amp;nbsp;&amp;nbsp;tasks:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;1.Installed&amp;nbsp;NFS&amp;nbsp;Server
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yum:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;nfs-utils
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;state:&amp;nbsp;present
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;2.Configure&amp;nbsp;NFS&amp;nbsp;Server
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;copy:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;src:&amp;nbsp;./exports.j2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dest:&amp;nbsp;/etc/exports&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、高级示例，包含变量、触发器等使用&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;cat&amp;nbsp;playbook01.yml
-&amp;nbsp;hosts:&amp;nbsp;192.168.1.31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#定义需要执行的主机或主机组
&amp;nbsp;&amp;nbsp;remote_user:&amp;nbsp;root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#远程用户
&amp;nbsp;&amp;nbsp;vars:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#定义变量
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http_port:&amp;nbsp;8088&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#变量
&amp;nbsp;&amp;nbsp;tasks:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#定义一个任务
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;create&amp;nbsp;new&amp;nbsp;file&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#定义任务的名称
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file:&amp;nbsp;name=/tmp/playtest.txt&amp;nbsp;state=touch&amp;nbsp;&amp;nbsp;&amp;nbsp;#调用模块，具体要做的事情
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;install&amp;nbsp;package
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yum:&amp;nbsp;name=httpd
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;config&amp;nbsp;httpd
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template:&amp;nbsp;src=./httpd.conf&amp;nbsp;dest=/etc/httpd/conf/httpd.conf
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;notify:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#触发器，当条件触发后需要做的操作，配合handlers使用
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;restart&amp;nbsp;apache&amp;nbsp;&amp;nbsp;#需要引用的handlers的名字
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;copy&amp;nbsp;index.html
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;copy:&amp;nbsp;src=/var/www/html/index.html&amp;nbsp;dest=/var/www/html/index.html
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;start&amp;nbsp;httpd
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;service:&amp;nbsp;name=httpd&amp;nbsp;state=started
&amp;nbsp;&amp;nbsp;handlers:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#notify定义的触发执行相应的处理动作
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;restart&amp;nbsp;apache&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#要与notify定义的内容相同
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;service:&amp;nbsp;name=httpd&amp;nbsp;state=restarted&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#触发要执行的动作&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;六、Ansible playbook运行结果说明&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;当playbook运行后在PLAY RECAP（汇总报告）一列将返回返回的结果包含了任务ok的数量（已经达到任务要求，无需再次处理）、changed数量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/05/202605081778228246620594.png&quot; title=&quot;ansible5.png&quot; alt=&quot;ansible5.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;ansible-playbook命令示例与常用选项&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible-playbook&amp;nbsp;-t&amp;nbsp;tag_name&amp;nbsp;httpd.yml&amp;nbsp;#-t指定标签名，多个标签用逗号分隔
ansible-playbook&amp;nbsp;playbookname.yml&amp;nbsp;--list-task&amp;nbsp;#列出该playbook中的任务

#&amp;nbsp;--check&amp;nbsp;|&amp;nbsp;-C：只检测可能会发生的改变，但不真正执行操作
#&amp;nbsp;--list-hosts：列出运行任务的主机
#&amp;nbsp;--list-tags：列出playbook文件中定义的所有tags
#&amp;nbsp;--list-tasks：列出playbook文件中定义的所有任务
#&amp;nbsp;--limit：主机列表&amp;nbsp;只针对主机列表中的某个主机或者某个组执行
#&amp;nbsp;-f：指定并发数，默认为5个
#&amp;nbsp;-t：指定tags运行，运行某一个或者多个tags。前提是playbook中有定义tags
#&amp;nbsp;-e：声明变量和值&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;七、使用ansible-vault加密Playbook&lt;/span&gt;&lt;/h2&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible-vault&amp;nbsp;encrypt&amp;nbsp;hello.yml&amp;nbsp;&amp;nbsp;#加密playbook，加密否的文件无法直接执行和查看
ansible-vault&amp;nbsp;view&amp;nbsp;hello.yml&amp;nbsp;&amp;nbsp;#查看加密后的文件
ansible-vault&amp;nbsp;edit&amp;nbsp;hello.yml&amp;nbsp;&amp;nbsp;#查看加密后的文件
ansible-vault&amp;nbsp;decrypt&amp;nbsp;hello.yml&amp;nbsp;&amp;nbsp;#解密playbook&lt;/pre&gt;</description><pubDate>Fri, 08 May 2026 16:05:17 +0800</pubDate></item><item><title>Ansible教程（2）Ansible的命令行与常用模块</title><link>https://ywpie.com/post/84.html</link><description>&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、Ansible Ad-Hoc简介&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Ad-Hoc是一种通过ansible内置命令行让Ansible进行工作的方式，也是最简单的调用方式。命令行语法格式如下&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;&amp;lt;host-pattern&amp;gt;&amp;nbsp;[-f&amp;nbsp;forks]&amp;nbsp;[-m&amp;nbsp;module_name]&amp;nbsp;[-a&amp;nbsp;args]&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;&amp;lt;host-pattern&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;：指定生效的主机组，可以使用主机列表中的地址或者组名，all代表所有主机，也支持逻辑与、或以及正则表达式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;[-f forks]&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;：并发数，可以理解为ansible一次性要让多少个主机执行任务，配置文件中默认为5&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;[-m module_name]&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;：使用的模块名&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;[-a args]&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;：每个模块特有的参数，可以用ansible-doc -s 模块名来查看模块对应参数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;-b&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;：老版本中的sudo指令，将在远端主机切换到root执行操作，这个root用户是在ansible配置中定义的&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;-K&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;：sudo时需要输入的密码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Ansible命令行示例&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;192.168.1.100&amp;nbsp;-m&amp;nbsp;ping&amp;nbsp;&amp;nbsp;#指定某台主机
ansible&amp;nbsp;all&amp;nbsp;-m&amp;nbsp;ping&amp;nbsp;&amp;nbsp;#指定所有主机
ansible&amp;nbsp;192.168.1.100:192.168.1.50&amp;nbsp;-m&amp;nbsp;ping&amp;nbsp;&amp;nbsp;#一次指定多台主机
ansible&amp;nbsp;all:\!192.168.1.100&amp;nbsp;-m&amp;nbsp;ping&amp;nbsp;&amp;nbsp;#排除某台主机
ansible&amp;nbsp;web&amp;nbsp;-m&amp;nbsp;ping&amp;nbsp;-u&amp;nbsp;dba&amp;nbsp;-k&amp;nbsp;&amp;nbsp;#使用dba用户对web组进行操作
ansible&amp;nbsp;web&amp;nbsp;-m&amp;nbsp;command&amp;nbsp;-a&amp;nbsp;&amp;#39;cat&amp;nbsp;/etc/passwd&amp;#39;&amp;nbsp;-u&amp;nbsp;dba&amp;nbsp;-k&amp;nbsp;-b&amp;nbsp;&amp;nbsp;-K&amp;nbsp;#使用dba用户连接web组，然后sudo到root用户查看passwd文件&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;二、Ansible常用模块介绍&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· command模块：缺省默认模块，指定远端主机需要执行的命令，不支持管道或者重定向&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;192.168.44.130&amp;nbsp;-a&amp;nbsp;&amp;#39;date&amp;#39;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;cron模块：设置定时任务，其中有个state选项包含present、absent两个参数，分别代表增加和移除&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;webserver&amp;nbsp;-m&amp;nbsp;cron&amp;nbsp;-a&amp;nbsp;&amp;#39;minute=&amp;quot;*/10&amp;quot;&amp;nbsp;job=&amp;quot;/bin/echo&amp;nbsp;test&amp;quot;&amp;nbsp;name=&amp;quot;test&amp;nbsp;cron&amp;nbsp;job&amp;quot;&amp;nbsp;&amp;#39;
ansible&amp;nbsp;webserver&amp;nbsp;-m&amp;nbsp;cron&amp;nbsp;-a&amp;nbsp;&amp;#39;hour=&amp;quot;*/1&amp;quot;&amp;nbsp;job=&amp;quot;/usr/sbin/ntpdate&amp;nbsp;10.254.1.10&amp;quot;&amp;nbsp;name=&amp;quot;crontab&amp;nbsp;from&amp;nbsp;ansible&amp;quot;&amp;nbsp;state=present&amp;#39;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;user模块：管理用户，还有一个group模块用于管理组&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;webserver&amp;nbsp;-m&amp;nbsp;user&amp;nbsp;-a&amp;nbsp;&amp;quot;name=mysql&amp;nbsp;system=yes&amp;quot;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;file模块：设置文件的属性，如所属主、文件权限等&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;all&amp;nbsp;-m&amp;nbsp;file&amp;nbsp;-a&amp;nbsp;&amp;#39;owner=mysql&amp;nbsp;group=mysql&amp;nbsp;mode=644&amp;nbsp;path=/tmp/test&amp;#39;
ansible&amp;nbsp;all&amp;nbsp;-m&amp;nbsp;file&amp;nbsp;-a&amp;nbsp;&amp;#39;path=/etc/passwd.link&amp;nbsp;src=/etc/passwd&amp;nbsp;state=link&amp;#39;&amp;nbsp;
#&amp;nbsp;path：指定要设置的文件所在路径，可使用name或dest替换
#&amp;nbsp;state：指明文件的格式，touch=创建新的文件；absent=删除文件，link=创建软连接文件；directory=创建目录。创建文件的软连接时src指明源文件，path指明连接文件路径&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;ping模块：测试远端主机是否能连接&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;all&amp;nbsp;-m&amp;nbsp;ping&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;service模块：控制服务运行状态&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;webserver&amp;nbsp;-m&amp;nbsp;service&amp;nbsp;-a&amp;nbsp;&amp;#39;enabled=true&amp;nbsp;name=httpd&amp;nbsp;state=started&amp;#39;
#&amp;nbsp;enabled：是否开机自动启动，取值为true或者false
#&amp;nbsp;name：服务名称
#&amp;nbsp;state：状态，取值有started，stopped，restarted&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;shell模块：和command模块一样是用来运行命令，当命令中有变量或者管道符的时候要用shell模块，特殊符号需要转义，比如\$&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;all&amp;nbsp;-m&amp;nbsp;shell&amp;nbsp;-a&amp;nbsp;&amp;quot;echo&amp;nbsp;test&amp;nbsp;|&amp;nbsp;passwd&amp;nbsp;--stdin&amp;nbsp;user1&amp;quot;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;script模块：将本地的脚本复制到远端主机并执行，需要把脚本放在当前目录中并使用相对路径来指定&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;all&amp;nbsp;-m&amp;nbsp;script&amp;nbsp;-a&amp;nbsp;&amp;#39;test.sh&amp;#39;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;yum模块：安装程序包，远端主机需要先配置好正确的yum源&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;-m&amp;nbsp;yum&amp;nbsp;-a&amp;nbsp;&amp;#39;name=httpd&amp;nbsp;state=present&amp;#39;&amp;nbsp;
#&amp;nbsp;name：指明要安装的程序包，可以带版本号，否则默认最新版本，多个安装包用逗号分隔
#&amp;nbsp;tate：present代表安装，也是默认操作；absent是卸载；latest最新版本安装&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;setup模块：收集被管理主机的信息，包含系统版本、IP地址、CPU核心数。在Ansible高级操作中可以通过该模块先收集信息，然后根据不同主机的不同信息做响应操作，类似Zabbix中的低级别发现自动获取磁盘信息一样&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;copy模块：实现文件复制，但是使用该模块进行文件复制时不会引用变量的值，如果使用了变量，需要替换为template模块（该模块只能通过playbook方式运行）&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;all&amp;nbsp;-m&amp;nbsp;copy&amp;nbsp;-a&amp;nbsp;&amp;#39;src=/etc/fstab&amp;nbsp;dest=/etc/fstab&amp;nbsp;owner=root&amp;nbsp;mode=640&amp;#39;&amp;nbsp;
ansible&amp;nbsp;all&amp;nbsp;-m&amp;nbsp;copy&amp;nbsp;-a&amp;nbsp;&amp;#39;content=&amp;quot;hello&amp;nbsp;world&amp;quot;&amp;nbsp;dest=/etc/fstab&amp;nbsp;owner=root&amp;nbsp;mode=640&amp;nbsp;backup=yes&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;
#&amp;nbsp;src=：定义本地源文件的路径
#&amp;nbsp;dset=：定义目标文件路径
#&amp;nbsp;content=：用该选项直接生成内容，替代src
#&amp;nbsp;backup=：如果目标路径存在同名文件，将自动备份该文件&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/span&gt;sysctl模块：实现内核参数修改&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible&amp;nbsp;all&amp;nbsp;-m&amp;nbsp;sysctl&amp;nbsp;-a&amp;nbsp;&amp;#39;name=vm.swappiness&amp;nbsp;value=1&amp;nbsp;state=present&amp;#39;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;三、查看Ansible模块帮助信息&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、通过ansible-doc -l 可以显示当前版本所支持的模块信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/05/202605081778226433666529.png&quot; title=&quot;ansible3.png&quot; alt=&quot;ansible3.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、通过ansible-doc -s&amp;nbsp;modulename显示指定模块的详细用法&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ansible-doc&amp;nbsp;-s&amp;nbsp;yum&lt;/pre&gt;&lt;p&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/05/202605081778226445228948.png&quot; title=&quot;ansible4.png&quot; alt=&quot;ansible4.png&quot;/&gt;&lt;/p&gt;</description><pubDate>Fri, 08 May 2026 15:38:52 +0800</pubDate></item><item><title> Ansible教程（1）Ansible的安装与基本使用</title><link>https://ywpie.com/post/83.html</link><description>&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、Ansible简介&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Ansible是一个基于Python开发的轻量级自动化运维工具，有着其他自动化运维工具如puppet、cfengine、chef、func、fabric的优点，并且不需要单独安装客户端以及启动服务，只需要通过SSH就可以快速的对大量客户端实现批量系统配置、程序部署、批量运行命令等。而且Ansible的学习曲线也平缓，比puppet易学很多&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;二、安装Ansible&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFF00;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFF00;&quot;&gt;方法1（推荐）：YUM安装&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;对于Ansible这种工具性软件使用YUM安装是最方便的，只需要配置好EPEL仓库就可以一条命令安装&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;yum&amp;nbsp;install&amp;nbsp;ansible&amp;nbsp;-y&amp;nbsp;#yum安装最新版
ansible&amp;nbsp;--version&amp;nbsp;&amp;nbsp;#安装后查看版本以及模块路径等信息&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;方法2：通过python pip工具安装&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;该方法需要先编译安装好python3，安装好以后Ansible的命令都会放在Python的目录中&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;/usr/local/python3/bin/pip3&amp;nbsp;install&amp;nbsp;ansible==2.7&amp;nbsp;&amp;nbsp;#使用pip安装指定版本Ansible
ln&amp;nbsp;-s&amp;nbsp;/usr/local/python3/bin/ansible&amp;nbsp;/usr/local/bin&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;三、Ansible配置文件&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· /etc/ansible/hosts&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;主机列表清单，也叫Inventory。所有被管理的主机都需要定义在该文件中。如果不想使用默认清单的话可以用-i选项指定自定义的清单文件，防止多人混合使用一个主机清单。如果没有定义在主机列表文件中，执行命令会提示“No hosts matched”&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· /etc/ansible/ansible.cfg&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Ansible服务主配置文件，可以自定义Inventory文件、并发数等，该配置文件的优先级实际是最低的，如果有定义其他配置文件，可以通过ansible --version查看实际有效路径&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;四、Inventory定义方法&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;方法1：为不同的主机组配置各自的主机IP、端口、用户名、密码信息&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#编辑配置清单文件
vim&amp;nbsp;/etc/ansible/hosts

#组名为webserver，并且为该组下的主机配置了各自的端口、root信息
[webserver]&amp;nbsp;&amp;nbsp;
192.168.1.31&amp;nbsp;ansible_ssh_port=22&amp;nbsp;ansible_ssh_user=root&amp;nbsp;ansible_ssh_pass=&amp;quot;123456&amp;quot;
192.168.1.32&amp;nbsp;ansible_ssh_port=22&amp;nbsp;ansible_ssh_user=root&amp;nbsp;ansible_ssh_pass=&amp;quot;123456&amp;quot;
192.168.1.33&amp;nbsp;ansible_ssh_port=22&amp;nbsp;ansible_ssh_user=root&amp;nbsp;ansible_ssh_pass=&amp;quot;123456&amp;quot;
192.168.1.36&amp;nbsp;ansible_ssh_port=22&amp;nbsp;ansible_ssh_user=root&amp;nbsp;ansible_ssh_pass=&amp;quot;123456&amp;quot;

#组名为dbserver，并且使用了表达式来表示连续的IP段
[dbserver]&amp;nbsp;&amp;nbsp;
192.168.1.4[1:3]&amp;nbsp;ansible_ssh_port=22&amp;nbsp;ansible_ssh_user=root&amp;nbsp;ansible_ssh_pass=&amp;quot;123456&amp;quot;&amp;nbsp;&amp;nbsp;

[redis]
192.168.1.5[1:3]
[redisserver:vars]&amp;nbsp;&amp;nbsp;#将信息定义为变量
ansible_ssh_pass=&amp;quot;123456&amp;quot;

[nginx]&amp;nbsp;#推荐写法
nginx_1&amp;nbsp;ansible_ssh_host=192.168.1.61&amp;nbsp;ansible_ssh_port=22&amp;nbsp;ansible_ssh_user=root&amp;nbsp;ansible_ssh_pass=&amp;quot;123456&amp;quot;
nginx_2&amp;nbsp;ansible_ssh_host=192.168.1.62&amp;nbsp;ansible_ssh_port=22&amp;nbsp;ansible_ssh_user=root&amp;nbsp;ansible_ssh_pass=&amp;quot;123456&amp;quot;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/05/202605081778225685567894.png&quot; title=&quot;ansible1.png&quot; alt=&quot;ansible1.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;方法二：基于秘钥管理&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;基于秘钥管理客户端的话需要在管理端创建公钥和私钥，然后发送给被管理端的机器&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#管理端创建秘钥并发送到每个被管理端
ssh-keygen
ssh-copy-id&amp;nbsp;-i&amp;nbsp;$被管理端IP

#管理端清单文件
vim&amp;nbsp;/etc/ansible/hosts
[webserver]&amp;nbsp;&amp;nbsp;#做好秘钥的机器只用写IP即可
192.168.1.31:22
192.168.1.32
192.168.1.33
192.168.1.36

[dbserver]&amp;nbsp;&amp;nbsp;#也可以通过别名方式进行配置
node1&amp;nbsp;ansible_ssh_host=192.168.1.31&amp;nbsp;ansible_ssh_port=22
node2&amp;nbsp;ansible_ssh_host=192.168.1.32&amp;nbsp;ansible_ssh_port=22
node3&amp;nbsp;ansible_ssh_host=192.168.1.33&amp;nbsp;ansible_ssh_port=22&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;方法三：自定义Inventory清单文件&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#创建清单文件
vim&amp;nbsp;/etc/ansible/dockers
[dockers]
192.168.1.31&amp;nbsp;ansible_ssh_pass=&amp;#39;123456&amp;#39;
192.168.1.32
192.168.1.33
#使用-i指定清单文件
ansible&amp;nbsp;dockers&amp;nbsp;-m&amp;nbsp;ping&amp;nbsp;-i&amp;nbsp;/etc/dockers&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;五、Inventory内置参数&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/05/202605081778225694617751.png&quot; title=&quot;ansible2.png&quot; alt=&quot;ansible2.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Fri, 08 May 2026 15:25:57 +0800</pubDate></item><item><title>Oracle教程（5）数据泵备份教程与实战</title><link>https://ywpie.com/post/81.html</link><description>&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、数据泵介绍&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;数据泵（Data Pump）是 Oracle 10g 开始引入的命令行逻辑备份与恢复工具。&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;通过 expdp / impdp ，可以对所有数据库对象（模式、表数据、表空间等）进行高效导出和导入，并且&lt;/span&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;支持多进程并行导出导入、可暂停恢复备份作业、&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;灵活的对象过滤与重映射（如 REMAP_SCHEMA、REMAP_TABLESPACE、REMAP_TABLE 等），&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;还能直接在数据库间通过网络链路完成数据传输，无需落地中间文件。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;二、备份前置工作&lt;/span&gt;&lt;/h2&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、创建数据泵目录&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;数据泵目录是 Oracle 中定义的逻辑目录，用于配置导出和导入数据的存放位置，在进行导出和导入操作时都需要指定该目录&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#登录数据库后创建逻辑目录
CREATE&amp;nbsp;DIRECTORY&amp;nbsp;DATA_PUMP_DIR&amp;nbsp;AS&amp;nbsp;&amp;#39;/u01/app/oracle/admin/backup/&amp;#39;;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、创建备份用户&lt;/span&gt;&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;CREATE&amp;nbsp;USER&amp;nbsp;backup_user&amp;nbsp;IDENTIFIED&amp;nbsp;BY&amp;nbsp;&amp;quot;YourPassword123!&amp;quot;;
GRANT&amp;nbsp;READ,&amp;nbsp;WRITE&amp;nbsp;ON&amp;nbsp;DIRECTORY&amp;nbsp;DATA_PUMP_DIR&amp;nbsp;TO&amp;nbsp;backup_user;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3、授予用户备份权限&lt;/span&gt;&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;GRANT&amp;nbsp;CREATE&amp;nbsp;SESSION&amp;nbsp;TO&amp;nbsp;backup_user;
GRANT&amp;nbsp;EXP_FULL_DATABASE&amp;nbsp;TO&amp;nbsp;backup_user;
GRANT&amp;nbsp;IMP_FULL_DATABASE&amp;nbsp;TO&amp;nbsp;backup_user;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4、授予用户数据泵目录权限&lt;/span&gt;&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;GRANT&amp;nbsp;READ,&amp;nbsp;WRITE&amp;nbsp;ON&amp;nbsp;DIRECTORY&amp;nbsp;DATA_PUMP_DIR&amp;nbsp;TO&amp;nbsp;backup_user;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;三、expdp / impdp 常用选项说明&lt;/span&gt;&lt;/h2&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;expdp&amp;nbsp;username/password@db&amp;nbsp;SERVICE_NAME&amp;nbsp;directory=DATA_PUMP_DIR&amp;nbsp;dumpfile=backup.dmp&amp;nbsp;logfile=backup.log&amp;nbsp;schemas=SCHEMA_NAME&lt;/pre&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、expdp常用选项&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 文件相关&lt;br/&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;username/password：执行备份的数据库用户名和密码&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;@db：指定需要连接的数据库实例，可以通过tnsnames.ora查看&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;directory=DUMP_DIR：指示数据泵目录，即一开始创建的逻辑目录&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;dumpfile=backup.dmp：指定备份文件名&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;logfile=backup.log：备份日志&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;PARALLEL=4：并行备份，可以提高到处速度&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;COMPRESSION=ALL：压缩备份，ALL表示数据 + 元数据全部压缩，还可以设置为METADATA_ONLY（默认）、DATA_ONLY、NONE&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;JOB_NAME=my_backup：给任务命名，方便监控和恢复&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;FLASHBACK_TIME=&amp;quot;TO_TIMESTAMP(&amp;#39;2024-01-01 00:00:00&amp;#39;,&amp;#39;YYYY-MM-DD HH24:MI:SS&amp;#39;)&amp;quot;：导出某一时间点的一致性数据&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 备份范围（四选一）&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;FULL=Y：导出整个数据库&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;SCHEMAS=$SCHEMA_NAME：导出指定 Schema&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;TABLES=$SCHEMA_NAME_$TABLE_NAME：导出指定表&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;TABLESPACES=TBS1,TBS2：导出指定表空间&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 过滤&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;CONTENT=ALL：指定需要导出的数据，默认为ALL，此外还有DATA_ONLY 和 METADATA_ONLY&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;QUERY=$TABLE_NAME:&amp;quot;WHERE deptno=10&amp;quot;：按照过滤条件进行备份&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;EXCLUDE=TABLE:&amp;quot;IN (&amp;#39;TMP&amp;#39;,&amp;#39;LOG&amp;#39;,&amp;#39;TEMP&amp;#39;)&amp;quot;：备份时排除指定对象&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;INCLUDE=TABLE:&amp;quot;IN (&amp;#39;EMP&amp;#39;,&amp;#39;DEPT&amp;#39;,&amp;#39;SALARY&amp;#39;)&amp;quot;：备份时只包含指定对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、impdp常用选项&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;dumpfile=backup.dmp：指定备份文件&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;logfile=restore.log：指定恢复过程的日志文件&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;schemas=SCHEMA_NAME：指定要恢复的模式名&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;TABLE_EXISTS_ACTION=REPLACE：导入时如果表已存在的处理方式，支持SKIP（跳过）、APPEND（追加）、TRUNCATE（先清空）和REPLACE（替换）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;remap_tablespace=&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;old_tablespace:new_tablespace&lt;/span&gt;：&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;如果要恢复到不同的表空间，通过 remap_tablespace 参数进行映射，如果导出还原时表空间名一致就可以不用该选项&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;四、expdp / impdp 使用实例&lt;/span&gt;&lt;/h2&gt;&lt;h3&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、expdp导出示例&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 完整备份&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;expdp&amp;nbsp;username/password@db&amp;nbsp;directory=DATA_PUMP_DIR&amp;nbsp;dumpfile=all_tables.dmp&amp;nbsp;logfile=all_tables.log&amp;nbsp;full=yes&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;备份特定的表&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;expdp&amp;nbsp;username/password@db&amp;nbsp;directory=DATA_PUMP_DIR&amp;nbsp;dumpfile=table_backup.dmp&amp;nbsp;logfile=table_backup.log&amp;nbsp;tables=SCHEMA_NAME.TABLE_NAME&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;只导出表结构&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;expdp&amp;nbsp;username/password@db&amp;nbsp;directory=DATA_PUMP_DIR&amp;nbsp;dumpfile=structure_only.dmp&amp;nbsp;logfile=structure_only.log&amp;nbsp;content=metadata_only&amp;nbsp;schemas=SCHEMA_NAME&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;并行导出&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;expdp&amp;nbsp;username/password@db&amp;nbsp;directory=DATA_PUMP_DIR&amp;nbsp;dumpfile=backup%U.dmp&amp;nbsp;logfile=backup.log&amp;nbsp;schemas=SCHEMA_NAME&amp;nbsp;parallel=4&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、impdp导出示例&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 从完整备份恢复&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;impdp&amp;nbsp;username/password@db&amp;nbsp;directory=DATA_PUMP_DIR&amp;nbsp;dumpfile=full_backup.dmp&amp;nbsp;logfile=full_restore.log&amp;nbsp;full=yes&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;恢复指定表&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;impdp&amp;nbsp;username/password@db&amp;nbsp;directory=DATA_PUMP_DIR&amp;nbsp;dumpfile=table_backup.dmp&amp;nbsp;logfile=table_restore.log&amp;nbsp;tables=SCHEMA_NAME.TABLE_NAME&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 导入数据到指定表空间&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;impdp&amp;nbsp;username/password@db&amp;nbsp;directory=DATA_PUMP_DIR&amp;nbsp;dumpfile=backup.dmp&amp;nbsp;logfile=restore.log&amp;nbsp;remap_tablespace=old_tablespace:new_tablespace&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;五、监控数据泵作业&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 查看当前数据泵作业&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;DBA_DATAPUMP_JOBS;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong&gt;·&amp;nbsp;&lt;/strong&gt;查看作业进度&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;DBA_DATAPUMP_SESSIONS;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;六、备份还原实战&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;将A服务器 Oracle 中的&amp;nbsp;IPLAT.HISTRORY_LOG 表恢复到B服务器 Oralce 中进行归档，恢复后保持表名不变或者使用一张新表保存，但是SCHEMA需要保持一致&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、源库创建&amp;nbsp;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;DIRECTORY&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DIRECTORY 是 Oracle 中的数据库对象，用于指定数据库和操作系统物理路径的映射关系，把数据库内的一个名字和服务器磁盘上的真实路径关联起来。在对&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Oracle 进行备份时，不允许直接写操作系统路径，而是需要先创建 DIRECTORY 对象，再把这个对象的权限授予具体用户&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--&amp;nbsp;查看已有&amp;nbsp;directory
SELECT&amp;nbsp;directory_name,&amp;nbsp;directory_path&amp;nbsp;FROM&amp;nbsp;dba_directories;

--&amp;nbsp;如不存在，创建一个（路径需提前在&amp;nbsp;OS&amp;nbsp;上建好）
CREATE&amp;nbsp;OR&amp;nbsp;REPLACE&amp;nbsp;DIRECTORY&amp;nbsp;dp_dir&amp;nbsp;AS&amp;nbsp;&amp;#39;/data/datapump&amp;#39;;

--&amp;nbsp;授权给&amp;nbsp;iplat&amp;nbsp;用户
GRANT&amp;nbsp;READ,&amp;nbsp;WRITE&amp;nbsp;ON&amp;nbsp;DIRECTORY&amp;nbsp;dp_dir&amp;nbsp;TO&amp;nbsp;iplat;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、导出数据&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;注意&amp;nbsp;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;DIRECTORY 的名字要与数据库中已有的 DIRECTORY 保持一致&lt;/span&gt;&lt;/span&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;expdp&amp;nbsp;iplat/密码@服务名&amp;nbsp;DIRECTORY=DUMPDIR&amp;nbsp;\&amp;nbsp;&amp;nbsp;&amp;nbsp;
DUMPFILE=em_hi_log_$(date&amp;nbsp;+%Y%m%d).dmp&amp;nbsp;\
LOGFILE=em_hi_log_exp_$(date&amp;nbsp;+%Y%m%d).log&amp;nbsp;\
TABLES=iplat.EM_HI_LOG&amp;nbsp;\
COMPRESSION=ALL&lt;/pre&gt;&lt;p&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3&gt;3、目标库创建&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;DIRECTORY&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;确认目标库 DUMPDIR 目录对象存在，如果不存话按照上面的步骤创建&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;SELECT&amp;nbsp;directory_name,&amp;nbsp;directory_path&amp;nbsp;FROM&amp;nbsp;dba_directories&amp;nbsp;&amp;nbsp;WHERE&amp;nbsp;directory_name&amp;nbsp;=&amp;nbsp;&amp;#39;DUMPDIR&amp;#39;;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3&gt;4、目标库创建用户&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;确认 iplat 用户存在，如果不存在需要提前创建&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;SELECT&amp;nbsp;username,&amp;nbsp;account_status&amp;nbsp;FROM&amp;nbsp;dba_users&amp;nbsp;WHERE&amp;nbsp;username&amp;nbsp;=&amp;nbsp;&amp;#39;IPLAT&amp;#39;;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;5、确认目标库&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;存在&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;表空间&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;源库用的是 DS_IPLAT01表空间，如果目标库不进行表空间映射的话就需要保持一致；如果要不存在该表空间就要先行创建，避免写入到默认表空间&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;SELECT&amp;nbsp;tablespace_name,&amp;nbsp;status&amp;nbsp;FROM&amp;nbsp;dba_tablespaces&amp;nbsp;WHERE&amp;nbsp;tablespace_name&amp;nbsp;=&amp;nbsp;&amp;#39;DS_IPLAT01&amp;#39;;

--创建表空间
CREATE&amp;nbsp;TABLESPACE&amp;nbsp;DS_IPLAT01&amp;nbsp;\
DATAFILE&amp;nbsp;&amp;#39;/u01/oradata/orcl/ds_iplat01_01.dbf&amp;#39;&amp;nbsp;SIZE&amp;nbsp;10G&amp;nbsp;\
AUTOEXTEND&amp;nbsp;ON&amp;nbsp;NEXT&amp;nbsp;1000M&amp;nbsp;MAXSIZE&amp;nbsp;32G
EXTENT&amp;nbsp;MANAGEMENT&amp;nbsp;LOCALSEGMENT&amp;nbsp;SPACE&amp;nbsp;MANAGEMENT&amp;nbsp;AUTO;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;6、导入数据&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;这里使用REMAP_TABLE将表名进行了修改&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;impdp&amp;nbsp;&amp;#39;iplat/123456&amp;#39;&amp;nbsp;\
DIRECTORY=DUMPDIR&amp;nbsp;DUMPFILE=em_hi_log_20260611.dmp&amp;nbsp;\
LOGFILE=em_hi_log_imp_20260611.log&amp;nbsp;\
TABLES=iplat.EM_HI_LOG&amp;nbsp;\
REMAP_TABLE=iplat.EM_HI_LOG:EM_HI_LOG_202606&lt;/pre&gt;</description><pubDate>Thu, 23 Apr 2026 15:03:52 +0800</pubDate></item><item><title>MySQL教程（13）基于Position或GTID实现主从复制</title><link>https://ywpie.com/post/80.html</link><description>&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、MySQL主从复制概述&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;主从复制是MySQL高可用与横向扩展的基础方案，其核心依赖于 MySQL 自身的 Binlog 机制。主节点的 Binlog 记录了数据库上所有的 DDL 与 DML 操作（SELECT、SHOW 等不产生数据变更的语句不会被记录，临时表的操作同样不在记录范围内），从库将主库 Binlog 复制到自己的Relay Log，再依据 Relay Log 执行相同的操作，从而实现数据同步。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/04/202604171776416704130582.png&quot; title=&quot;replication1.png&quot; alt=&quot;replication1.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、主从复制主要应用场景&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 提升查询性能：&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;所有数据变更在主节点完成，查询请求通过从节点完成，尤其是一些 OLAP 报表类任务也非常适合通过从节点完成&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 提升数据&lt;/span&gt;&lt;/strong&gt;安全：&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;从节点可以作为主节点的备份，结合半同步复制或延迟复制保障数据安全，日常备份任务也可以在从节点上执行，降低主节点的性能压力&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;远程数据分发：&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;跨区域数据同步，适合对数据实时性要求不高的场景，对实时性有要求的请求则继续走主节点或同区域节点&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;滚动升级：&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;先升级从库并进行测试，再切换主从关系，实现不停机的在线升级&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 自动化&lt;/span&gt;&lt;/strong&gt;高可用：&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;当主节点发生故障时，通过数据库中间件或手动切换的方式快速恢复服务&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、主从复制常见方式&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong&gt; 主从架构：&lt;/strong&gt;常见的主从架构包括一主一从、一主多从、级联复制。需要注意的是在进行 Binlog 传输时会有IO和带宽消耗，如果是一主多从的架构，从节点的数量不宜过多&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 复制模式：&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;主从复制在进行数据同步时分为异步复制、半同步复制和同步复制。异步复制是主库写完 Binlog 就立刻返回给客户端，不关心从库有没有真正收到日志并完成应用，性能最好但存在数据丢失风险；半同步复制是主库写完 Binlog 后，需要等待至少一个从库确认已经收到并写入 Relay Log 才返回给客户端；全同步复制是主库必须等所有从库都执行完事务才返回，数据一致性最强，但性能影响也最大&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;二、MySQL主从复制配置&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;在部署主从架构前先确保主从节点时间同步，并且数据库版本一致（从库版本可以高于主库版本，但是不能低于主库版本）&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、基于position方式实现主从同步&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;基于position是传统的主从配置方式，从库记录了当前同步到的 Binlog 偏移量，比如 mysql-bin.000023，pos 4521。这种方式简单易懂，但是当进行主从切换或者级联复制时，需要手动找到新主库对应的偏移量，操作繁琐&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 数据库配置部分&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;由于主从可能发生切换，所以建议在配置上保持一致，可以参考&lt;a href=&quot;https://ywpie.com/post/7.html&quot; target=&quot;_blank&quot;&gt;《MySQL教程（2）MySQL 生产环境配置文件模板及参数详解》&lt;/a&gt;&lt;/span&gt;，&lt;span style=&quot;font-size: 16px;&quot;&gt;这里摘取部分配置进行说明&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;###&amp;nbsp;Binlog&amp;nbsp;###
sync_master_info&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;每次事务提交后立即将&amp;nbsp;master.info&amp;nbsp;刷新到磁盘，防止主库宕机时丢失同步状态
log_bin&amp;nbsp;=&amp;nbsp;/data/mysql3310/log/binlog/mysql-bin&amp;nbsp;&amp;nbsp;#&amp;nbsp;Binlog存储路径及文件名前缀
binlog_format&amp;nbsp;=&amp;nbsp;row&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;使用&amp;nbsp;row&amp;nbsp;格式记录&amp;nbsp;Binlog，记录每行数据的实际变更，比&amp;nbsp;statement&amp;nbsp;模式更安全可靠
binlog_rows_query_log_events&amp;nbsp;=&amp;nbsp;on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;在&amp;nbsp;Binlog&amp;nbsp;中额外记录原始&amp;nbsp;SQL&amp;nbsp;语句
max_binlog_size&amp;nbsp;=&amp;nbsp;1024M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;单个&amp;nbsp;Binlog&amp;nbsp;文件的最大大小，超过后自动切换到下一个文件
expire_logs_days&amp;nbsp;=&amp;nbsp;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Binlog&amp;nbsp;文件的自动清理天数，10&amp;nbsp;天前的文件会被自动删除
###&amp;nbsp;Relay&amp;nbsp;Log&amp;nbsp;###
relay-log&amp;nbsp;=&amp;nbsp;/data/mysql3310/log/relaylog/relay-bin&amp;nbsp;&amp;nbsp;#&amp;nbsp;Relay&amp;nbsp;Log&amp;nbsp;文件的存储路径及文件名前缀
relay_log_recovery&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;从库崩溃重启后自动从最新的&amp;nbsp;Relay&amp;nbsp;Log&amp;nbsp;恢复，避免使用可能损坏的旧文件
relay-log-purge&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;自动删除已应用的&amp;nbsp;Relay&amp;nbsp;Log
###&amp;nbsp;Replication&amp;nbsp;###
master_info_repository&amp;nbsp;=&amp;nbsp;TABLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;将&amp;nbsp;master.info&amp;nbsp;持久化到系统表，避免宕机后状态不一致
relay_log_info_repository&amp;nbsp;=&amp;nbsp;TABLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;将&amp;nbsp;relay-log.info&amp;nbsp;持久化到系统表，原因同上
skip_slave_start&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;从库启动时不自动开启复制线程，需手动执行&amp;nbsp;START&amp;nbsp;SLAVE，便于启动后先检查状态
log_slave_updates&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;从库将复制执行的事务也写入自己的&amp;nbsp;Binlog，级联复制或从库切主时必须开启
slave_parallel_type&amp;nbsp;=&amp;nbsp;LOGICAL_CLOCK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;并行复制调度策略，基于主库提交时序判断事务能否并行，比&amp;nbsp;DATABASE&amp;nbsp;模式并行度更高
slave_parallel_workers&amp;nbsp;=&amp;nbsp;8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;并行复制的工作线程数，通常与主库核心数相当
slave_preserve_commit_order&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;保证从库事务提交顺序与主库一致，开启并行复制时建议同时开启
slave_net_timeout&amp;nbsp;=&amp;nbsp;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;从库检测主库连接超时的时间（秒），超时后触发重连
#read_only&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;从库只读，建议从库打开
#super_read_only&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;SUPER权限的用户也只读，建议从库打开
transaction_write_set_extraction&amp;nbsp;=&amp;nbsp;XXHASH64&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;事务哈希算法，用于&amp;nbsp;WRITESET&amp;nbsp;并行复制和冲突检测
binlog_transaction_dependency_tracking&amp;nbsp;=&amp;nbsp;WRITESET_SESSION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;同会话内事务保持顺序，跨会话无冲突事务可并行回放&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;在主库建立复制账号并授予权限&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;GRANT&amp;nbsp;REPLICATION&amp;nbsp;SLAVE,REPLICATION&amp;nbsp;CLIENT&amp;nbsp;ON&amp;nbsp;*.*&amp;nbsp;TO&amp;nbsp;&amp;#39;slave&amp;#39;@&amp;#39;192.168.36.11&amp;#39;&amp;nbsp;IDENTIFIED&amp;nbsp;BY&amp;nbsp;&amp;#39;123456789&amp;#39;;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;&lt;/span&gt;查看主库当前position&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;position实际对应的是binlog的File Size，从库会从该位置进行复制&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;mysql&amp;nbsp;&amp;gt;&amp;nbsp;show&amp;nbsp;master&amp;nbsp;status&amp;nbsp;\G&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 从库指定主库position&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;STOP&amp;nbsp;SLAVE;
CHANGE&amp;nbsp;MASTER&amp;nbsp;TO&amp;nbsp;MASTER_HOST=&amp;#39;192.168.145.85&amp;#39;,MASTER_USER=&amp;#39;repl&amp;#39;,MASTER_PASSWORD=&amp;#39;123456&amp;#39;,MASTER_LOG_FILE=&amp;#39;master-bin.000004&amp;#39;,MASTER_LOG_POS=0;
#MASTER_HOST：MASTER服务器的IP
#MASTER_USER：有slave权限的用户，就是GRANT所授权的用户
#MASTER_PASSWORD：从库用户的密码
#MASTER_LOG_FILE：在主库上执行show&amp;nbsp;master&amp;nbsp;status语句可以查看日志名
#MASTER_LOG_POS=333：这个位置决定了从库从哪个位置开始复制，实测写0也可以，从头复制&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 启动从库复制线程&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;启动后查看下状态，必须确保 Slave_IO_Running、Slave_SQL_Running的状态都为YES&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;mysql&amp;nbsp;&amp;gt;&amp;nbsp;start&amp;nbsp;slave;&amp;nbsp;&amp;nbsp;#启动从库
mysql&amp;nbsp;&amp;gt;&amp;nbsp;show&amp;nbsp;slave&amp;nbsp;status&amp;nbsp;\G&amp;nbsp;&amp;nbsp;#查看从库状态，确保IO_THREAD&lt;/pre&gt;&lt;h3 style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、基于GTID方式实现主从同步&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;GTID（&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;全局事务标识&lt;/span&gt;）是从 MySQL 5.6 开始引入，InnoDB 引擎会对每个事务都使用一个全局唯一编号进记录，&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;GTID拥有全局唯一性和幂等性，&lt;/span&gt;GTID按照递增方式发生变化，&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;一个完整的GTID包含了UUID和GTID两部分，UUID即Server_uuid，用于区分事务来自于集群中哪个节点&lt;/span&gt;。从5.7版本开始，即便没有配置GTID也会存在匿名事务，只不过这个匿名事务不包含GTID信息，不能用于主从复制。MySQL在启动的时候通过读取 auto.cnf 获取UUID，如果auto.cnf文件丢失则会自动生成新的UUID，如下为GTID示例&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;#&amp;nbsp;同一个实例的事务GTID会进行合并，比如来自同一个实例的1-3号事务，会写为1-3。事务之间如果不连续，则用逗号分隔
2a09ee6e-645d-11e7-a96c-000c2953a1cb:1-3
2a09ee6e-645d-11e7-a96c-000c2953a1cb:1-3,11,48-51&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;因为GTID的全局唯一性，从库只需要知道自己已经执行过哪些GTID，然后会自动执行该GTID之后的事务，不再需要指定Position。这样一来&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;可以大幅简化主从复制部署与维护的复杂度。因为&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;不同节点之间的GTID还有连续性和幂等性，这样&lt;/span&gt;&lt;/span&gt;在进行主从切换时也更方便&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;，不再有每个节点position不同的情况，&lt;/span&gt;从库&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;不需要关心偏移量就&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;能自动找到新主库上的同步点&lt;/span&gt;&lt;/span&gt;。在&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;实际使用中，GTID 模式已经是目前最优选择，尤其是配合 MHA、orchestrator 等高可用工具做自动故障切换时已经是必选项&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;需要注意启用GTID以后，不再支持create table...select...语句，因为该语句实际是先CREATE TABLE再INSERT会生成2个GTID，违背了GTID下一个事务只有一个GTID的特性。并且也不支持使用CREATE TEMPORARY TABLE临时表相关操作&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;在所有节点开启GTID&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;MySQL 5.7开始支持在线配置GTID，无需重启服务。但是为了确保MySQL能正确处理从匿名事务更改为GTID事务的过程，gtid_mode的值只能按照顺序逐一提升或下降，如可以从OFF_PERMISSIVE逐步升级为ON_PERMISSIVE和OFF，但是不能直接调整为ON，关于GTID在线开启见&lt;/span&gt;&lt;a href=&quot;https://www.ywdba.cn/post-647.html&quot; target=&quot;_blank&quot; title=&quot;MySQL主从复制（9）传统复制模式切换GTID复制模式&quot; style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;https://www.ywdba.cn/post-647.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;开启 GTID 后需要关注的相关表与变量&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;mysql.gtid_executed&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：该表存储GTID信息，数据库实例启动时会读取该表信息并赋值给gtid_executed变量（在MySQL 5.6时期是使用binlog中的GTID_LOG_EVENT来持久化GTID信息的，所以必须配置 log_slave_updates=1 才能使用GTID的主从方式）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;gtid_executed&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：该变量用于实时查看当前数据库实例已经执行过的GTID集合。执行show master status或show slave status时返回的Executed_Gtid_Set的值就来自于该变量&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;gtid_purged&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;：该变量记录了已经被删除或丢弃的GTID事务（Binlog过期或人为操作删除都算）。在部署从库的时候通常需要使用set global gtid_purged命令来设置该变量，表示从库不需要再执行这些GTID包含的操作（因为这些事务已经在备份数据中了），否则会因为日志被删除了而导致同步失败&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;&lt;/span&gt;数据库配置部分&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;采用GTID复制后从库也会产生binlog日志，通过show master logs可以看到与主库是一致的。在从库执行show binlog event in &amp;#39;master-bin.000001&amp;#39;命令可以查看当前所执行的事务ID位置，正常情况也与主库一致&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;###&amp;nbsp;Binlog&amp;nbsp;###
sync_master_info&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;每次事务提交后立即将&amp;nbsp;master.info&amp;nbsp;刷新到磁盘，防止主库宕机时丢失同步状态
log_bin&amp;nbsp;=&amp;nbsp;/data/mysql3310/log/binlog/mysql-bin&amp;nbsp;&amp;nbsp;#&amp;nbsp;Binlog存储路径及文件名前缀
binlog_format&amp;nbsp;=&amp;nbsp;row&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;使用&amp;nbsp;row&amp;nbsp;格式记录&amp;nbsp;Binlog，记录每行数据的实际变更，比&amp;nbsp;statement&amp;nbsp;模式更安全可靠
binlog_rows_query_log_events&amp;nbsp;=&amp;nbsp;on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;在&amp;nbsp;Binlog&amp;nbsp;中额外记录原始&amp;nbsp;SQL&amp;nbsp;语句
max_binlog_size&amp;nbsp;=&amp;nbsp;1024M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;单个&amp;nbsp;Binlog&amp;nbsp;文件的最大大小，超过后自动切换到下一个文件
expire_logs_days&amp;nbsp;=&amp;nbsp;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Binlog&amp;nbsp;文件的自动清理天数，10&amp;nbsp;天前的文件会被自动删除
###&amp;nbsp;Relay&amp;nbsp;Log&amp;nbsp;###
relay-log&amp;nbsp;=&amp;nbsp;/data/mysql3310/log/relaylog/relay-bin&amp;nbsp;&amp;nbsp;#&amp;nbsp;Relay&amp;nbsp;Log&amp;nbsp;文件的存储路径及文件名前缀
relay_log_recovery&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;从库崩溃重启后自动从最新的&amp;nbsp;Relay&amp;nbsp;Log&amp;nbsp;恢复，避免使用可能损坏的旧文件
relay-log-purge&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;自动删除已应用的&amp;nbsp;Relay&amp;nbsp;Log
###&amp;nbsp;Replication&amp;nbsp;###
master_info_repository&amp;nbsp;=&amp;nbsp;TABLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;将&amp;nbsp;master.info&amp;nbsp;持久化到系统表，避免宕机后状态不一致
relay_log_info_repository&amp;nbsp;=&amp;nbsp;TABLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;将&amp;nbsp;relay-log.info&amp;nbsp;持久化到系统表，原因同上
skip_slave_start&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;从库启动时不自动开启复制线程，需手动执行&amp;nbsp;START&amp;nbsp;SLAVE，便于启动后先检查状态
log_slave_updates&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;从库将复制执行的事务也写入自己Binlog，级联复制或从库切主时必须开启
slave_parallel_type&amp;nbsp;=&amp;nbsp;LOGICAL_CLOCK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;并行复制调度策略，基于主库提交时序判断事务能否并行，比&amp;nbsp;DATABASE&amp;nbsp;模式并行度更高
slave_parallel_workers&amp;nbsp;=&amp;nbsp;8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;并行复制的工作线程数，通常与主库核心数相当
slave_preserve_commit_order&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;保证从库事务提交顺序与主库一致，开启并行复制时建议同时开启
slave_net_timeout&amp;nbsp;=&amp;nbsp;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;从库检测主库连接超时的时间（秒），超时后触发重连
read_only&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;从库只读，建议打开
super_read_only&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;SUPER权限的用户也只读
transaction_write_set_extraction&amp;nbsp;=&amp;nbsp;XXHASH64&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;事务哈希算法，用于&amp;nbsp;WRITESET&amp;nbsp;并行复制和冲突检测
binlog_transaction_dependency_tracking&amp;nbsp;=&amp;nbsp;WRITESET_SESSION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;同会话内事务保持顺序，跨会话无冲突事务可并行回放
###&amp;nbsp;GTID&amp;nbsp;###
gtid_mode&amp;nbsp;=&amp;nbsp;on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;&amp;nbsp;开启&amp;nbsp;GTID&amp;nbsp;模式，每个事务分配全局唯一&amp;nbsp;ID，简化主从切换和故障恢复
enforce_gtid_consistency&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;强制所有事务满足&amp;nbsp;GTID&amp;nbsp;一致性约束，禁止在&amp;nbsp;GTID&amp;nbsp;模式下无法安全复制的语句
binlog_gtid_simple_recovery&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;简化&amp;nbsp;GTID&amp;nbsp;恢复流程，只扫描最新和最旧的&amp;nbsp;Binlog&amp;nbsp;即可确定已执行的&amp;nbsp;GTID&amp;nbsp;集合，加快启动速度&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;&lt;/span&gt;主库进行授权操作&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;grant&amp;nbsp;replication&amp;nbsp;slave,replication&amp;nbsp;client&amp;nbsp;on&amp;nbsp;*.*&amp;nbsp;to&amp;nbsp;&amp;#39;repl&amp;#39;@&amp;#39;192.168.1.110&amp;#39;&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;&amp;#39;123456&amp;#39;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 从库恢复主库备份&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;备份数据恢复后需要在从库指定gtid_purged变量信息，这个信息根据备份方式不同导致查询的方式不同。如果是mysqldump逻辑备份，在备份文件前50行会有gtid_purged变量，xtrabackup物理备份则会写入xtrabackup的备份文件中&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;#通过备份还原数据后通过该命令可以看到从节点和主节点GTID信息是一致的&amp;nbsp;
show&amp;nbsp;master&amp;nbsp;status&amp;nbsp;\G&amp;nbsp;&amp;nbsp;
#防止从库读取到错误的gtid_executed变量，执行该命令可以重置变量
reset&amp;nbsp;master;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
#指定从库需要跳过的GTID信息，也就是让从库从该GTID之后开始进行复制
set&amp;nbsp;global&amp;nbsp;gtid_purged=&amp;#39;xxxxxxxxxx:1-21&amp;#39;;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;·&amp;nbsp;从库指定同步位点信息&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;由于采用了GTID，从库在指定position信息时只用声明从哪个GTID后开始同步即可&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;change&amp;nbsp;master&amp;nbsp;to&amp;nbsp;master_host=&amp;#39;192.168.1.100&amp;#39;,master_port=3306,master_user=&amp;#39;repl&amp;#39;,master_password=&amp;#39;123456&amp;#39;,master_auto_position=1;
start&amp;nbsp;slave;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;· 验证同步状态&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;从库执行show slave status命令查看事务ID是否与主库一致，Retrieved_Gtid_Set表示从库已经接受到的GTID信息；Executed_Gtid_Set表示从库已经应用了的GTID信息&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;&lt;img src=&quot;https://ywpie.com/zb_users/upload/2026/04/202604171776412753278963.png&quot; title=&quot;GTID1.png&quot; alt=&quot;GTID1.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2.1 &lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;GTID常见问题处理&lt;/span&gt;&lt;/h4&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 跳过指定事务&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;开启GTID后如果需要跳过一个事务不能再使用sql_slave_skip_counter参数，而是要获得从库执行的最后一个GTID操作。也就是show slave status 中的Retrieved_Gtid_Set信息&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/04/202604171776416147252387.png&quot; title=&quot;GTID2.png&quot; alt=&quot;GTID2.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;构建空事务&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;stop&amp;nbsp;slave;
set&amp;nbsp;gtid_next=&amp;#39;xxxxxxxxxxxxxxxcb140c:10903292&amp;#39;
begin;
commit;
set&amp;nbsp;gtid_next=&amp;#39;xxxxxxxxxx3:4&amp;#39;
begin;
commit;
set&amp;nbsp;gtid_next=&amp;#39;automatic&amp;#39;;
start&amp;nbsp;slave;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 复制线程状态为yes但是不同步&lt;br/&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;数据目录下auto.cnf存放了数据库UUID，每个节点的ID不能一样，如果一样会出现主从状态是2个yes，但是数据不同步的情况&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;show&amp;nbsp;global&amp;nbsp;variables&amp;nbsp;like&amp;nbsp;&amp;#39;server_uuid&amp;#39;&amp;nbsp;;&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 报错：Master_has_purged_require_gtids&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;通常是主库删除了还未同步完成的Binlog导致&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#在从库上手动指定二进制日志文件和位置
mysql&amp;nbsp;&amp;gt;&amp;nbsp;stop&amp;nbsp;slave;
mysql&amp;nbsp;&amp;gt;&amp;nbsp;change&amp;nbsp;master&amp;nbsp;to&amp;nbsp;master_host=&amp;#39;192.168.1.100&amp;#39;,master_user=&amp;#39;repl&amp;#39;,master_password=&amp;#39;123456&amp;#39;,master_log_file=&amp;#39;master-bin.000005&amp;#39;,master_log_pos=526,master_auto_position=0;
mysql&amp;nbsp;&amp;gt;&amp;nbsp;start&amp;nbsp;slave;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br/&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 报错：Slave has more GTIDs than the master has,using the master&amp;#39;s SERVER_UUID&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;该问题代表从库获取到的GTID超过了主库，比如主库在未指定binlog文件名的同时修改了系统主机名导致binlog全部被修改，从库就会判断失败；或者主库未配置双1参数时断电，导致从库提前获取到了还未执行的GTID，解决方法如下&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#全在从库执行
stop&amp;nbsp;slave;
reset&amp;nbsp;slave;
reset&amp;nbsp;master;&amp;nbsp;&amp;nbsp;#从库的binlog已经无效了，所以要执行这个命令清空binlog
change&amp;nbsp;master&amp;nbsp;to&amp;nbsp;master_host=&amp;#39;192.168.1.100&amp;#39;,master_port=3306,master_user=&amp;#39;repl&amp;#39;,master_password=&amp;#39;123456&amp;#39;,master_auto_position=1;三、MySQL主从常见维护方法&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;三、MySQL主从常见维护方法&lt;/span&gt;&lt;/h2&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 查看主节点状态&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#主要用于查看主库position信息
show&amp;nbsp;master&amp;nbsp;status&amp;nbsp;\G&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3 style=&quot;text-wrap-mode: wrap; text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 查看从节点状态&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;pre&gt;show&amp;nbsp;slave&amp;nbsp;status&amp;nbsp;\G&amp;nbsp;&amp;nbsp;&amp;nbsp;#主要用于查看从库状态&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;从节点需要关注的地方比较多，主要有以下重点指标&lt;/span&gt;&lt;/p&gt;&lt;table interlaced=&quot;enabled&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;td width=&quot;471&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;strong&gt;指标名&lt;/strong&gt;&lt;/td&gt;&lt;td width=&quot;471&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;strong&gt;用途&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;471&quot; valign=&quot;middle&quot; style=&quot;word-break: break-all;&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;Read_Master_Log_Pos&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;471&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;记录从库读取到主库Binlog到哪个位置&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;471&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;Exec_Master_Log_Pos&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;471&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;记录从库执行到主库&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap; background-color: #F7FAFF;&quot;&gt;Binlog&lt;/span&gt;到哪个位置。如果和Read_Master_Log_Pos一致代表数据是完全同步的&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;471&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;Relay_Log_File&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;471&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;记录当前从库将Binlog记录到哪个Relay Log&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;471&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;Relay_Master_Log_file&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;471&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;当前&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap; background-color: #F7FAFF;&quot;&gt;Relay Log&lt;/span&gt;所对应的Binlog日志文件&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;471&quot; valign=&quot;middle&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;S&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;econds_behind_master&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;471&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;从服务器比主服务器慢了多少秒，为0代表没有延迟。这里的计算方式为“从库当前系统时间 -&amp;nbsp;主从节点之间的系统时间差 -&amp;nbsp;从库SQL线程正在执行的事务时间戳”，这里主从节点之间的时间差会在从库IO线程执行启动的时候进行计算，所以主从时间不一致时也能计算出正确的延迟时间，但是要注意如果在复制过程中修改了系统时间就会导致主从延迟不可靠，除非重启IO线程。当SQL线程重放主库的大事务时，时间戳更新相当于被暂停了，此时无论主库是否还有事务写入，从库的延迟值都会越来越大，等大事务执行完毕后又突然变为0是正常现象。虽然该值可以用来判断主从同步情况，但是最准确的方式还是对比Read_Master_Log_Pos - Exec_Master_Master_Log_Pos的值以及Executed_Git_set - Retrieved_Gtid_Set的差值。如果GTID差值很小而Position差距很大的话，说明是有大事务的存在&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;middle&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; align=&quot;center&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;Slave_IO_Running、Slave_SQL_Running&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;如果有一项为No都表示主从异常。IO Thread的作用是从Master端请求二进制日志并存放到Slave端的中继日志中；SQL Thread的作用是将中继日志里的事件导入到SQL语句中&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;· 从库管理常用命令&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;需要注意的是无论使用何种复制方式，如果需要重启服务建议先stop slave再重启MySQL服务，避免复制出错&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;STOP&amp;nbsp;SLAVE&amp;nbsp;IO_THREAD;	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#停止从库IO进程
STOP&amp;nbsp;SLAVE&amp;nbsp;SQL_THREAD;	&amp;nbsp;#停止从库SQL进程
STOP&amp;nbsp;SLAVE;	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#停止IO和SQL进程
START&amp;nbsp;SLAVE&amp;nbsp;IO_THREAD;	&amp;nbsp;#启动IO进程
START&amp;nbsp;SLAVE&amp;nbsp;SQL_THREAD;	&amp;nbsp;#启动SQL进程
START&amp;nbsp;SLAVE;	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#启动IO和SQL进程
RESET&amp;nbsp;SLAVE;	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#重置从库状态，该操作会删除所有中继日志并启动一个新的中继日志，通常重做从库的时候才会执行此命令
SHOW&amp;nbsp;SLAVE&amp;nbsp;STATUS;	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#查看MySQL同步状态&lt;/pre&gt;</description><pubDate>Fri, 17 Apr 2026 17:01:36 +0800</pubDate></item><item><title>Redis教程（4）数据持久化配置</title><link>https://ywpie.com/post/79.html</link><description>&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal; widows: 1; line-height: 25px; background-color: #FFFFFF; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;strong&gt;一、Redis的持久化介绍&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;span style=&quot;font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal; widows: 1; line-height: 25px; background-color: #FFFFFF;&quot;&gt;Redis支持将缓存数据持久化到硬盘中保存，避免内存中的数据在服务重启后或者服务器断电等情况下发生丢失。&lt;/span&gt;&lt;span style=&quot;line-height: 25px;&quot;&gt;Redis的数据持久化支持&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; line-height: 25px; background-color: #FFFFFF;&quot;&gt;rdb快照持久化和aof日志持久化两种方式。&lt;span style=&quot;widows: 1; background-color: #FFFFFF;&quot;&gt;在生产环境中如果要考虑Redis数据持久化，建议将两种方式都同时配置，并且是在从库上执行数据的持久化，减少对主库性能的影响&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;strong style=&quot;font-family: &amp;quot;&amp;quot;; widows: 1;&quot;&gt;· RDB快照持久化&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;span style=&quot;widows: 1;&quot;&gt;每隔一段时间或者操作次数达到一定量后，从内存Dump数据形成rdb文件，RDB文件是经过压缩的二进制数据，文件会比较小，恢复速度快。RDB持久化的缺点是如果当前写入的数据还无法触发持久化操作，此时发生宕机，那么会丢失这部分数据&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;widows: 1; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;strong style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;· AOF日志持久化&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;widows: 1; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;类似MySQL的Binlog，可以实现每次操作的持久化，数据最为安全，但是影响性能&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal; widows: 1; line-height: 25px; background-color: #FFFFFF; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;二、手动保存Redis数据&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal; widows: 1; line-height: 25px; background-color: #FFFFFF; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px;&quot;&gt;在配置RDB和AOF前还需要了解下保存Redis数据的命令——save和bgsave，在生产环境中建议使用bgsave进行保存数据，它会fork出一个子进程来读取内存中的数据并写入到文件中，除了fork期间会有短暂的阻塞，后续的操作都不会阻塞客户端的读写请求。但是由于fork出来了新进程，在保存数据的时候内存的消耗也会double，要小心OOM风险&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal; widows: 1; line-height: 25px; background-color: #FFFFFF; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/04/202604011775031549797604.png&quot; title=&quot;redis_permanent1.png&quot; alt=&quot;redis_permanent1.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal; widows: 1; line-height: 25px; background-color: #FFFFFF; font-size: 16px; font-family: &amp;quot;color:#000000;&amp;quot;;&quot;&gt;&lt;strong&gt;三、RDB持久化配置方法&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal; widows: 1; line-height: 25px; background-color: #FFFFFF; font-size: 16px; font-family: &amp;quot;color:#000000;&amp;quot;;&quot;&gt;编辑redis.conf配置文件，主要修改以下内容&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;save&amp;nbsp;900&amp;nbsp;1&amp;nbsp;&amp;nbsp;#在900秒内，key值发生变化次数超过1次则进行持久化，生产环境通常默认这个值即可&amp;nbsp;
save&amp;nbsp;300&amp;nbsp;10&amp;nbsp;&amp;nbsp;#在300秒内，key值发生变化次数超过10次则进行持久化，生产环境通常默认这个值即可&amp;nbsp;
save&amp;nbsp;60&amp;nbsp;10000&amp;nbsp;&amp;nbsp;#在60秒内，key值发生变化次数超过10000次则进行持久化，生产环境通常默认这个值即可&amp;nbsp;&amp;nbsp;
stop-write-on-bgsave-error&amp;nbsp;yes&amp;nbsp;&amp;nbsp;#&amp;nbsp;如果rdb文件在导出过程中出错则让Redis停止任何写数据请求，避免数据不一致&amp;nbsp;
rdbcompression&amp;nbsp;yes&amp;nbsp;&amp;nbsp;#压缩rdb数据，消耗CPU性能来节约磁盘空间&amp;nbsp;
rdbchecksum&amp;nbsp;yes&amp;nbsp;&amp;nbsp;#服务启动时检查rdb文件的完整性，如果不完整则不启动
dbfilename&amp;nbsp;dump.rdb&amp;nbsp;&amp;nbsp;#rdb文件名
dir&amp;nbsp;/data/redis/rdb/&amp;nbsp;#rdb文件保存路径，启动时会从该目录寻找rdb文件&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal; widows: 1; line-height: 25px; background-color: #FFFFFF; font-size: 16px; font-family: &amp;quot;color:#000000;&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: &amp;quot;color:#000000;&amp;quot;;&quot;&gt;当设置完后重启Redis服务，然后在工作中&lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;只要达到了save条件，key就会被保存。并且日志中也会有“xx changes in xx seconds. Saving”这样的记录。&lt;span style=&quot;background-color: #FFE500;&quot;&gt;如果要关闭rdb功能的话将save选项改为save &amp;quot;&amp;quot;，引号里为空即可&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: &amp;quot;Microsoft YaHei&amp;quot;; background-color: #FFE500;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: &amp;quot;color:#000000;&amp;quot;;&quot;&gt;&lt;strong&gt;四、AOF持久化配置方法&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: &amp;quot;color:#000000;&amp;quot;;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;color:#000000;&amp;quot;; font-size: 16px; widows: 1; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;编辑redis.conf配置文件，主要修改以下内容&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;appendonly&amp;nbsp;yes&amp;nbsp;&amp;nbsp;#打开aof功能
#appendfsync&amp;nbsp;&amp;nbsp;no&amp;nbsp;&amp;nbsp;#让系统决定持久化时机，Linux默认30秒写入一次数据到磁盘
#appendfsync&amp;nbsp;always&amp;nbsp;&amp;nbsp;#每个命令都写入磁盘，最多丢失一条命令的数据
appendfsync&amp;nbsp;&amp;nbsp;everysec&amp;nbsp;&amp;nbsp;#每秒写一次数据到磁盘，最多丢失一秒数据，满足大部分应用场景，推荐使用
no-appendfsync-on-rewrite&amp;nbsp;&amp;nbsp;yes&amp;nbsp;&amp;nbsp;#如果正在导出rdb数据，停止aof的写入（aof将保存在一个队列中，rdb备份完成后执行队列，不会丢失数据）
auto-aof-rewrite-percentage&amp;nbsp;100&amp;nbsp;&amp;nbsp;#aof文件体积与上次相比增长率达到100%就进行重写（重写相当于记总账，比如对同一个key做了100次操作，我们只需要最后一次的操作，重写就会把多余的操作给忽略掉）
auto-aof-rewrite-min-size&amp;nbsp;64m&amp;nbsp;&amp;nbsp;#和上一项组合使用，aof文件达到64M时进行重写（重写会节省掉空间，因为多余的操作被删除了）
appendfilename&amp;nbsp;&amp;nbsp;&amp;quot;appendonly.aof&amp;quot;&amp;nbsp;&amp;nbsp;#aof文件名
dir&amp;nbsp;/data/redis6379&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: &amp;quot;color:#000000;&amp;quot;;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;color:#000000;&amp;quot;; font-size: 16px; widows: 1; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;当Redis服务启动后需要进行数据恢复时，如果同时开启了rdb和aof持久化，Redis只会加载aof文件（因为aof即时性高于rdb），如果rdb有数据时，再开启aof选项会把已经存储过的数据清空&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/04/202604011775031559197690.png&quot; title=&quot;redis_permanent2.png&quot; alt=&quot;redis_permanent2.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px;&quot;&gt;当AOF写入文件时如果服务器崩溃或AOF存储已满的情况下，最后一条命令可能会被截断并产生异常的AOF文件。在AOF文件异常的情况下，如果Redis配置文件中指定了aof-load-truncated为yes，那么Redis在启动时会忽略最后一条命令并顺利启动 Redis，否则启动会失败。而如果AOF文件中间命令被破坏的话则需要使用redis-check-aof命令跳转到出现问题的命令行然后尝试手动修复此文件。如果无法手动修复，可以使用redis-check-aof --fix 自动修复AOF 异常文件，不过可能会导致异常部分至文件末尾的数据全部被丢弃。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2026 16:11:01 +0800</pubDate></item></channel></rss>