自动化运维——ansible (五十三) (02)

news2025/1/9 9:17:32

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、模块

1.1 playbook

1.1.1 YMAL格式

1.1.2 playbook实例

1.1.3 Playbook常见语法

1.1.4 playbook编排多个hosts任务

1.2 roles

1.2.1 roles介绍

1.2.2 创建roles的目录结构

1.2.3 通过roles实现lamp

总结



前言

今天是接上次的内容,讲的还是模块的部分。


提示:以下是本篇文章正文内容,下面案例可供参考

一、模块

1.1 playbook

playbook(剧本): 是ansible用于配置,部署,和管理被控节点的剧本。用于ansible操作的编排。

使用的格式为yaml格式(saltstack,elk,docker,docker-compose,kubernetes等也都会用到yaml格式)

1.1.1 YMAL格式

以.yaml或.yml结尾

文件的第一行以 "---"开始,表明YMAL文件的开始(可选的)

以#号开头为注释

列表中的所有成员都开始于相同的缩进级别, 并且使用一个 "- " 作为开头(一个横杠和一个空格)

一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须是一个空格)

==注意: 写这种文件不要使用tab键,都使用空格==

下面看一个官方的示例感受一下

---
# 一位职工记录
name: Example Developer
job: Developer
skill: Elite
employed: True
foods:
    - Apple
    - Orange
    - Strawberry
    - Mango
languages:
    ruby: Elite
    python: Elite
    dotnet: Lame

1.1.2 playbook实例

先直接来看一个实例

第1步: 创建一个存放playbook的目录(路径自定义)

master# mkdir /etc/ansible/playbook

第2步: 准备httpd配置文件,并修改成你想要的配置

master# yum install httpd -y
​
按需要修改你想要的配置(为了测试可以随意改动标记一下)
master# vim /etc/httpd/conf/httpd.conf

第3步: 写一个playbook文件(后缀为.yml或.yaml)

# vim /etc/ansible/playbook/example.yaml
---
- hosts: group1
  remote_user: root
  tasks:  
  - name: ensure apache is at the latest version    
    yum: name=httpd,httpd-devel state=latest
    
  - name: write the apache config file      
    copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
    
    notify:
    - restart apache
    
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
    
  handlers: 
    - name: restart apache
      service: name=httpd state=restarted

第4步: 执行写好的palybook

  • 会显示出执行的过程,并且执行的每一步都有ok,changed,failed等标识

  • 执行如果有错误(failed)会回滚,解决问题后,直接再执行这条命令即可,并会把failed改为changed(幂等性)

# ansible-playbook /etc/ansible/playbook/example.yaml

1.1.3 Playbook常见语法

hosts: 用于指定要执行任务的主机,其可以是一个或多个由冒号分隔主机组.

remote_user: 用于指定远程主机上的执行任务的用户.

- hosts: group1         
  remote_user: root 

tasks: 任务列表, 按顺序执行任务.

  • 如果一个host执行task失败, 整个tasks都会回滚, 修正playbook 中的错误, 然后重新执行即可.

  tasks:
  - name: ensure apache is at the latest version    
    yum: name=httpd,httpd-devel state=latest
    
  - name: write the apache config file      
    copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf

handlers: 类似task,但需要使用notify通知调用。

  • 不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次.

  • handlers最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了.

    notify:               
    - restart apache
    
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
    
  handlers:
  - name: restart apache
    service: name=httpd state=restarted

variables: 变量

  • 定义变量可以被多次方便调用

master# vim /etc/ansible/playbook/example2.yaml
---
- hosts: group1
  remote_user: root
  vars:
  - user: test1
  tasks:
  - name: create user
    user: name={{user}} state=present
~                                           
master# ansible-playbook /etc/ansible/playbook/example2.yaml

案例: playbook编排vsftpd

写一个playbook实现

  1. 配置yum

  2. 安装vsftpd包

  3. 修改配置文件(要求拒绝匿名用户登录)

  4. 启动服务并实现vsftpd服务开机自动启动

---
- hosts: group1                 
  remote_user: root                     
  tasks:                                
  - name: rm yum repository      
    file: path=/etc/yum.repos.d/ state=absent
    
  - name: 同步master上的yum源到group1
    copy: src=/etc/yum.repos.d dest=/etc/
    
  - name: ensure vsftpd is at the latest version        
    yum: name=vsftpd state=latest
    
  - name: write the apache config file          
    copy: src=/etc/vsftpd/vsftpd.conf dest=/etc/vsftpd/vsftpd.conf 
    
    notify:                             
    - restart vsftpd
    
  - name: ensure vsftpd is running (and enable it at boot)
    service: name=vsftpd state=started enabled=yes
    
  handlers:                     
    - name: restart vsftpd              
      service: name=vsftpd state=restarted

1.1.4 playbook编排多个hosts任务

---         # ---代表开始(可选项,不写也可以)
- hosts: 10.1.1.12
  remote_user: root
  tasks:
  - name: 创建/test1/目录
    file: path=/test1/ state=directory
# 这里不能用---分隔,会报语法错误(后面课程玩k8s编排也写YAML文件,是可以用---来分隔段落的)
- hosts: 10.1.1.13
  remote_user: root
  tasks:
  - name: 创建/test2/目录
    file: path=/test2/ state=directory
...         # ...代表结束(可选项,不写也可以)

案例: 编排nfs搭建与客户端挂载

1, 在master上准备nfs配置文件

# vim /etc/exports
/share  *(ro)

2, 编写yaml编排文件

# vim /etc/ansible/playbook/nfs.yaml
---
- hosts: 192.168.156.12
  remote_user: root
  tasks:
  - name: 安装nfs服务相关软件包
    yum: name=nfs-utils,rpcbind,setup  state=latest
​
  - name: 创建共享目录
    file: path=/share/ state=directory
​
  - name: 同步nfs配置文件
    copy: src=/etc/exports dest=/etc/exports
​
    notify: restart nfs
​
  - name: 启动rpcbind服务,并设置为开机自启动
    service: name=rpcbind state=started enabled=on
​
  - name: 启动nfs服务,并设置为开机自启动
    service: name=nfs state=started enabled=on
​
  handlers:
  - name: restart nfs
    service: name=nfs state=restarted
​
- hosts: 192.168.156.13
  remote_user: root
  tasks:
  - name: 安装nfs客户端软件包
    yum: name=nfs-utils state=latest
​
  - name: 挂载nfs服务器的共享
    shell: mount 192.168.156.12:/share /mnt

3, 执行playbook

# ansible-playbook /etc/ansible/playbook/nfs.yaml
[root@hd1 ~]# vim /etc/ansible/playbook/nfs.yaml
[root@hd1 ~]# ansible-playbook /etc/ansible/playbook/nfs.yaml

PLAY [192.168.156.12] *************************************************************************************

TASK [Gathering Facts] ************************************************************************************
ok: [192.168.156.12]

TASK [安装nfs服务相关软件包] ***************************************************************************************
changed: [192.168.156.12]

TASK [创建共享目录] *********************************************************************************************
changed: [192.168.156.12]

TASK [同步nfs配置文件] ******************************************************************************************
changed: [192.168.156.12]

TASK [启动rpcbind服务,并设置为开机自启动] ******************************************************************************
ok: [192.168.156.12]

TASK [启动nfs服务,并设置为开机自启动] **********************************************************************************
changed: [192.168.156.12]

RUNNING HANDLER [restart nfs] *****************************************************************************
changed: [192.168.156.12]

PLAY [192.168.156.13] *************************************************************************************

TASK [Gathering Facts] ************************************************************************************
ok: [192.168.156.13]

TASK [安装nfs客户端软件包] ****************************************************************************************
changed: [192.168.156.13]

TASK [挂载nfs服务器的共享] ****************************************************************************************
[WARNING]: Consider using the mount module rather than running 'mount'.  If you need to use command
because mount is insufficient you can add 'warn: false' to this command task or set
'command_warnings=False' in ansible.cfg to get rid of this message.
changed: [192.168.156.13]

PLAY RECAP ************************************************************************************************
192.168.156.12             : ok=7    changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.156.13             : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

1.2 roles

1.2.1 roles介绍

roles(角色): 就是通过分别将variables, tasks及handlers等放置于单独的目录中,并可以便捷地调用它们的一种机制。

假设我们要写一个playbook来安装管理lamp环境,那么这个playbook就会写很长。所以我们希望把这个很大的文件分成多个功能拆分, 分成apache管理,php管理,mysql管理,然后在需要使用的时候直接调用就可以了,以免重复写。就类似编程里的模块化的概念,以达到代码复用的效果。

1.2.2 创建roles的目录结构

files:用来存放由copy模块或script模块调用的文件。
tasks:至少有一个main.yml文件,定义各tasks。
handlers:有一个main.yml文件,定义各handlers。
templates:用来存放jinjia2模板。
vars:有一个main.yml文件,定义变量。
meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系。

注意: 在每个角色的目录中分别创建files, tasks,handlers,templates,vars和meta目录,用不到的目录可以创建为空目录.

1.2.3 通过roles实现lamp

需定制三个角色: httpd,mysql,php

第1步: 创建roles目录及文件,并确认目录结构

master# cd /etc/ansible/roles/
master# mkdir -p {httpd,mysql,php}/{files,tasks,handlers,templates,vars,meta}
master# touch {httpd,mysql,php}/{tasks,handlers,vars,meta}/main.yml
​
master# yum install tree -y
master# tree /etc/ansible/roles/
/etc/ansible/roles/
├── httpd
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
├── mysql
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
└── php
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    ├── templates
    └── vars
        └── main.yml

第2步: 准备httpd服务器的主页文件,php测试页和配置文件等

master# echo "test main page" > /etc/ansible/roles/httpd/files/index.html
​
​
master# echo -e "<?php\n\tphpinfo();\n?>" > /etc/ansible/roles/httpd/files/test.php 
​
​
master# yum install httpd -y
按需求修改配置文件后,拷贝到httpd角色目录里的files子目录
master# vim /etc/httpd/conf/httpd.conf
master# cp /etc/httpd/conf/httpd.conf /etc/ansible/roles/httpd/files

第3步: 编写httpd角色的main.yml文件

   vim /etc/ansible/roles/httpd/files/main.yml

 ---
 - name: 安装httpd
   yum: name=httpd,httpd-devel state=present
​
 - name: 同步httpd配置文件
   copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf
​
   notify: restart httpd
​
 - name: 同步主页文件
   copy: src=/etc/ansible/roles/httpd/files/index.html dest=/var/www/html/index.html
​
 - name: 同步php测试页
   copy: src=/etc/ansible/roles/httpd/files/test.php dest=/var/www/html/test.php
​
 - name: 启动httpd并开机自启动
   service: name=httpd state=started enabled=yes

第4步: 编写httpd角色里的handler

master# vim /etc/ansible/roles/httpd/handlers/main.yml
---
- name: restart httpd
  service: name=httpd state=restarted

第5步: 编写mysql角色的main.yml文件

---
- name: 安装mysql
  yum: name=mariadb,mariadb-server,mariadb-devel state=present
​
- name: 启动mysql并开机自启动
  service: name=mariadb state=started enabled=yes

第6步: 编写php角色的main.yml文件

master# vim /etc/ansible/roles/php/tasks/main.yml
---
- name: 安装php及依赖包
  yum: name=php,php-gd,php-ldap,php-odbc,php-pear,php-xml,php-xmlrpc,php-mbstring,php-snmp,php-soap,curl,curl-devel,php-bcmath,php-mysql state=present
​
  notify: restart httpd

第7步:编写lamp的playbook文件调用前面定义好的三个角色

master# vim /etc/ansible/playbook/lamp.yaml
---
- hosts: group1
  remote_user: root
  roles:
    - httpd
    - mysql
    - php

第8步: 执行lamp的playbook文件

master# ansible-playbook /etc/ansible/playbook/lamp.yaml

拓展案例: 通过roles实现lamp并安装discuz

第1步: 创建roles目录及文件,并确认目录结构

master# cd /etc/ansible/roles/
master# mkdir -p {httpd,mysql,php}/{files,tasks,handlers,templates,vars,meta}
master# touch {httpd,mysql,php}/{tasks,handlers,vars,meta}/main.yml

第2步: 准备httpd相关文件

master# ls /etc/ansible/roles/httpd/files/
Discuz_X3.2_SC_UTF8.zip                     Discuz相关软件包
httpd.conf                                  配置好的httpd.conf配置文件

第3步: 编写httpd角色的main.yml文件

master# vim /etc/ansible/roles/httpd/tasks/main.yml
- name: 安装httpd相关软件包
  yum: name=httpd,httpd-devel state=latest
​
- name: 同步配置文件
  copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf
​
  notify: restart httpd
​
- name: 拷贝discuz压缩包
  copy: src=/etc/ansible/roles/httpd/files/Discuz_X3.2_SC_UTF8.zip dest=/tmp/
​
- name: 解压并mv网站文件到httpd家目录
  shell: rm -rf /var/www/html/*  && rm -rf /test/ && mkdir -p /test/ &&  unzip /tmp/Discuz_X3.2_SC_UTF8.zip -d /test/ &> /dev/null  && mv /test/upload/* /var/www/html/ && chown -R apache.apache /var/www/html/
# 上面的命令有点多,可以写成脚本,然后使用script模块来调用执行
​
- name: 启动httpd并开机自启动
  service: name=httpd state=started enabled=on
​

第4步: 编写httpd角色里的handler

master# vim /etc/ansible/roles/httpd/handlers/main.yml
---
- name: restart httpd
  service: name=httpd state=restarted

第5步: 编写mysql角色的main.yml文件

master# vim /etc/ansible/roles/mysql/tasks/main.yml
---
- name: 安装mariadb相关软件包
  yum: name=mariadb-server,mariadb-devel state=latest
​
- name: 启动mariadb服务并设置开机自启动
  service: name=mariadb state=started enabled=on
​
- name: 执行建库脚本
  script: /etc/ansible/roles/mysql/files/create.sh

第6步: 编写mysql的建库脚本

master# vim /etc/ansible/roles/mysql/files/create.sh
​
#!/bin/bash 
​
mysql << EOF
create database if not exists discuz default charset=utf8;
grant all on discuz.* to 'discuz'@'localhost' identified by '123';
flush privileges;
EOF

第7步: 编写php角色的main.yml文件

master# vim /etc/ansible/roles/php/tasks/main.yml
---
- name: 安装php相关软件包
  yum: name=php,php-gd,php-ldap,php-odbc,php-pear,php-xml,php-xmlrpc,php-mbstring,php-snmp,php-soap,curl,curl-devel,php-bcmath,php-mysql state=present
​
  notify: restart httpd

第8步:编写lamp的playbook文件调用前面定义好的三个角色

master# vim /etc/ansible/playbook/lamp.yaml
---
- hosts: group1
  remote_user: root
  roles:
    - httpd
    - mysql
    - php

第9步: 执行lamp的playbook文件

master# ansible-playbook /etc/ansible/playbook/lamp.yaml
[root@hd1 files]# ansible-playbook /etc/ansible/playbook/lamp.yaml

PLAY [group1] *********************************************************************************************

TASK [Gathering Facts] ************************************************************************************
ok: [192.168.156.12]
ok: [192.168.156.13]

TASK [安装httpd相关软件包] ***************************************************************************************
ok: [192.168.156.12]
ok: [192.168.156.13]

TASK [httpd : 同步配置文件] *************************************************************************************
ok: [192.168.156.13]
ok: [192.168.156.12]

TASK [httpd : 拷贝discuz压缩包] ********************************************************************************
changed: [192.168.156.13]
changed: [192.168.156.12]

TASK [解压并mv网站文件到httpd家目录] *********************************************************************************
[WARNING]: Consider using the file module with state=absent rather than running 'rm'.  If you need to use
command because file is insufficient you can add 'warn: false' to this command task or set
'command_warnings=False' in ansible.cfg to get rid of this message.
changed: [192.168.156.12]
changed: [192.168.156.13]

TASK [启动httpd并开机自启动] **************************************************************************************
ok: [192.168.156.13]
ok: [192.168.156.12]

TASK [mysql : 安装mariadb相关软件包] *****************************************************************************
changed: [192.168.156.13]
changed: [192.168.156.12]

TASK [mysql : 启动mariadb服务并设置开机自启动] ************************************************************************
changed: [192.168.156.13]
changed: [192.168.156.12]

TASK [mysql : 执行建库脚本] *************************************************************************************
changed: [192.168.156.12]
changed: [192.168.156.13]

TASK [安装php及依赖包] ******************************************************************************************
ok: [192.168.156.12]
ok: [192.168.156.13]

PLAY RECAP ************************************************************************************************
192.168.156.12             : ok=10   changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.156.13             : ok=10   changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

总结

以上就是今天要讲的内容,内容详细,但也是仅供参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1002885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开发】视频监控平台EasyCVR分组批量绑定/取消通道功能的后端代码设计逻辑介绍

视频监控平台/视频存储/视频分析平台EasyCVR基于云边端一体化管理&#xff0c;可支持视频实时监控、云端录像、云存储、磁盘阵列存储、回放与检索、智能告警、平台级联等功能。安防监控平台在线下场景中应用广泛&#xff0c;包括智慧工地、智慧工厂、智慧校园、智慧社区等等。 …

GaussDB数据库SQL系列-SQL与ETL浅谈

目录 一、前言 二、SQL与ETL的概述 三、ETL过程中的SQL示例&#xff08;GaussDB&#xff09; 1、提取&#xff08;Extract&#xff09; 2、转换&#xff08;Transform&#xff09; 3、加载&#xff08;Load&#xff09; 四、附DataArts Studio介绍 五、小结 一、前言 …

如何像专业人士一样调试 Kubernetes 应用程序错误(一)

在当今迅速发展的技术景观中&#xff0c;从单体架构迁移到微服务架构正变得越来越普遍。然而&#xff0c;对于那些在这个领域经验较少的人来说&#xff0c;适应这些新资源可能会带来重大的挑战。 无论您是开发团队、DevOps、基础设施还是其他技术团队的一部分&#xff0c;本文…

万博智云加入光合组织,携手为信创发展贡献力量

日前&#xff0c;万博智云信息科技&#xff08;上海&#xff09;有限公司&#xff08;以下简称“万博智云”&#xff09;正式加入海光产业生态合作组织&#xff08;以下简称“光合组织”&#xff09;&#xff0c;并由海光产业生态合作组织颁发“海光产业生态合作组织成员单位证…

成都优优聚为什么值得信任?

成都优优聚能信任作为一家专业的电商服务公司&#xff0c;拥有丰富的经验和专业的团队&#xff0c;能够为商家提供全方位的美团代运营服务。 美团外卖作为国内领先的外卖平台&#xff0c;具有庞大的用户群体和丰富的商家资源。然而&#xff0c;美团代运营对于很多刚开始接触美团…

一文读懂高速电机主轴的技术特性及应用

在现代化的加工制造业中&#xff0c;高速电机主轴是不可或缺的重要设备&#xff0c;它的质量和性能直接影响加工效率和产品质量。本文将介绍高速电机主轴的技术特性及应用&#xff0c;更好地了解这一重要设备。 一、高速电机主轴的技术特性 1.高稳定性 高速电机主轴采用特殊…

长胜证券:融券打新虽失宠 券源分配仍需透明

近期&#xff0c;关于战略投资者出借限售股作为融券券源的准则备受商场热议。不少投资者担心&#xff0c;跟着新股的大都券源被量化私募掌握&#xff0c;量化私募融券打新的战略有或许成为新股上市首日上涨后回身跌跌不休的首要原因。 券源分配是否有失公允&#xff1f;融券打…

高精度(加减乘除)

高精度算法出现的原因 当参与运算的数的范围大大的超出了标准数据类型&#xff0c;如int&#xff08;-2147483648 ~ 2147483647&#xff09;或者long long的范围&#xff0c;就需要使用高精度算法来进行数的运算。高精度运算的特点是代码长度比较长&#xff0c;本质是对数学运算…

使用Python编写高效程序

在当今竞争激烈的互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;成为了各类网站提升曝光度和流量的关键策略。而要在SEO领域中脱颖而出&#xff0c;掌握高效的网络抓取程序编写技巧是至关重要的。本文将分享一些宝贵的知识和技巧&#xff0c;帮助你使用Python…

2023年9月制造业NPDP产品经理国际认证报名来这错不了

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

【ES6知识】简介、语法变化、解构赋值

文章目录 一、概述1.1 ECMAScript 简介1.2 ECMAScript 背景1.3 ECMAScript 的历史1.4 ES6 的目标与愿景1.5 学习路线图1.6 环境搭建 二、语法变化2.1 let 与 const2.2 解构赋值2.3 Symbol 一、概述 1.1 ECMAScript 简介 ES6&#xff0c; 全称 ECMAScript 6.0 &#xff0c;是 …

高性能MySQL实战(二):索引 | 京东物流技术团队

我们在上篇 高性能MySQL实战&#xff08;一&#xff09;&#xff1a;表结构 中已经建立好了表结构&#xff0c;这篇我们则是针对已有的表结构和搜索条件为表创建索引。 1. 根据搜索条件创建索引 我们还是先将表结构的初始化 SQL 拿过来&#xff1a; CREATE TABLE service_lo…

成功解决怎么使用Arthas定位CPU突然飙高的问题

1.Arthas的下载地址 https://alibaba.github.io/arthas/arthas-boot.jar 2.启动Arthas&#xff08;提前下载放到环境上&#xff09; java -jar arthas-boot.jar 3.dashboard 命令查看线程&#xff0c;CPU情况 可以看到发现确实有几个线程CPU占用过高 4.thread命令查看最繁…

K8S基础概念

1、Node Node作为集群中的工作节点&#xff0c;运行真正的应用程序&#xff0c;在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的Kubelet、kube-proxy服务进程&#xff0c;这些服务进程负责Pod的创建、启动、监控、重启、销毁、以及实现软件模式的负载均…

边缘计算技术

边缘计算是指在靠近数据源头的网络边缘侧&#xff0c;融合网络、计算、存储、应用核心能力的分布式开放平台&#xff0c;就近提供边缘智能服务&#xff0c;满足行业数字化在敏捷连接、实时业务、数据优化、应用智能、安全与隐私保护等方面的关键需求。它可以作为连接物理和数字…

count(*) 和 count(1) 有什么区别?哪个性能最好?

哪种 count 性能最好&#xff1f; count() 是什么&#xff1f; count() 是一个聚合函数&#xff0c;函数的参数不仅可以是字段名&#xff0c;也可以是其他任意表达式&#xff0c;该函数的作用是统计符合查询条件的记录中&#xff0c;函数指定的参数不为 NULL 的记录由多少条。…

淘宝api:本地图片上传至淘宝 获取url(联合拍立淘接口)

upload_img-上传图片到淘宝 请求参数 请求参数&#xff1a;imgcodehttps://img14.360buyimg.com/n0/jfs/t1/52280/38/7464/140698/5d511f6bE08290bd7/f0bb32ddb47451e8.jpg 参数说明&#xff1a;imgcode:base64加密后的图片内容(post方式),或者是直接上传(file方式) 响应参数…

无涯教程-JavaScript - NPV函数

描述 NPV函数通过使用折现率以及一系列未来付款(负值)和收入(正值)来计算投资的净现值。 语法 NPV (rate,value1,[value2],...)争论 Argument描述Required/OptionalRateThe rate of discount over the length of one period.RequiredValue11 to 254 arguments representing…

SQL数据分析实战:从导入到高级查询的完整指南

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 当进行SQL数据分析实战时…

2023年上半年系统规划与管理师下午真题及答案解析

试题一(25分) 小李是跨国公司新任命的IT服务经理&#xff0c;帮助提升中国区总部的IT服务管理水平。中国区总部的运维管理体系运营了近三年&#xff0c;内外部环境发生了很多变化&#xff0c;其中&#xff1a; (1)内部变化包括团队组织结构调整、部分团队精简改为外包支持、I…