<?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>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;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;数据泵是 Oracle 原生的逻辑备份工具，可以对数据进行高效导出（expdp）和导入（impdp）操作，包含数据库对象（例如表、模式、表空间等）及其数据&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;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;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;font-size: 16px;&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;/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;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;&quot;&gt;·&amp;nbsp;&lt;/span&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=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;&lt;/span&gt;&lt;/strong&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;&quot;&gt;·&amp;nbsp;&lt;/span&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=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;&lt;/span&gt;&lt;/strong&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;&quot;&gt;·&amp;nbsp;&lt;/span&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=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;&lt;/span&gt;&lt;/strong&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;&quot;&gt;·&amp;nbsp;&lt;/span&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=table_backup.dmp&amp;nbsp;logfile=table_restore.log&amp;nbsp;tables=SCHEMA_NAME.TABLE_NAME&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&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=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;span style=&quot;font-size: 16px;&quot;&gt;监控数据泵作业&lt;/span&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;/span&gt;&lt;/strong&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&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;/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;br/&gt;&lt;/p&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><item><title>Redis教程（3）使用info命令分析Redis服务状态</title><link>https://ywpie.com/post/78.html</link><description>&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;一、Redis info命令介绍&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;Redis 内置了info命令用于查看服务状态，该命令包含了Redis主要性能指标，&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;; font-size: 16px; text-wrap-mode: wrap;&quot;&gt;支持全局信息和指定模块信息的查看。该命令是进行&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;Redis性能分析和问题排查的关键工具&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;redis&amp;nbsp;&amp;gt;&amp;nbsp;info&amp;nbsp;&amp;nbsp;#查看所有模块信息
redis&amp;nbsp;&amp;gt;&amp;nbsp;info&amp;nbsp;keyspace&amp;nbsp;&amp;nbsp;#查看keyspace模块的信息&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://ywpie.com/zb_users/upload/2026/04/202604011775029562732001.png&quot; title=&quot;redis_info1.png&quot; alt=&quot;redis_info1.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;二、&lt;/strong&gt;&lt;/span&gt;&lt;strong style=&quot;font-size: 16px;&quot;&gt;Redis info命令执行结果说明&lt;/strong&gt;&lt;/h2&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#&amp;nbsp;Server&amp;nbsp;服务端信息
redis_version:3.2.12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#redis版本号
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:de5f1daa3afe8b6a
redis_mode:standalone
os:Linux&amp;nbsp;3.10.0-862.el7.x86_64&amp;nbsp;x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:42421
run_id:3bfe4f5404c9259beee035f89bb57dc0f1708d5b
tcp_port:6379&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#redis监听端口
uptime_in_seconds:76959&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#redis服务运行了多少秒
uptime_in_days:0
hz:10
lru_clock:9055374
executable:/usr/local/redis/redis-server&amp;nbsp;&amp;nbsp;&amp;nbsp;#执行的启动脚本
config_file:/usr/local/redis/redis.conf&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#配置文件路径

#&amp;nbsp;Clients&amp;nbsp;&amp;nbsp;客户端信息
connected_clients: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;#有几个客户端连接
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#因为BLPOP、BRPOP、BRPOPLPUSH命令被阻塞的客户端

#&amp;nbsp;Memory&amp;nbsp;&amp;nbsp;内存使用情况
used_memory:1947112
used_memory_human:1.86M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#Redis为了保存数据实际申请使用的空间，不包含碎片占用的内存
used_memory_rss:2211840
used_memory_rss_human:2.11M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#操作系统实际分配给&amp;nbsp;Redis&amp;nbsp;的物理内存空间，里面就包含了碎片
used_memory_peak:1947112
used_memory_peak_human:1.86M
total_system_memory:1021906944
total_system_memory_human:974.57M
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#内存碎片化，如果碎片化的值达到了2，最好重启redis服务，计算方式是实际内存除以理论内存
mem_allocator:libc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#redis使用的内存分配器，新版本中使用的是jemalloc，碎片化更少

#&amp;nbsp;Persistence&amp;nbsp;&amp;nbsp;持久化存储信息
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1535705992
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0&amp;nbsp;&amp;nbsp;#0代表没有开启
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

#&amp;nbsp;Stats&amp;nbsp;&amp;nbsp;状态信息
total_connections_received:6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#redis从启动到现在接受到的连接总数
total_commands_processed:76141&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#redis从启动到现在接受到的命令总数，当客户端响应过慢时可通过监控每秒命令执行数来判断服务是否响应延迟
instantaneous_ops_per_sec: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;#每秒执行命令数
total_net_input_bytes:2890573&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#入站流量
total_net_output_bytes:113930&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#出站流量
instantaneous_input_kbps:0.05
instantaneous_output_kbps:0.00
rejected_connections:0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#由于达到maxclient的限制而被拒绝的客户端数
sync_full:1
sync_partial_ok:0
sync_partial_err:0
expired_keys:0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#过期的key数量
evicted_keys:0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#因为达到max_memory而被淘汰的key数量
keyspace_hits:0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#缓存命中数
keyspace_misses:0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#缓存未命中数，结合缓存命中数可以算出命中率
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:615
migrate_cached_sockets:0

#&amp;nbsp;Replication&amp;nbsp;主从信息
role:master&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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是主，slave是从
connected_slaves: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;#有几个从节点
slave0:ip=192.168.145.69,port=6379,state=online,offset=106797,lag=0&amp;nbsp;&amp;nbsp;#从节点的信息
master_repl_offset:106797&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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_repl_offset：105121&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#从库复制写命令的进度信息，可以计算主从复制差值，配合监控进行告警，让业务代码不走延迟过多的从库
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:106796

#&amp;nbsp;CPU
used_cpu_sys:94.37
used_cpu_user:41.88
used_cpu_sys_children:0.01
used_cpu_user_children:0.00

#&amp;nbsp;Cluster&amp;nbsp;集群信息
cluster_enabled:0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#0代表没有开启集群

#&amp;nbsp;Keyspace
db3:keys=2,expires=2,avg_ttl=99950282&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#db3中有2个key，有2个key设置了过期时间，平均过期时间是99950282秒（0为不过期）&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong style=&quot;font-size: 16px;&quot;&gt;&lt;/strong&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong&gt;三、Redis info命令主要关注信息&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h3 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;1、memory模块&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;该模块输出了内存相关信息，可用于分析内存与碎片问题，比如Redis占用了多少内存、最大可用内存以及内存碎片率等信息&lt;/span&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;&amp;quot;; font-size: 16px; background-color: #FFFF00;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;· used_memory_human&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;：把Redis使用的内存总量进行了统计，包含了实际缓存占用的内存和Redis自身运行所占用的内存(如元数据、lua)，但是不包含内存碎片&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; background-color: #FFFF00;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;·&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;; background-color: #FFFF00;&quot;&gt;used_memory_rss_human&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;：这一项在上一项的基础上包含了内存碎片的统计。&lt;span style=&quot;background-color: #FFFFFF; font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;如果该值的统计数据大于了maxmemory所设置的值，说明Redis当前有使用swap虚拟内存，效率必然很低&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;。为了避免Redis使用到swap交换内存，建议设置好Key的过期淘汰策略。&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;如果&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;key都有设置TTL过期时间，使用volatile-ttl回收策略最合适；如果没有设置过期时间，使用allkeys-lru比较合适，它会从所有key中挑选最近最少使用的key进行删除(LRU淘汰算法)。&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-family: &amp;quot;&amp;quot;; font-size: 16px; background-color: #FFFF00;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;· mem_fragmentation_ratio&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;：&amp;nbsp;内存碎片率由use_memory_rss除以user_memory所得到，内存碎片率越高，说明未回收的内存越多，意味着浪费的内存空间也就越大。通常来说&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;内存碎片率稍大于1是合理的，如果超过1.5表Redis消耗了实际需要物理内存的150%，有50%都是碎片。若是内存碎片率低于1的话，说明Redis能申请的内存已经达不到期望值，有可能是系统内存不够用了使用了SWAP分区。Redis 4之后可以使用动态碎片整理，而之前的版本中如果要清理碎片只能进行重启操作，这样会导致数据丢失（通过RDB进行数据恢复的话也有额外的时间成本）&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;。除了上面提到的方法，修改redis内存分配器也能带来一定的优化效果。Redis支持glibc、jemalloc、tcmalloc几种不同的内存分配器，每个分配器在内存分配和碎片上都有不同的实现。通常使用redis默认的jemalloc内存分配器即可。&lt;/span&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;&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;· mem_allocator&lt;/span&gt;&lt;/strong&gt;：Redis使用的内存分配器，可以是libc、jemalloc、tcmalloc。libc的性能最次。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; background-color: #FFFF00;&quot;&gt;&lt;strong&gt;· maxmemory_human&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;&lt;span style=&quot;background-color: #FFE500;&quot;&gt;&lt;/span&gt;：Redis最大可使用的内存限制。虽然used_memory_human的值会受到&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;它的限制（比如配置了maxmemory_human为2G，used_memory_human会限制在2G内），但是因为碎片问题used_memory_rss_human会突破限制。带来的直接问题就是如果maxmemory_human配置的和系统最大内存接近容易发生OOM&lt;/span&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;font-size:16px;&amp;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;background-color: #FFFFFF; font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;2、stats模块&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF; font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;排查复杂度过高的命令带来的慢查询问题&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF; font-family: &amp;quot;&amp;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-family: &amp;quot;&amp;quot;; font-size: 16px; background-color: #FFFF00;&quot;&gt;&lt;strong&gt;· total_commands_processed：&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;对Redis服务处理命令的数量进行统计，这是排查延迟问题的关键值，因为Redis是在单线程模型下工作，会把接收到的客户端命令按顺序执行，如果&lt;span style=&quot;font-size: 16px; font-family: &amp;quot;font-size:16px;&amp;quot;; background-color: #FFFF00;&quot;&gt;执行命令过多或者存在很多慢命令就会让整个队列阻塞而导致延迟。&lt;/span&gt;由于total_commands_processed的值是递增的，所以要使用Zabbix做监控的话需要统计的是每秒的差值，这样才能知道每秒处理总数是上升还是下降，以便排查&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2026 16:01:49 +0800</pubDate></item><item><title>Docker运维教程（2）镜像与容器管理</title><link>https://ywpie.com/post/77.html</link><description>&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、Docker 镜像管理&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;自从Docker分为CE版和EE版后，命令行也发生了变化。在CE版本中对命令进行了分组，并且支持命令补全，包括版本号都可以自动补全。通过docker --help命令可以看到 Management Commands 包含多个组，这些组都是被操作的对象。不同的组有不同的子命令，所以目前通常都是使用&amp;quot;docker+对象名+子命令&amp;quot;的命令格式（老版本是“docker+子命令”&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;docker&amp;nbsp;container&amp;nbsp;create&amp;nbsp;&amp;nbsp;#新格式
docker&amp;nbsp;create&amp;nbsp;&amp;nbsp;#老格式
docker&amp;nbsp;container&amp;nbsp;--help&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;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;1、查看镜像&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;使用docker images命令查看当前系统中已下载的镜像信息，包含镜像名称（REPOSITORY）、标签（TAG）、镜像ID（IMAGE_ID）、创建时间（CREATED）、镜像大小（SIZE）等&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;docker&amp;nbsp;images
REPOSITORY&amp;nbsp;&amp;nbsp;&amp;nbsp;TAG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IMAGE&amp;nbsp;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CREATED&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SIZE
nginx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;latest&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0cf1d6af5ca7&amp;nbsp;&amp;nbsp;&amp;nbsp;17&amp;nbsp;hours&amp;nbsp;ago&amp;nbsp;&amp;nbsp;&amp;nbsp;161MB&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&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;2、搜索镜像&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;使用docker search命令可以在默认的镜像仓库中进行镜像搜索，搜索结果中没有带用户名信息的镜像通常是官方镜像&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;docker&amp;nbsp;search&amp;nbsp;nginx
#&amp;nbsp;INDEX代表了镜像来源于哪个仓库，默认是docker.io
#&amp;nbsp;NAMES：镜像名，如果名字没有用/分割代表是顶级仓库，通常是官方提供的镜像。带/的前面是用户名，后面才是镜像名，后续安装和启动都需要用到这个名字
#&amp;nbsp;DESCRIPTION：镜像的描述信息&amp;nbsp;
#&amp;nbsp;STARS：是获得的星数，也就是评分或热门程度
#&amp;nbsp;OFFICIAL：官方认证&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;br/&gt;&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;3、下载镜像&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;使用docker pull或docker image pull从指定的公网仓库中下载指定的Docker镜像，如果一个镜像存在多个版本，需要先到Docker Hub中确认每个版本的标签才能正确的下载&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#&amp;nbsp;registry默认为dockerhub；镜像名格式是&amp;lt;用户名&amp;gt;/&amp;lt;镜像名&amp;gt;，用户名不写的话默认使用官方镜像；镜像标签默认为latest
#&amp;nbsp;docker&amp;nbsp;pull&amp;nbsp;[registry地址[:端口]/]镜像名:标签&amp;nbsp;
docker&amp;nbsp;pull&amp;nbsp;nginx&amp;nbsp;&amp;nbsp;#从dockerhub中下载官方nginx镜像
docker&amp;nbsp;pull&amp;nbsp;bitname/wordpress&amp;nbsp;&amp;nbsp;#从dockerhub下载bitname所提供的wordpress镜像
docker&amp;nbsp;pull&amp;nbsp;quay.io/coreos/flannel:v1.1&amp;nbsp;&amp;nbsp;#从quay.io这个公网仓库的coreos名称空间中下载镜像flannel镜像，标签为v1.1&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;4、删除镜像&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;使用docker rmi或docker image rmi命令可以通过镜像名字或者ID来删除已下载的Docker镜像，ID可以只输入前缀，保持唯一即可&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;[root@centos1&amp;nbsp;~]#&amp;nbsp;docker&amp;nbsp;images
REPOSITORY&amp;nbsp;&amp;nbsp;&amp;nbsp;TAG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IMAGE&amp;nbsp;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CREATED&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SIZE
nginx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;latest&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0cf1d6af5ca7&amp;nbsp;&amp;nbsp;&amp;nbsp;18&amp;nbsp;hours&amp;nbsp;ago&amp;nbsp;&amp;nbsp;&amp;nbsp;161MB

[root@centos1&amp;nbsp;~]#&amp;nbsp;docker&amp;nbsp;rmi&amp;nbsp;0cf1d
Untagged:&amp;nbsp;nginx:latest
Untagged:&amp;nbsp;nginx@sha256:7150b3a39203cb5bee612ff4a9d18774f8c7caf6399d6e8985e97e28eb751c18
Deleted:&amp;nbsp;sha256:0cf1d6af5ca72e2ca196afdbdbe26d96f141bd3dc14d70210707cf89032ea217
Deleted:&amp;nbsp;sha256:61633ce66c62a864471c8b5378d9ffa3f81c766a960a3590211f3221c1ab4a59
Deleted:&amp;nbsp;sha256:41b747d79cc454963fb711facd1ece56107a1cea116f91f9f2226a8ad2f6aa7a
Deleted:&amp;nbsp;sha256:5517b4dad484d2bd81693cb01c59de8d731101babc8f4e25af94839b01cb8101
Deleted:&amp;nbsp;sha256:97ee1d7582029102147c004b04f96d5bca5bdd9142a91c2164f8d86069a430c3
Deleted:&amp;nbsp;sha256:995b22525898b5afc8b76051e02d5f4ffd7fde6aae7d2098545978c4768b73d2
Deleted:&amp;nbsp;sha256:d56d0c05af74d3308643ed2eb1c57c8a56ebe1922068720f393b30a285072b93
Deleted:&amp;nbsp;sha256:188c9b34dfbe022075d01fc4f5a305412909ef97de440783c15043e68e1b1913&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;5、查看镜像构建&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;使用docker history命令可以查看镜像构建过程&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;docker&amp;nbsp;histrosy&amp;nbsp;image_name&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;br/&gt;&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;6、镜像标签&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;使用docker tag命令实现为镜像打标签，通常在需要上传镜像到仓库中时就需要标记好镜像所属仓库地址和用户（也可以直接用 docker build -t 在创建镜像的时候就起好名字）&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;docker&amp;nbsp;tag&amp;nbsp;38baaxh26s6661&amp;nbsp;tanglu/centos:v1.1&amp;nbsp;&amp;nbsp;#给一个没有标签的镜像打上标签，这里没有写仓库地址，默认是dockerhub，完整格式是dockerhub/tanglu/centos:v1.1
docker&amp;nbsp;tag&amp;nbsp;tanglu/centos:v1.1&amp;nbsp;tanglu/centos:v1.2&amp;nbsp;&amp;nbsp;#修改标签
docker&amp;nbsp;tag&amp;nbsp;ngx-app&amp;nbsp;tanglu/ngx-app:1.0&amp;nbsp;&amp;nbsp;#将镜像ngx-app改名为tanglu/ngx-app:1.0：&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;二、Docker 容器管理&lt;/span&gt;&lt;/h2&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;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;docker run命令用于运行&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;镜像&lt;/span&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;docker run&amp;nbsp;-d：以后台方式运行容器，该选项需要配合-i、-t选项一起使用，使用该选项后exit退出容器也不影响里面运行的程序&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp;-it：这里包含了i和t两个选项，代表使用交互方式打开一个容器的终端以便执行命令&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp;-e：定义容器启动后的环境变量&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp;--dns：自定义容器的DNS地址&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp;--name：定义容器本身的名字&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp;--hostname：定义容器运行后的主机名，否则会使用容器的ID作为主机名&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp;--network：指定容器的网络，常用于容器跨主机通信&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp;--add-host：为容器的hosts文件增加记录&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp;--rename&amp;nbsp;：修改容器名字&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp;--rm：当容器退出后会自动被删除掉，常用于进行容器测试或者云主机环境，需要短期且大量的Docker虚拟机工作，工作完成后自动销毁&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;docker&amp;nbsp;run&amp;nbsp;-d&amp;nbsp;-it&amp;nbsp;--rm&amp;nbsp;--name&amp;nbsp;web01&amp;nbsp;nginx&amp;nbsp;&amp;nbsp;#后台启动了一个名为web01的nginx镜像
docker&amp;nbsp;stop&amp;nbsp;web01&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;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp;-p：将宿主机中指定的端口与Docker容器中的端口进行映射，可以实现将容器中的端口暴露到宿主机上的效果，方便宿主机访问。比如在容器中安装Nginx后需要把80端口映射到宿主机上，然后通过宿主机就可以访问到容器中的服务。使用netstat命令或者docker ps命令、docker port命令都可以查看到端口映射关系，使用iptables命令还可以看到自动创建好的转发规则&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#&amp;nbsp;不写宿主机端口则是一个随机端口
docker&amp;nbsp;run&amp;nbsp;--name&amp;nbsp;test_nginx&amp;nbsp;--rm&amp;nbsp;-p&amp;nbsp;80&amp;nbsp;nginx
#&amp;nbsp;指定宿主端口
docker&amp;nbsp;run&amp;nbsp;--name&amp;nbsp;test_nginx&amp;nbsp;--rm&amp;nbsp;-p&amp;nbsp;8080:80&amp;nbsp;nginx
#宿主机端口为8000，网络接口为ALL
docker&amp;nbsp;run&amp;nbsp;--name&amp;nbsp;test_nginx&amp;nbsp;--rm&amp;nbsp;-p&amp;nbsp;8000:80&amp;nbsp;-p&amp;nbsp;3306:3306&amp;nbsp;nginx
#指定了网络接口&amp;nbsp;&amp;nbsp;
docker&amp;nbsp;run&amp;nbsp;--name&amp;nbsp;test_nginx&amp;nbsp;--rm&amp;nbsp;-p&amp;nbsp;192.168.1.100:8000:80&amp;nbsp;nginx&amp;nbsp;
docker&amp;nbsp;port&amp;nbsp;nginx&amp;nbsp;#查看nginx容器的端口映射关系&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;span style=&quot;font-size: 16px;&quot;&gt;docker run&amp;nbsp; --restart：Docker容器的自启动，使用该选项后容器会跟随宿主机的启动而自我启动。该选项默认值是no，改为yes即可&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;docker&amp;nbsp;run&amp;nbsp;-itd&amp;nbsp;--restart=yes&amp;nbsp;&amp;nbsp;-name=centos_docker1&amp;nbsp;docker.io/ansible/centos7-ansible&amp;nbsp;/bin/bash&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&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;span style=&quot;font-size: 16px;&quot;&gt;docker run --link：会在hosts文件中为指定的容器做一个解析记录，常用于不同容器之间的互通，免去手动配置IP&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;docker&amp;nbsp;run&amp;nbsp;-it&amp;nbsp;--link&amp;nbsp;nginx:web&amp;nbsp;nginx:lastert&amp;nbsp;/bin/bash&amp;nbsp;&amp;nbsp;#nginx为另一个容器的名字，web为这个容器的别名，ping&amp;nbsp;web这个名字可以看到nginx这个容器的IP
#nginx容器和mysql、zabbix互通
docker&amp;nbsp;run&amp;nbsp;--name&amp;nbsp;zabbix-web-nginx-mysql&amp;nbsp;-t&amp;nbsp;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;DB_SERVER_HOST=&amp;quot;mysql-server&amp;quot;&amp;nbsp;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;MYSQL_DATABASE=&amp;quot;zabbix&amp;quot;&amp;nbsp;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;MYSQL_USER=&amp;quot;zabbix&amp;quot;&amp;nbsp;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;MYSQL_PASSWORD=&amp;quot;zabbix&amp;quot;&amp;nbsp;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;MYSQL_ROOT_PASSWORD=&amp;quot;zabbix&amp;quot;&amp;nbsp;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--link&amp;nbsp;mysql-server:mysql&amp;nbsp;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--link&amp;nbsp;zabbix-server-mysql:zabbix-server&amp;nbsp;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-p&amp;nbsp;8080:80&amp;nbsp;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-d&amp;nbsp;zabbix/zabbix-web-nginx-mysql:latest&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&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;2、查看容器运行情况&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#下面两条命令等效，用于查看系统中正在运行的容器&amp;nbsp;
docker&amp;nbsp;container&amp;nbsp;ls&amp;nbsp;-a&amp;nbsp;&amp;nbsp;#加-a可以看到已经停止的容器
docker&amp;nbsp;container&amp;nbsp;ps&amp;nbsp;-a&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;br/&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;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3、启动与停止&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;容器&lt;/span&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;启动容器：docker container start&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;停止容器：docker container&amp;nbsp;stop&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;重启容器：docker container restart&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;强制停止容器：docker container kill&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;docker&amp;nbsp;container&amp;nbsp;stop&amp;nbsp;nginx&lt;br/&gt;docker&amp;nbsp;container&amp;nbsp;restart&amp;nbsp;nginx&lt;br/&gt;docker&amp;nbsp;container&amp;nbsp;kill&amp;nbsp;nginx&lt;br/&gt;docker&amp;nbsp;container&amp;nbsp;stop&amp;nbsp;`docker&amp;nbsp;container&amp;nbsp;ps&amp;nbsp;-qa`&amp;nbsp;&amp;nbsp;#批量停止容器&lt;br/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br/&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;4、暂停容器&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;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;docker&amp;nbsp;pause&amp;nbsp;centos:v1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#暂停指定的容器
docker&amp;nbsp;unpause&amp;nbsp;centos:v1&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;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;5、查看容器元信息&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;docker container port命令可以查看容器端口的映射信息；docker container inspect命令可以查看容器更详细的底层信息，如容器运行后默认执行什么命令（cmd）、每个容器的IP信息（这就是为什么能通过宿主机访问容器中服务的原因，在安装了Docker后网卡配置里多了一个docker0的网卡，之后建立的容器都是跟该网卡在一个网段内，默认是172.段）&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;docker&amp;nbsp;container&amp;nbsp;inspect&amp;nbsp;-f&amp;nbsp;{{.NetworkSettings.IPAddress}}&amp;nbsp;nginx&amp;nbsp;&amp;nbsp;#获取nginx容器下的IP信息,可以精确到小类
docker&amp;nbsp;port&amp;nbsp;test_nginx&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;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&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;6、登录容器&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;使用docker container attach、docker container exec两个命令都可以进入运行中的容器，&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;attach是直接进入容器正在运行的命令中，不会启动新的进程。如果容器是在执行一个无限循环进行输出，那attach进入后则会看到这些输出信息。而&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;exec是开启一个新的终端进入容器，之后可以对容器进行各种操作，并且执行exit退出容器时不会让容器停止运行&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;br/&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;7、退出容器&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;容器运行后如果要退出的话，不要使用exit命令或者Ctrl+C来退出终端，这样容器状态会成为exitd状态，里面的服务也就无法正常使用了。需要使用ctrl+p+q这样的组合键进行退出，这样可以保持容器状态是UP。如果容器已经是exitd状态，通过docker start命令启动来恢复运行&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;br/&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;8、删除容器&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;如果要删除已经停止的容器则使用docker rm或者docker container rm命令，跟上镜像名称或者ID都可以删除。如容器没有停止的话是无法直接删除的，需要加上-f选项或者先停止掉容器，使用命令是docker stop或者docker kill，然后跟上ID或者镜像名称，停止后再执行删除就可以了&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;br/&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;9、宿主与容器的文件复制&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;使用docker cp命令可以将文件进行互相复制&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;docker&amp;nbsp;cp&amp;nbsp;index.html&amp;nbsp;770fbbsagi:/usr/local/nginx/html/&amp;nbsp;&amp;nbsp;#复制本地文件index.html到容器/usr/local/nginx/html/中&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;10、查看容器运行日志&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;使用docker logs -f可以查看容器的日志，类似于tailf命令&lt;/span&gt;&lt;/p&gt;</description><pubDate>Fri, 27 Mar 2026 10:44:54 +0800</pubDate></item><item><title>Docker运维教程（1）Docker的基本概念与安装</title><link>https://ywpie.com/post/76.html</link><description>&lt;h2&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;一、Docker简介&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;Docker本身并不是容器，而是对容器进行了一种封装，是容器技术的一种简化实现方式。容器技术&lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: &amp;quot;&amp;quot;; background-color: #FFFF00;&quot;&gt;可以快速将不同版本的应用或者不同应用&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;; background-color: #FFFF00;&quot;&gt;打包到容器中实现服务快速部署，减少环境不一致带来的问题，而且每个容器之间相互隔离互不影响，并且可以快速移植到其他环境中。&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; background-color: #FFFFFF;&quot;&gt;通过Docker的Logo也可以看出，它就像是一个集装箱，如果某个装水果的集装箱出了问题，也不会影响到装酒水的集装箱&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;; font-size: 16px;&quot;&gt;&lt;strong&gt;二、Docker名词解释&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;; font-size: 16px;&quot;&gt;Docker底层是Linux内核所自带的LXC技术，主要包含以下核心：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF; font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;· CGROUP&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;负责对&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;Docker各&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;background-color:#FFE500;&amp;quot;;&quot;&gt;容器之间资源占用进行分配管理。&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;相比传统虚拟化来说Docker容器会共享宿主机的内核资源，而且少了系统层面的开销，不需要为每个容器去虚拟化一个完整的系统，而且即使是下载一个Centos系统镜像也才200M（底层会使用宿主机的内核，也因此容器的内核是无法升级的，必须和宿主机一致）&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; background-color: #FFFFFF;&quot;&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF; font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;·&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;Namespace&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF; font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;负责容器之间资源隔离的实现。不同的Namespace隔离的资源不同。&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;UTS&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;用于隔离主机名和域名，要求系统内核版本2.6；&lt;/span&gt;&lt;/span&gt;&lt;strong style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF; font-family: &amp;quot;&amp;quot;;&quot;&gt;IPC&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;background-color: #FFFFFF; font-size: 16px; font-family: &amp;quot;&amp;quot;;&quot;&gt;用于隔离消息队列、共享内存、信号量，要求系统内核版本2.6；&lt;/span&gt;&lt;strong style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF; font-family: &amp;quot;&amp;quot;;&quot;&gt;PID&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;background-color: #FFFFFF; font-size: 16px; font-family: &amp;quot;&amp;quot;;&quot;&gt;用于隔离进程编号，要求系统内核版本2.6；&lt;/span&gt;&lt;strong style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF; font-family: &amp;quot;&amp;quot;;&quot;&gt;NETWORK&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;background-color: #FFFFFF; font-size: 16px; font-family: &amp;quot;&amp;quot;;&quot;&gt;用于隔离网络设备和端口等，要求系统内核版本2.6；&lt;/span&gt;&lt;strong style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF; font-family: &amp;quot;&amp;quot;;&quot;&gt;MOUNT&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;background-color: #FFFFFF; font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;用于&lt;/span&gt;&lt;span style=&quot;background-color: #FFFFFF; font-size: 16px; font-family: &amp;quot;&amp;quot;;&quot;&gt;隔离文件系统与挂载点，要求系统内核版本2.4；&lt;/span&gt;&lt;strong style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;USER&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 16px; font-family: &amp;quot;&amp;quot;;&quot;&gt;用于隔离用户和用户组，&lt;span style=&quot;background-color: #FFFF00;&quot;&gt;要求系统内核版本3.8&lt;/span&gt;，&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;这也是为什么要在Centos 7使用Docker的原因。&lt;/span&gt;需要注意的是登陆容器后看到的root通常不是真正的root，比如要用那个用户去cat /etc/passwd，那一样会报出权限错误。&lt;/span&gt;&lt;span style=&quot;background-color: #FFFFFF; font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;UTS、NET、IPC这三个名称空间通常是共享给各容器使用，这样可以更方便的实现多容器使用同端口的需求。否则需要DNAT、SNAT两次网络转换才可以&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF; font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; background-color: #FFFFFF;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;·&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;Docker镜像&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;可以理解为模板文件，也可以想象成平时装系统用的.iso文件&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; background-color: #FFFFFF;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;·&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;Docker容器&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;镜像运行之后成为docker容器，就像程序运行后变成进程&lt;br/&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;background-color:#FFE500;&amp;quot;;&quot;&gt;&lt;strong style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; background-color: #FFFFFF;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;background-color:#FFE500;&amp;quot;;&quot;&gt;·&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;Docker仓库&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;（registry）&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;镜像仓库，就像github一样可以存放很多做好的镜像。比如需要LAMP环境可以去公有仓库里看看有没有合适的镜像，有的话直接下载就可以使用，无需配置。也可以自建仓库，存放适合内部使用的镜像&lt;/span&gt;。&lt;span style=&quot;font-family: &amp;quot;font-size:16px;background-color:#FFFFFF;&amp;quot;;&quot;&gt;Docker采用分层构建机制，最底层为bootfs，上层为rootfs。在bootfs中包含了bootloader和kernel，它的作用就是用于引导和启动容器，在容器启动完成后就会卸掉bootfs节约内存，rootfs则是容器的根文件系统。而且不同的镜像如果使用到了相同的内容，只会存一份，节约了磁盘空间。Aufs是Docker最初使用的容器文件系统，而现在最主流的则是overlay2（已经从3.18版本开始被Linux内核合并）、devicemapper（CentOS7早期所使用）&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;strong style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;三、安装Docker&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;1、安装新版本之前清理旧版本及其依赖组件&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;yum&amp;nbsp;remove&amp;nbsp;docker&amp;nbsp;&amp;nbsp;docker-client&amp;nbsp;docker-client-latest&amp;nbsp;docker-common&amp;nbsp;docker-latest&amp;nbsp;docker-latest-logrotate&amp;nbsp;docker-logrotate&amp;nbsp;docker-engine&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;2、配置Docker的官方&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; background-color: #FFFFFF;&quot;&gt;YUM源&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;text-wrap-style: initial;&quot;&gt;官方仓库可以通过&lt;/span&gt;&lt;span style=&quot;text-wrap-style: initial; font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;安装手册（https://docs.docker.com/engine/install/）查看，此外还有很多像阿里云、清华大学&lt;/span&gt;第三方仓库也可以安装Docker。&lt;/span&gt;Docker从V1.13之后分为了CE和EE两个分支，其中docker-ce为社区免费版，docker-ee为商业收费版&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#安装yum-utils包后可以通过yum-config-manager来快捷设置仓库地址
yum&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;yum-utils&amp;nbsp;&amp;nbsp;

#配置仓库地址
yum-config-manager&amp;nbsp;--add-repo&amp;nbsp;https://download.docker.com/linux/centos/docker-ce.repo

#安装docker-ce
yum&amp;nbsp;install&amp;nbsp;docker-ce&amp;nbsp;docker-ce-cli&amp;nbsp;containerd.io&amp;nbsp;docker-buildx-plugin&amp;nbsp;docker-compose-plugin&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;3、启动Docker，&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px; text-wrap-mode: wrap;&quot;&gt;如果使用过程中提示&amp;quot;Is the docker daemon running on this host&amp;quot;都说明是服务没有启动&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;docker&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;4、通过docker version和docker info命令可以查看版本和详细信息。如启动了多少个容器、默认的仓库地址、下载了多少镜像、文件系统等&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;[root@centos1&amp;nbsp;~]#&amp;nbsp;docker&amp;nbsp;version
Client:&amp;nbsp;Docker&amp;nbsp;Engine&amp;nbsp;-&amp;nbsp;Community
&amp;nbsp;Version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;26.1.4
&amp;nbsp;API&amp;nbsp;version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.45
&amp;nbsp;Go&amp;nbsp;version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;go1.21.11
&amp;nbsp;Git&amp;nbsp;commit:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5650f9b
&amp;nbsp;Built:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Wed&amp;nbsp;Jun&amp;nbsp;&amp;nbsp;5&amp;nbsp;11:32:04&amp;nbsp;2024
&amp;nbsp;OS/Arch:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;linux/amd64
&amp;nbsp;Context:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default

Server:&amp;nbsp;Docker&amp;nbsp;Engine&amp;nbsp;-&amp;nbsp;Community
&amp;nbsp;Engine:
&amp;nbsp;&amp;nbsp;Version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;26.1.4
&amp;nbsp;&amp;nbsp;API&amp;nbsp;version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.45&amp;nbsp;(minimum&amp;nbsp;version&amp;nbsp;1.24)
&amp;nbsp;&amp;nbsp;Go&amp;nbsp;version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;go1.21.11
&amp;nbsp;&amp;nbsp;Git&amp;nbsp;commit:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;de5c9cf
&amp;nbsp;&amp;nbsp;Built:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Wed&amp;nbsp;Jun&amp;nbsp;&amp;nbsp;5&amp;nbsp;11:31:02&amp;nbsp;2024
&amp;nbsp;&amp;nbsp;OS/Arch:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;linux/amd64
&amp;nbsp;&amp;nbsp;Experimental:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;false
&amp;nbsp;containerd:
&amp;nbsp;&amp;nbsp;Version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.6.33
&amp;nbsp;&amp;nbsp;GitCommit:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d2d58213f83a351ca8f528a95fbd145f5654e957
&amp;nbsp;runc:
&amp;nbsp;&amp;nbsp;Version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.1.12
&amp;nbsp;&amp;nbsp;GitCommit:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v1.1.12-0-g51d5e94
&amp;nbsp;docker-init:
&amp;nbsp;&amp;nbsp;Version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.19.0
&amp;nbsp;&amp;nbsp;GitCommit:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;de40ad0&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;5、由于安全问题，非root用户默认是无法执行docker相关命令的，可以通过修改用户组的方式进行授权&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;groupadd&amp;nbsp;docker
usermod&amp;nbsp;-G&amp;nbsp;docker&amp;nbsp;tanglu&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;四、Docker镜像仓库加速&lt;/span&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&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;Dcoker镜像仓库的作用和操作系统YUM仓库类似，只不过里面存放的是各种镜像而不是系统软件。如系统镜像、Redis镜像、MySQL镜像等。由于Docker默认使用的镜像仓库是国外的docker hub，在拉取镜像的时候会存在过慢的问题，所以建议配置镜像加速服务。配置方法也很简单，只需要在D&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;ocker服务端配置文件/etc/docker/daemon.json（该文件默认不存在，需自行创建）并自定义仓库地址即可，仓库地址可以通过https://github.com/DaoCloud/public-image-mirror进行查找&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;cat&amp;nbsp;/etc/docker/daemon.json
{
&amp;nbsp;&amp;nbsp;&amp;quot;registry-mirrors&amp;quot;:&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;https://docker.m.daocloud.io&amp;quot;
&amp;nbsp;&amp;nbsp;]
}


systemctl&amp;nbsp;daemon-reload
systemctl&amp;nbsp;restart&amp;nbsp;docker
docker&amp;nbsp;info&amp;nbsp;&amp;nbsp;#关注Registry&amp;nbsp;Mirrors输出是否生效&lt;/pre&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;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;&amp;quot;; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Wed, 25 Mar 2026 17:37:18 +0800</pubDate></item><item><title>【系统运维】Linux软件防火墙firewalld/iptable配置教程</title><link>https://ywpie.com/post/75.html</link><description>&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、iptables与firewalld区别&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;Linux系统通过内核&lt;span style=&quot;text-wrap-style: initial;&quot;&gt;netfilter模块对数据包进行过滤，以此实现软件防火墙功能&lt;/span&gt;。在 CentOS7 前一般使用iptables作为管理工具，从&lt;span style=&quot;text-wrap-style: initial;&quot;&gt;CentOS7 之后则更多使用firewalld作为管理工具。两者本质上都是&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;netfilter模块的管理工具，但是&amp;nbsp;&lt;/span&gt;&lt;/span&gt;firewalld 在使用配置上比 iptables 更为易懂，并且提供了区域（zone）、服务等更高级的概念，更适合需要动态调整防火墙策略的环境&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;h2 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&gt;二、&lt;strong style=&quot;text-wrap-style: initial;&quot;&gt;iptables&amp;nbsp;&lt;/strong&gt;结构&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;iptables由表和链构成，在表中去定义链的规则&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/02/202602271772176330172114.png&quot; title=&quot;iptable1.png&quot; alt=&quot;iptable1.png&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; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;strong&gt;· f&lt;/strong&gt;&lt;strong&gt;ilter表&lt;/strong&gt;&lt;strong&gt;(默认表)&lt;/strong&gt;：最常用的表，用于过滤数据包的进出，其中又包含了3个规则链：&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;background-color: #FFE500;&quot;&gt;INPUT&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;OUTPUT：负责过滤主机发出的数据包&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;FORWARD：负责转发该主机的数据包到其他目标地址&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&gt;&lt;strong style=&quot;font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/strong&gt;nat表&lt;/strong&gt;&lt;strong&gt;（网络地址转换）&lt;/strong&gt;：多用于内外网地址转换，包含了3个链：&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;background-color: #FFE500;&quot;&gt;PREROUTING&lt;/span&gt;：实现DNAT功能，改变数据包的目的地址，多用于局域网接收公网数据时将目标的地址转换为局域网的一个地址，&lt;span style=&quot;background-color: #FFE500;&quot;&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;POSTROUTING：实现SNAT功能，改变数据包的源地址，多用于局域网向公网发送数据时将地址转换为公网地址&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;OUTPUT：同filter表OUTPUT&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&gt;&lt;strong style=&quot;font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/strong&gt;mangle表（不常用）：&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;strong&gt;&lt;strong style=&quot;font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px; text-wrap-mode: wrap;&quot;&gt;·&amp;nbsp;&lt;/strong&gt;raw表&lt;strong style=&quot;text-wrap-style: initial;&quot;&gt;（不常用）&lt;/strong&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; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;strong&gt;&lt;br/&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; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;strong&gt;三、iptables 用法介绍&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#&amp;nbsp;表名不写的话默认为filter表
#&amp;nbsp;iptables&amp;nbsp;[-t&amp;nbsp;表名]&amp;nbsp;选项&amp;nbsp;[链名]&amp;nbsp;条件匹配&amp;nbsp;-j&amp;nbsp;执行动作&amp;nbsp;&amp;nbsp;
#&amp;nbsp;为filter表的INPUT链增加规则，当目标端口为80并且为tcp协议则放行
iptables&amp;nbsp;-t&amp;nbsp;filter&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;80&amp;nbsp;-j&amp;nbsp;ACCEPT&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;1、Firewalld（iptables）常用选项&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;line-height: 24px; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;strong&gt;-A |&lt;/strong&gt;&lt;strong&gt;-D |&lt;/strong&gt;&lt;strong&gt;-I &amp;nbsp;[CHAINS]：&lt;/strong&gt;给指定的链增加或者删除或者插入一个规则&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;80&amp;nbsp;-j&amp;nbsp;DROP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#增加一条规则用于测试&amp;nbsp;&amp;nbsp;
iptables&amp;nbsp;-L&amp;nbsp;--line-numbers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#加上--line-numbers参数可以显示规则的编号，可以看到之前设置的编号为1
iptables&amp;nbsp;-D&amp;nbsp;INPUT&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#删除编号为1的规则&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;line-height: 24px; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&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;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;strong style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;-L：&lt;/strong&gt;显示所有链下的所有规则，&lt;span style=&quot;background-color: #FFE500;&quot;&gt;默认是filter表，可以用-t选项指定其他表&lt;/span&gt;。还可以跟上-n选项，对主机或端口信息不做反向解析；-v显示更详细信息；--line-numbers显示行号&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-t&amp;nbsp;filter&amp;nbsp;-L&amp;nbsp;-n&amp;nbsp;&amp;nbsp;&amp;nbsp;
Chain&amp;nbsp;INPUT&amp;nbsp;(policy&amp;nbsp;ACCEPT)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#INPUT链下的规则
target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prot&amp;nbsp;opt&amp;nbsp;source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;destination&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;

Chain&amp;nbsp;FORWARD&amp;nbsp;(policy&amp;nbsp;ACCEPT)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#FORWARD链下的规则
target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prot&amp;nbsp;opt&amp;nbsp;source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;destination&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;

Chain&amp;nbsp;OUTPUT&amp;nbsp;(policy&amp;nbsp;ACCEPT)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#OUTPUT链下的规则
target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prot&amp;nbsp;opt&amp;nbsp;source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;destination&lt;/pre&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&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;&lt;strong&gt;-N&lt;/strong&gt;：创建自定义链，针对不同的场景创造不同的链，方便管理&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;80&amp;nbsp;-j&amp;nbsp;IN_WEB&amp;nbsp;&amp;nbsp;#将80请求转发给自定义链IN_WEB
iptables&amp;nbsp;-N&amp;nbsp;IN_WEB&amp;nbsp;&amp;nbsp;#创建自定义链
iptables&amp;nbsp;-I&amp;nbsp;IN_WEB&amp;nbsp;-s&amp;nbsp;192.168.1.0/24&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;#定义自定义链的具体规则&lt;/pre&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&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;-X：清空用户自定义链&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;-Z：计数器归零&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;-F：清空所有规则或者指定规则&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-F&amp;nbsp;&amp;nbsp;#清空所有规则
iptables&amp;nbsp;-F&amp;nbsp;INPUT&amp;nbsp;&amp;nbsp;#清空filter表INPUT链中的规则
iptables&amp;nbsp;-t&amp;nbsp;nat&amp;nbsp;-F&amp;nbsp;PREROUTING&amp;nbsp;&amp;nbsp;#清空nat表PREROUTING中的规则&lt;/pre&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&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;&lt;strong style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;-j &amp;nbsp;ACCEPT | DROP | REJECT | DNAT | SNAT | MASQUERADE | MARK&lt;/strong&gt;：指定防火墙的行为，ACCEPT是允许；DROP是丢弃（放弃响应对方请求且不作答复）；REJECT是拒绝（会明确给对方一个消息说自己拒绝请求）;DNAT为目标地址转换；SNAT为源地址转换；MASQUERADE是地址伪装；MARK防火墙标记，可用于LVS持久连接&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;font-size:16px;&amp;quot;;&quot;&gt;-p（小写）：&lt;/strong&gt;指定协议，如tcp、udp、icmp、all&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&gt;-i：&lt;/strong&gt;指定网络设备，如eth0&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&gt;-&lt;/strong&gt;&lt;strong&gt;P&lt;/strong&gt;（大写）：指定默认的规则。在生产环境中可以把默认规则设置为拒绝，然后对需要放行的服务设置允许规则，不过做这个设置时要&lt;span style=&quot;background-color: #FFE500;&quot;&gt;注意把22端口放行&lt;/span&gt;，不然自己就无法远程上服务器了&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-P&amp;nbsp;INPUT&amp;nbsp;DROP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#把INPUT链的默认规则改为DROP&lt;/pre&gt;&lt;p&gt;&lt;br/&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;-s：&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;-s&amp;nbsp;192.168.0.1&amp;nbsp;&amp;nbsp;#匹配来自192.168.0.1的数据包
-s&amp;nbsp;192.168.1.0/24&amp;nbsp;&amp;nbsp;#匹配来自192.168.1.0/24的数据包&lt;/pre&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;font-size:16px;&amp;quot;;&quot;&gt;&lt;br/&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; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;strong style=&quot;font-family: &amp;quot;font-size:16px;&amp;quot;;&quot;&gt;--dport&lt;/strong&gt;：指定目标端口，需配合-p选项。通常是对访问的端口做限制，可以指定连续的端口&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;80&amp;nbsp;-j&amp;nbsp;DROP&amp;nbsp;&amp;nbsp;
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;10000:10010&amp;nbsp;-j&amp;nbsp;DROP&lt;/pre&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&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;&lt;strong&gt;--sport&lt;/strong&gt;：指定源端口，需配合-p选项&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;--dport&amp;nbsp;80
--dport&amp;nbsp;1000:2000
--dport&amp;nbsp;:3000&lt;/pre&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&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;line-height: 24px; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;strong&gt;· -m multiport：&lt;/strong&gt;可以定义多个端口或者范围，最多指定15个&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;[!] --sports port[,port|,port:port]...：指定多个源端口&lt;br/&gt;[!] --dports port[,port|,port:port]...：指定多个目标端口&lt;br/&gt;[!] --ports port[,port|,port:port]...：同时指定源端口和目标端口&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-t&amp;nbsp;filter&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;192.168.100.10&amp;nbsp;-d&amp;nbsp;192.168.100.20&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;-m&amp;nbsp;multiport&amp;nbsp;--dports&amp;nbsp;22,80&amp;nbsp;-j&amp;nbsp;ACCEPT&lt;/pre&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&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;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;strong&gt;· -m iprange&lt;/strong&gt;：指明连续的IP地址范围&lt;/span&gt;&amp;nbsp;&lt;br/&gt;[!] --src-range from[-to]：源IP地址&lt;br/&gt;[!] --dst-range from[-to]：目标IP地址&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;80&amp;nbsp;-m&amp;nbsp;iprange&amp;nbsp;--src-range&amp;nbsp;192.168.100.50-192.168.100.60&amp;nbsp;-j&amp;nbsp;DROP&amp;nbsp;#拒绝192.168.100.50-60这几个IP对80端口的访问&lt;/pre&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&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;&lt;strong style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;· -m connlimit&lt;/strong&gt;：根据客户端IP并发连接数做限制&lt;br/&gt;--connlimit-upto n：连接的数量小于等于n时匹配&lt;br/&gt;--connlimit-above n：连接的数量大于n时匹配&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;brush: bash;auto-links: false;&quot;&gt;iptables&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;80&amp;nbsp;-m&amp;nbsp;connlimit&amp;nbsp;--connlimit-above&amp;nbsp;10&amp;nbsp;-j&amp;nbsp;DROP&amp;nbsp;#对80端口连接数大于10个就拒绝&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;br/&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;;&quot;&gt;· -m limit&lt;/strong&gt;：基于速率做限制&lt;br/&gt;--limit N[/second|/minute|/hour|/day]：平均速率，比如每分钟允许N个请求&lt;br/&gt;--limit-burst&amp;nbsp;&lt;em style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;number&lt;/em&gt;：初始放行数量&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;brush: bash;auto-links: false;&quot;&gt;iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-d&amp;nbsp;192.168.100.10&amp;nbsp;-p&amp;nbsp;icmp&amp;nbsp;-m&amp;nbsp;limit&amp;nbsp;--limit&amp;nbsp;3/minute&amp;nbsp;&amp;nbsp;#每个客户端每分钟只能有3次请求&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&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;&lt;strong&gt;· -m string&lt;/strong&gt;：根据字符串进行匹配&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;80&amp;nbsp;-m&amp;nbsp;string&amp;nbsp;--algo&amp;nbsp;bm&amp;nbsp;--string&amp;nbsp;&amp;#39;www.baidu.com&amp;#39;&amp;nbsp;-j&amp;nbsp;DROP&amp;nbsp;#不允许访问baidu.com，--alog&amp;nbsp;bm是一种算法&lt;/pre&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&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;&lt;strong&gt;· -m time&lt;/strong&gt;：根据时间进行匹配&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;-m&amp;nbsp;time&amp;nbsp;--datestart&amp;nbsp;2019-05-01&amp;nbsp;--datestop&amp;nbsp;2019-05-04&amp;nbsp;&amp;nbsp;#匹配五一节
iptables&amp;nbsp;-I&amp;nbsp;OUTPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;80&amp;nbsp;-m&amp;nbsp;time&amp;nbsp;--timestart&amp;nbsp;12:30&amp;nbsp;--timestop&amp;nbsp;13:30&amp;nbsp;--kerneltz&amp;nbsp;2019-05-04&amp;nbsp;&amp;nbsp;-j&amp;nbsp;DROP&amp;nbsp;#午休拒绝上网&lt;/pre&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&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;&lt;strong style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;· -m state&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;[!] --state&amp;nbsp;&lt;em style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;state&lt;/em&gt;：&lt;em style=&quot;font-family: &amp;quot;&amp;quot;;&quot;&gt;state&lt;/em&gt;包含以下几种状态&lt;br/&gt;NEW：新请求&lt;br/&gt;ESTABLISHED：NEW状态后所建立好的连接&lt;br/&gt;RELATED：相关联的连接，如FTP服务有2个端口且相关&lt;br/&gt;INVALID：无效连接&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-d&amp;nbsp;192.168.100.10&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;-m&amp;nbsp;multiport&amp;nbsp;--dports&amp;nbsp;22,80&amp;nbsp;-m&amp;nbsp;state&amp;nbsp;--state&amp;nbsp;NEW,ESTABLISHED&amp;nbsp;-j&amp;nbsp;ACCEPT&lt;/pre&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&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3 dir=&quot;ltr&quot; 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&gt;2、iptables 示例&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; 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&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;22&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;&amp;nbsp;#放行ssh服务
iptables&amp;nbsp;-A&amp;nbsp;OUTPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--sport&amp;nbsp;22&amp;nbsp;-j&amp;nbsp;ACCEPT

iptables&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;-m&amp;nbsp;multiport&amp;nbsp;--dport&amp;nbsp;443,80&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;&amp;nbsp;#放行443,80端口
iptables&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;-dport&amp;nbsp;3306&amp;nbsp;-m&amp;nbsp;iprange&amp;nbsp;--src-range&amp;nbsp;192.168.1.201-192.168.1.210&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;&amp;nbsp;#允许特定IP访问3306端口
iptables&amp;nbsp;-A&amp;nbsp;OUTPUT&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;-dport&amp;nbsp;3306&amp;nbsp;-m&amp;nbsp;iprange&amp;nbsp;--dst-range&amp;nbsp;192.168.1.201-192.168.1.210&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;

iptables&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-i&amp;nbsp;lo&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;&amp;nbsp;#本地连接都允许
iptables&amp;nbsp;-A&amp;nbsp;OUTPUT&amp;nbsp;-i&amp;nbsp;lo&amp;nbsp;-j&amp;nbsp;ACCEPT

iptables&amp;nbsp;-A&amp;nbsp;OUTPUT&amp;nbsp;-m&amp;nbsp;state&amp;nbsp;--state&amp;nbsp;NEW,ESTABLISHED,RELATED&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;#根据连接状态放行
iptables&amp;nbsp;-A&amp;nbsp;INPUT&amp;nbsp;-m&amp;nbsp;state&amp;nbsp;--state&amp;nbsp;ESTABLISHED,RELATED&amp;nbsp;-j&amp;nbsp;ACCEPT

iptables&amp;nbsp;-P&amp;nbsp;INPUT&amp;nbsp;DROP
iptables&amp;nbsp;-P&amp;nbsp;OUTPUT&amp;nbsp;DROP&lt;/pre&gt;&lt;p dir=&quot;ltr&quot; 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&gt;&lt;br/&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; 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;text-wrap-style: initial;&quot;&gt;·&amp;nbsp;&lt;/span&gt;局域网共享一个公网地址实现上网。将一台拥有内网、外网双网卡的服务器作为路由器，配置iptables规则，局域网内其他机器将网关地址指向到该路由器内网网卡地址即可&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;iptables&amp;nbsp;-t&amp;nbsp;nat&amp;nbsp;POSTROUTING&amp;nbsp;-s&amp;nbsp;192.169.1.100&amp;nbsp;-o&amp;nbsp;eth0&amp;nbsp;-j&amp;nbsp;SNAT&amp;nbsp;-to-source&amp;nbsp;222.201.178.10&lt;/pre&gt;&lt;p dir=&quot;ltr&quot; 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&gt;&lt;br/&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; 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;text-wrap-style: initial;&quot;&gt;·&amp;nbsp;&lt;/span&gt;跳板机功能&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#&amp;nbsp;打开系统IP转发功能
echo&amp;nbsp;1&amp;nbsp;&amp;gt;&amp;nbsp;/proc/sys/net/ipv4/ip_forward&amp;nbsp;#临时开启
#永久生效
vi&amp;nbsp;/etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl&amp;nbsp;-p

#请求本机21022端口将跳转到192.168.17.47:3306端口
iptables&amp;nbsp;-t&amp;nbsp;nat&amp;nbsp;-A&amp;nbsp;PREROUTING&amp;nbsp;-i&amp;nbsp;eth0&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;21022&amp;nbsp;-j&amp;nbsp;DNAT&amp;nbsp;--to-destination&amp;nbsp;192.168.17.47:3306

#如果客户端172.20.1.132访问172.20.7.101:3306端口，将转发到172.20.7.100:3311端口，该配置是在172.20.7.101完成
iptables&amp;nbsp;-t&amp;nbsp;nat&amp;nbsp;-A&amp;nbsp;PREROUTING&amp;nbsp;-d&amp;nbsp;172.20.7.101&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;-s&amp;nbsp;172.20.1.132&amp;nbsp;--dport&amp;nbsp;3312&amp;nbsp;-j&amp;nbsp;DNAT&amp;nbsp;--to-destination&amp;nbsp;172.20.7.100:3311
iptables&amp;nbsp;-t&amp;nbsp;nat&amp;nbsp;-A&amp;nbsp;POSTROUTING&amp;nbsp;-d&amp;nbsp;172.20.7.100&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;3311&amp;nbsp;-j&amp;nbsp;SNAT&amp;nbsp;--to-source&amp;nbsp;172.20.7.101&lt;/pre&gt;&lt;p dir=&quot;ltr&quot; 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&gt;&lt;br/&gt;&lt;/p&gt;&lt;blockquote style=&quot;text-wrap-mode: wrap; border-width: medium; border-style: none; border-color: initial; padding: 0px; margin: 0px 0px 0px 40px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h3 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&gt;3、iptables 规则的保存与恢复&lt;/strong&gt;&lt;/span&gt;&lt;/h3&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&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;iptables 的规则默认存储在内存中，重启后会丢失，可以通过命令进行规则持久化&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#保存当前配置的规则到指定文件
iptables-save&amp;nbsp;&amp;gt;&amp;nbsp;filename&amp;nbsp;&amp;nbsp;

#从配置文件还原规则
iptabels-restore&amp;nbsp;&amp;lt;&amp;nbsp;filename&lt;/pre&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&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong style=&quot;font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px; text-wrap-style: initial;&quot;&gt;四、firewalld 用法介绍&lt;/strong&gt;&lt;/h2&gt;&lt;h3 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong style=&quot;font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px; text-wrap-style: initial;&quot;&gt;1、服务管理&lt;/strong&gt;&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;systemctl&amp;nbsp;status&amp;nbsp;firewalld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;检查状态
systemctl&amp;nbsp;start&amp;nbsp;firewalld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;启动服务
systemctl&amp;nbsp;stop&amp;nbsp;firewalld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;停止服务
systemctl&amp;nbsp;enable&amp;nbsp;firewalld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;开机自启
firewall-cmd&amp;nbsp;--reload&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;重新加载配置&lt;/pre&gt;&lt;h3 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong style=&quot;font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; font-size: 16px; text-wrap-style: initial;&quot;&gt;2、firewalld 区域（&lt;strong style=&quot;text-wrap-style: initial;&quot;&gt;zone&lt;/strong&gt;）配置&lt;/strong&gt;&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;firewall-cmd&amp;nbsp;get-zones&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#查看所有zone
firewall-cmd&amp;nbsp;--get-default-zone&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#查看默认区域
firewall-cmd&amp;nbsp;--list-all&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#查看默认zone的规则
firewall-cmd&amp;nbsp;--list-all&amp;nbsp;--zone=public&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#查看指定zone的规则
firewall-cmd&amp;nbsp;&amp;nbsp;--set-default-zone=test_zone&amp;nbsp;&amp;nbsp;#指定默认区域&lt;/pre&gt;&lt;h3 style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong&gt;3、&lt;strong style=&quot;text-wrap-style: initial; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;firewalld&amp;nbsp;&lt;/strong&gt;规则管理&lt;strong style=&quot;font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-style: initial;&quot;&gt;&lt;/strong&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;firewalld中可分为service（针对服务）、port（针对端口）、rich rule（富规则）三种配置方式，添加的规则都需要reload才会生效并能查看，permanent表示永久生效&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#针对服务
firewall-cmd&amp;nbsp;--zone=public&amp;nbsp;--add-service=http&amp;nbsp;--permanent&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;添加&amp;nbsp;HTTP&amp;nbsp;服务
firewall-cmd&amp;nbsp;--zone=public&amp;nbsp;--remove-service=http&amp;nbsp;--permanent&amp;nbsp;#&amp;nbsp;移除&amp;nbsp;HTTP&amp;nbsp;服务

#&amp;nbsp;端口管理
firewall-cmd&amp;nbsp;--zone=public&amp;nbsp;--add-port=8080/tcp&amp;nbsp;--permanent&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;添加单个端口
firewall-cmd&amp;nbsp;--zone=public&amp;nbsp;--remove-port=8080/tcp&amp;nbsp;--permanent&amp;nbsp;#&amp;nbsp;移除端口

#&amp;nbsp;允许/拒绝特定&amp;nbsp;IP
firewall-cmd&amp;nbsp;--zone=public&amp;nbsp;--add-rich-rule=&amp;#39;rule&amp;nbsp;family=&amp;quot;ipv4&amp;quot;&amp;nbsp;source&amp;nbsp;address=&amp;quot;192.168.1.10&amp;quot;&amp;nbsp;accept&amp;#39;&amp;nbsp;--permanent
firewall-cmd&amp;nbsp;--zone=public&amp;nbsp;--add-rich-rule=&amp;#39;rule&amp;nbsp;family=&amp;quot;ipv4&amp;quot;&amp;nbsp;source&amp;nbsp;address=&amp;quot;192.168.1.20&amp;quot;&amp;nbsp;reject&amp;#39;&amp;nbsp;--permanent

#&amp;nbsp;端口转发
firewall-cmd&amp;nbsp;--zone=public&amp;nbsp;--add-forward-port=port=80:proto=tcp:toport=8080&amp;nbsp;--permanent

#&amp;nbsp;修改默认区域
firewall-cmd&amp;nbsp;--set-default-zone=home&lt;/pre&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;</description><pubDate>Fri, 27 Feb 2026 15:10:59 +0800</pubDate></item></channel></rss>