每天都一堆的事情等着去研究等着去做。。。又是晚上11点了。。。再研究一下吧。。。
按照上一天说的进度今天研究下python连接MySQL,已经会了基础的建库建表加条目的操作,现在至少能把东西往库里装了,现学现用,基础应用不要求性能啥的,只求达到目的(进阶再优化吧)。
简单的使用pymysql吧,其实随便百度一下就是一堆的教程,也不再赘述了,最简单的还是官方教程,实用易懂。
引用个看起来像官方的链接,https://pymysql.readthedocs.io/en/latest/user/examples.html
安装的话最简单直接的方法(我是windows环境): pip install pymysql
使用官方有个示例而且代码注释已经很明白了,静下心来读一遍就都懂了。
我就先建立个lldp数据库,建表lldptable
CREATE TABLE IF NOT EXISTS lldptable(
lldpneiid INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
switchname VARCHAR(40),
switchip VARCHAR(20),
deviceid VARCHAR(20),
localintf VARCHAR(20),
holdtime VARCHAR(20),
capbility VARCHAR(20),
portid VARCHAR(20)
) ;
按照官方文档程序修改用户名密码,sql执行语句,然后报错了。。。
pymysql.err.InternalError: (1130, "Host 'XXX' is not allowed to connect to this MySQL server")
看着就像是权限问题,直接百度,果然需要先添加改用户的远程连接权限。
有一点坑的是百度的经验大多比较老的版本,执行命令报错,注意搜索的时候加上自己MySQL的版本信息。
user的管理都是在mysql这个数据库里,先进这个库。
直接赋权已有账号会出错,因为我一开始建用户的时候是localhost用户。
先建立一个新的账户开启远程权限,刷新权限,然后就好了。
CREATE USER ‘user’@'%' IDENTIFIED BY 'password';
GRANT ALL ON *.* TO 'user'@'%';
FLUSH PRIVILEGES;
处理好账号以后测试信息能否通过python添加到数据库:
代码还是按照官方的建议代码,改了自己需要添加的内容:
运行代码,查看数据库里面的数据:
SELECT * FROM lldptable;
可以看到第一行是之前手工加的,第二行是通过python添加进来的。至此前几天学习过的语句都可以用这种形式来操作了。
再加上之前格式化好的交换机上的LLDP 邻居信息都通过这种方式,循环加到数据库里来:
效果如下:
然后可以通过筛选信息例如设备名称中包含Trio的,得到相关设备的IP及接口:
select switchip, localintf from lldptable where deviceid regexp '^.*Trio.*$';
如果想通过MAC地址过滤还可以加上MAC地址的过滤,举个例子我把MAC地址中带75的过滤了出去
select switchip, localintf from lldptable where deviceid regexp '^.*Trio.*$'and portid not regexp '.*75.*';
对于之前的想要完成的两件事,基本功能已经实现,接下来就是根据数据库中的信息生成脚本登陆设备自动执行了。这些也都比较简单,就不再单独介绍了。(研究Zabbix监控网络设备有一段时间了,之前也写了自定义监控项和API的一些内容,估计近期也会更新下zabbix SNMP监控遇到的问题以及系统的优化方法)