- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是我的查询偶尔无法插入/更新,但是,python 脚本或数据库日志中没有抛出错误。
以下是详细解释:
我对 MySQL 服务器的 my.cnf 所做的更改没有解决问题。
[mysqld]
max_allowed_packet=256M
max_connections=4000
interactive_timeout=6000
connect_timeout=6000
wait_timeout=6000
log_error_verbosity=3 #changed afterwards, see comments
以下查询在两个 Python 脚本(一个发送者,一个接收者)中执行:
'''INSERT INTO samples(timestamp_packaging_start, timestamp_udp_send) VALUES(%s,%s) ON DUPLICATE KEY UPDATE timestamp_udp_send=%s '''
'''INSERT INTO samples(timestamp_packaging_end, timestamp_packaging_start) VALUES(%s,%s) ON DUPLICATE KEY UPDATE timestamp_packaging_end=%s '''
'''INSERT INTO samples(timestamp_packaging_start, timestamp_udp_receive) VALUES(%s,%s) ON DUPLICATE KEY UPDATE timestamp_udp_receive=%s '''
'''INSERT INTO samples(timestamp_receiver_start, timestamp_receiver_end, sender, cpuusage, tier, active, timestamp_packaging_start) VALUES(%s,%s,%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE timestamp_receiver_start=%s, timestamp_receiver_end=%s, sender=%s, cpuusage=%s, tier=%s, active=%s '''
然而,只有第一个查询偶尔会失败而没有错误,在数据库中留下这种条目:
+------------+----------+------+--------+----------------------------+----------------------------+--------------------+-----------------------+----------------------------+----------------------------+
| sender | cpuusage | tier | active | timestamp_packaging_start | timestamp_packaging_end | timestamp_udp_send | timestamp_udp_receive | timestamp_receiver_start | timestamp_receiver_end |
+------------+----------+------+--------+----------------------------+----------------------------+--------------------+-----------------------+----------------------------+----------------------------+
| webserver2 | 0.0 | 3 | 0 | 16:07:2020:13:10:11:371637 | 16:07:2020:13:10:12:490528 | NULL | 13:10:12.490810 | 16:07:2020:13:10:12:491818 | 16:07:2020:13:10:12:491897 |
+------------+----------+------+--------+----------------------------+----------------------------+--------------------+-----------------------+----------------------------+----------------------------+
其他查询永远不会失败!
commit()
执行查询后。对于每个线程,使用单独的 mysql-connection。
[Unit]
Description=Test Service
After=multi-user.target
Conflicts=getty@tty1.service
[Service]
Type=simple
ExecStart=/usr/bin/python /home/service/monitoring/sendTrapv1Multi.py
StandardInput=tty-force
[Install]
WantedBy=multi-user.target
如果需要,我可以提供我的完整代码,但是,我试图解释所有必要的信息。
try:
conn.ping(reconnect=True)
sql = '''INSERT INTO samples(timestamp_packaging_start, timestamp_udp_send) VALUES(%s,%s) ON DUPLICATE KEY UPDATE timestamp_udp_send=%s '''
cur = conn.cursor()
cur.execute(sql, (timestamp_packaging_start, timestamp_udp_send, timestamp_udp_send))
conn.commit()
except mysql.connector.Error as err:
print("Something went wrong: {}".format(err))
根据评论部分的要求,这里是
SHOW CREATE TABLE
的输出:
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| samples | CREATE TABLE `samples` (
`sender` text,
`cpuusage` text,
`tier` text,
`active` text,
`timestamp_packaging_start` varchar(256) NOT NULL,
`timestamp_packaging_end` text,
`timestamp_udp_send` text,
`timestamp_udp_receive` text,
`timestamp_receiver_start` text,
`timestamp_receiver_end` text,
PRIMARY KEY (`timestamp_packaging_start`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
编辑3://
from pysnmp.hlapi import *
from pysnmp.proto.api import v2c
import socket
import psutil
import os.path
from os import path
from datetime import datetime
import thread
import io
import time
import subprocess
import sys
import mysql.connector
from mysql.connector import Error
def create_connection():
lconn = None
try:
lconn = mysql.connector.connect(host='x',
database='x',
user='x',
password='x',
autocommit=True)
return lconn
except Error as e:
print("Error while connecting to MySQL", e)
return lconn
def insert_timestamps(conn, timestamp_packaging_start, timestamp_udp_send):
try:
conn.ping(reconnect=True)
sql = '''INSERT INTO samples(timestamp_packaging_start, timestamp_udp_send) VALUES(%s,%s) ON DUPLICATE KEY UPDATE timestamp_udp_send=%s '''
cur = conn.cursor()
cur.execute(sql, (timestamp_packaging_start,timestamp_udp_send,timestamp_udp_send))
conn.commit()
except mysql.connector.Error as err:
print("Something went wrong: {}".format(err))
def tcpdump():
global writer
global reader
global socket
global hostname
conn2 = create_connection()
hostname = socket.gethostname()
filename = 'test.log'
with io.open(filename, 'wb') as writer, io.open(filename, 'rb', 1) as reader:
process = subprocess.Popen(['tcpdump', '-Ul' ,'port 162 and host x'], stdout=writer)
while process.poll() is None:
packets = reader.read().split("\n")
if packets != ['']:
for packet in packets:
if packet != '':
temp_split= packet.split(" ")
timestamp_udp_send = temp_split[0]
insert_timestamps(conn2, timestamp_packaging_start, timestamp_udp_send)
time.sleep(0.25)
try:
conn = create_connection()
hostname = socket.gethostname()
thread.start_new_thread(tcpdump,())
while True:
timestamp_packaging_start = datetime.now().strftime("%d:%m:%Y:%H:%M:%S:%f")
if str(path.exists('/etc/nginx/sites-enabled/tier1'))=='True':
tier='1'
if str(path.exists('/etc/nginx/sites-enabled/tier2'))=='True':
tier='2'
if str(path.exists('/etc/nginx/sites-enabled/tier3'))=='True':
tier='3'
errorIndication, errorStatus, errorIndex, varBinds = next(
sendNotification(
SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('x', 162)),
ContextData(),
'trap',
NotificationType(
ObjectIdentity('1.3.6.1.6.3.1.1.5.2')
).addVarBinds(
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.5.0'), hostname),
ObjectType(ObjectIdentity('1.3.6.1.4.1.2021.10.1.3.1'), OctetString(psutil.cpu_percent(interval=1))),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.5.1'), tier),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.5.2'), timestamp_packaging_start)
),
)
)
if errorIndication:
print(errorIndication)
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(), errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
timestamp_packaging_end = datetime.now().strftime("%d:%m:%Y:%H:%M:%S:%f")
try:
sql = '''INSERT INTO samples(timestamp_packaging_end, timestamp_packaging_start) VALUES(%s,%s) ON DUPLICATE KEY UPDATE timestamp_packaging_end=%s '''
cursor=conn.cursor()
cursor.execute(sql, (timestamp_packaging_end, timestamp_packaging_start, timestamp_packaging_end))
conn.commit()
except mysql.connector.Error as error:
print("Failed to update record to database: {}".format(error))
except KeyboardInterrupt:
print('interrupted!')
最佳答案
我发现了错误:
我在多个查询中使用全局变量 (timestamp_packaging_start) 作为主键。由于没有人知道何时执行了不同线程中的函数,有时变量会被下一个条目覆盖,而没有首先执行查询。这导致我的程序更新 ANOTHER 和 WRONG 主键的时间戳。谢谢你们的努力。
关于Python MySQL 连接器偶尔无法插入/更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62933555/
我有 4 个 TextView。它们一开始都是不可见的,我将它们动画到屏幕上(从底部滑入)。我启动一个线程来为每个动画制作动画,每个动画开始时间间隔 200 毫秒。问题是:开始 Activity 后第
我有一个奇怪的问题,我似乎无法解决。 :(我有一个基于 Web 的应用程序,可以发送电子邮件。它通过连接在本地网络上设置的基于 Windows 的 SMTP 服务器来实现。此 SMTP 服务器不需要我
从昨天开始,我一直遇到一些设备收不到推送通知的问题。证书/设备 token 似乎是正确的,因为直到昨天,该设备还可以成功接收推送通知。 在服务器端,没有错误或连接拒绝,而且推送通知似乎每次都发送成功。
我有一个将 Angular 错误记录到数据库的应用程序,并且我偶尔会看到此错误的日志 Error: [$compile:tpload] http://errors.angularjs.org/1.5.
我收到一个 ImportError from azure.storage.blob import BlobServiceClient 但是我意识到当我安装依赖项时会发生错误 pip install a
我已经完成了使用AVAudioPlayer实现的简单音频播放GUI。 播放声音时,我使用UISlider提供播放反馈... 这是奇怪的地方。 我有一个非常偶尔发生的问题-而且大多数情况都不会发生,因此
在我的 XNA 游戏中,我的计算机(2.5 Ghz 双核 Intel Centrino 2)在 Debug模式下有一个大约需要 10 毫秒的操作。它只会每隔几分钟运行一次,它基本上只是整数数学/按位运
我相信我的应用程序编码正确(至少大部分是这样),因为它在大约 98% 的时间里都能正常工作。但是,大约 2% 的时间,我得到的似乎是有效的身份验证 token ,但是当我去发布照片时,我收到以下错误“
我在 apple store 上有一个应用程序,在 iOS6 更新后,我在 MKMapView 中收到了数百份崩溃报告。我无法在我的设备上重现崩溃。它看起来像是 EAGLContext 的问题。我们不
我最近开始使用 Foundation 5(我第一次使用 Foundation),我遇到了一个问题,似乎任何元素都响应了 .click 事件(例如顶部导航栏,单击元素时显示的数据下拉列表)将随机不起作用
花了大约一整天的时间试图解决这个问题,希望有人能帮助我!我是新来的,所以如果这是一个重复的问题,我深表歉意(我做了我的研究,但无法提前找到任何东西)。 我正在为我的咨询公司构建的网站使用浏览器缓存,但
我有一个表格,使用了以下 CSS 和 HTML: .price { position:relative; display:block; text-align:center; }
我们使用 ansible 将多个节点配置为一个集群。这些机器是在自定义 AWS 类似基础设施上创建的实例。 我们在不同的剧本上有大约一百个任务,它们在每个节点上执行。 问题是,我们收到零星的主机无法访
我们偶尔会从用户那里收到崩溃报告(我们使用崩溃报告程序包将崩溃发送到我们的服务器),并出现以下错误: “非法尝试在不同上下文中的对象之间建立关系‘...’” (不同的报表可能有不同的关系,并非所有报表
我是一名优秀的程序员,十分优秀!