【自动化运维新手村】删库跑路第一步

2024-02-12 15:20

本文主要是介绍【自动化运维新手村】删库跑路第一步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【摘要】

到目前为止,自动化运维新手村中已经讲解了Python的基本数据类型及其操作,并且将其应用于一个简易的CMDB场景下;除此之外还介绍了一个主流的Web框架——Flask,并且本着最小上手范围的原则,已经可以通过向后端API发起请求的方式,对CMDB进行增删改查,而且还有了更为健壮的异常处理和更为安全的认证鉴权。

但有一个比较重要的内容始终没有提,这也是在后续的自动化运维中一定会用到的知识,那就是数据库。今天的章节,就对我们的后端应用进行改造,不管是用户信息还是CMDB信息,一律不再通过文件进行存储,而是使用关系型数据库来实现数据的读写。

【数据库】

数据库其实可以笼统的理解为可以支撑大批量数据进行存取的应用程序。

数据本身又分为关系型数据和非关系型数据,比如后端应用的用户信息,都具有用户名,密码,角色等信息,所以它们都是属于结构相同的关系型数据,但现在为止,我们CMDB的数据就属于非关系型数据,因为并没有强制的规定每台设备应该具有什么字段,而是通过一个json来实现灵活的信息读写。

那与之对应的数据库也就分为关系型数据库和非关系型数据库,这两者之间存在着比较大的差异,因为它们在底层实现上需要根据关系型数据或非关系型数据来做出不同的性能优化,实现更快的数据读写性能。但这两种数据库并不存在优劣之分,只存在适用的场景不同之分。

大家经常听到的MySQL、Oracle就属于关系型数据库,而Mongo、Redis就属于非关系数据库。

我们这一章节就使用MySQL来作为数据库提供数据的存取能力,但并不会十分深入的讲解关系型数据库的底层原理以及各种范式,这些如果有必要的话会在番外篇中提到。

【MySQL】

简介

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

RDBMS 即关系数据库管理系统(Relational Database Management System)的特点如下:

1.数据以二维表格的形式出现

2.许多的行和列组成一张表单

3.若干的表单组成database

比如我们的CMDB的数据结构如下:

{"Beijing": {"idc": "Beijing","switch": {"10.0.0.1": {"ip": "10.0.0.1","role": "csw","port": ["Eth1/1/0", "Eth1/1/1"]}}}
}

之所以一开始将数据结构定义成非关系型最主要的一个原因是为了匹配讲解Python的几大基本数据类型。但作为设备资产数据,其实大多数时候它们的字段都是已经固定的,所以这一章节就将非关系型数据“打平”,将其转为关系型数据,如下:

[["10.0.0.1", "Beijing", "R01", "C01", "Cisco", "Nexus9000", "BJ-R01-C01-N9K-00-00-01", "CSW"],["10.0.0.2", "Beijing", "R01", "C02", "Cisco", "Nexus9000", "BJ-R01-C01-N9K-00-00-02", "CSW"],["10.0.0.3", "Beijing", "R01", "C03", "Cisco", "Nexus9000", "BJ-R01-C01-N9K-00-00-03", "CSW"],
]

显而易见上面的数据是一个二维数组,即二维表格,那么他按理说就是可以存在MySQL里的,但在存进去之前需要先创建一个表结构,这个表结构包含了,这一张二维表中有几列,每一列的名称,数据类型,数据长度,默认值,注释等等信息,只有定义出一个表结构后,数据才能有存放的“容器”。

表结构操作

安装和连接MySQL的过程,省略不提。

其实MySQL的常用的操作并不多,无非是对表结构的增删改查(DDL),和对表数据的增删改查(DML)。

创建一个数据库的SQL语句:

CREATE DATABASE python_ops;

使用一个数据库的SQL语句:

USE python_ops;

创建设备表的SQL语句:

CREATE TABLE IF NOT EXISTS `devices` (`id` INT AUTO_INCREMENT COMMENT '自增主键',`ip` VARCHAR(16) COMMENT 'ip地址',`idc` VARCHAR(32) COMMENT '机房',`row` VARCHAR(8) COMMENT '机柜行',`column` VARCHAR(8) COMMENT '机柜列',`vendor` VARCHAR(16) COMMENT '厂商',`model` VARCHAR(16) COMMENT '型号',`hostname` VARCHAR(128) COMMENT '主机名',`role` VARCHAR(8) COMMENT '角色',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

关于表结构中的字段,有很多数据类型,较为常用的有 VARCHAR、INT、TEXT、TIMESTAMP、DATETIME、具体的使用会在用到的时候再进行具体讲解。

创建好后查看表结构的SQL语句如下:

SHOW TABLES;

DESC devices;

在这里插入图片描述

表数据操作

通过desc查看的只是表的结构,目前devices表中仍然没有数据。

SELECT * FROM devices; 查询devices表的SQL语句

在这里插入图片描述

INSERT INTO devices (`ip`, `idc`, `row`, `column`, `vendor`, `model`, `hostname`, `role`) VALUES 
("10.0.0.1", "Beijing", "R01", "C01", "Cisco", "Nexus9000", "BJ-R01-C01-N9K-00-00-01", "CSW"), 
("10.0.0.2", "Beijing", "R01", "C02", "Cisco", "Nexus9000", "BJ-R01-C01-N9K-00-00-02", "CSW"), 
("10.0.0.3", "Beijing", "R01", "C03", "Cisco", "Nexus9000", "BJ-R01-C01-N9K-00-00-03", "CSW");

在这里插入图片描述

有一个需要注意的地方就是SQL语句中关于数据库名,表名,字段名在使用时最好加上反引号,这样可以避免与数据库内置的关键字冲突。

【总结】

这一章节主要对数据库的基本概念做了一个简介,也是我们使用Web应用与数据库交互的前置条件,下一章节便会开始讲解如何使用Flask框架完成数据的增删改查。

【篇后语】

可能部分有基础的朋友对Flask或者Django有一定的了解,这些Web框架会提供一些封装好的方法,通过代码中定义数据模型,来自动创建表结构。但我并不推荐这种方式,我觉得单从运维的角度来说,应该有一个理念,那就是不该存在任何黑盒操作,很明显通过一条指定就直接建好表结构这就属于黑盒操作,对于一些还没有数据库基础的朋友来说,虽然短时间内可以按照流程走通,长期来看绝对是弊大于利。

一键式的操作存在的意义,一是可以让已经完全熟悉原理的人节省重复的步骤,提高效率;二是可以让完全不懂的人不必在意底层实现进行无脑操作。但对于还处在正在学习自动化运维阶段的朋友来说,一定要有一个想法就是坚决不做第二种人。我一直提倡的理念最小上手范围,是指学习并运用有限但必要的知识来解决面对的场景,并不提倡在知识匮乏的情况下,通过一些奇技淫巧来一步登天。

这篇关于【自动化运维新手村】删库跑路第一步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/702879

相关文章

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

BIRT 报表的自动化测试

来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-birttest/如何为 BIRT 报表编写自动化测试用例 BIRT 是一项很受欢迎的报表制作工具,但目前对其的测试还是以人工测试为主。本文介绍了如何对 BIRT 报表进行自动化测试,以及在实际项目中的一些测试实践,从而提高了测试的效率和准确性 -------

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

自动化表格处理的革命:智能文档系统技术解析

在当今数据驱动的商业环境中,表格数据的自动化处理成为了企业提高效率、降低成本的关键。企业智能文档系统在智能表格识别方面展现出卓越的性能,通过精准识别和处理各种通用表格,显著提升了企业文档管理的智能化水平。本文将深入探讨该系统在表格识别方面的关键技术和应用优势,以及如何通过行业定制化服务满足不同行业的需求。 1. 通用表格识别 智能文档系统通过先进的OCR技术和表格结构识别算法,能够精准

网络安全运维培训一般多少钱

在当今数字化时代,网络安全已成为企业和个人关注的焦点。而网络安全运维作为保障网络安全的重要环节,其专业人才的需求也日益增长。许多人都对网络安全运维培训感兴趣,那么,网络安全运维培训一般多少钱呢?   一、影响网络安全运维培训价格的因素   1. 培训内容的深度和广度   不同的网络安全运维培训课程涵盖的内容有所不同。一些基础的培训课程可能主要涉及网络安全基础知识、常见安全工具的使用等,价

Ganymed实现基本的自动化部署API

Ganymed SSH-2 for Java是一个纯Java实现的SHH2库,官网为http://www.ganymed.ethz.ch/ssh2/,最新的更新时间为2006年10月,在用之前,请仔细看一下FAQ,真的能避免很多很多问题 在google上找到的ganymed-ssh2的官网是http://www.ganymed.ethz.ch/ssh2/,进去看官网的英文简介可以看到该网站已经

python自动化测试框架--RobotFramework

为什么需要测试框架 在测试中,经常会为了怎样做测试、使用什么测试工具、如何使用、为什么使用测试工具、使用测试工具能帮助到我们什么等等问题而纠结。当我们选择一项测试工具时,如何组织大量自动化用例;如何合理的进行初始化清除;如何批量筛选待执行的用例;如何输出清晰的测试报告,就是需要我们考虑的事情了。下面简单介绍个使用比较广泛的自动化测试框架,即Robotframework。 RF的特点 RF:由pyt

探索Invoke:Python自动化任务的瑞士军刀

文章目录 探索Invoke:Python自动化任务的瑞士军刀背景:为何选择Invoke?`invoke`是什么?如何安装`invoke`?简单的`invoke`库函数使用方法场景应用:`invoke`在实际项目中的使用场景一:自动化测试场景二:代码格式化场景三:部署应用 常见问题与解决方案问题一:命令执行失败问题二:权限不足问题三:并发执行问题 总结 探索Invoke:P

Jenkins+Svn+Vue自动化构建部署前端项目(保姆级图文教程)

目录 介绍 准备工作 配置jenkins 构建部署任务 常见问题 介绍 在平常开发前端vue项目时,我们通常需要将vue项目进行打包构建,将打包好的dist目录下的静态文件上传到服务器上,但是这种繁琐的操作是比较浪费时间的,可以使用jenkins进行自动化构建部署前端vue 准备工作 准备vue项目,服务器,linux,ubuntu,centos等都可以,服务器上已经