1.ubuntun上安装mysql及忘记密码重新设置
1.1 Ubtun安装Mysql
- 更新软件包列
bash
sudo apt update
- 安装Mysql服务器
bash
sudo apt install mysql-server
- 启动数据库服务
bash
sudo systemctl status mysql
- 设置用户密码
bash
sudo mysql_secure_installation
安装完毕后连接到MySQL服务器
bash
mysql -u root -p
之后输入密码后回车,则显示登录成功,如下图所示
1.2 修改登录密码
因为好久没登录,忘记密码,在网上搜索了很多,记录下可用的
- 输入以下命令进入
bash
sudo cat /etc/mysql/debian.cnf
显示如下:
-
使用账号 debian-sys-maint 账号登录mysql密码为 debian.cnf 中password 值,再切换到mysql的database;
-
修改root账号密码
这里需注意mysql的版本号,可切换到另一窗口进行版本号查询
bash
mysql --version
因为我的版本是>8.0的,则采用以下方式:
bash
update user set authentication_string='' where user='root' and Host ='localhost';
之后再刷新下
bash
flush privileges;
之后就可以设置为自己的密码,如下所示:
bash
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
若是<8.0版本的,则采用以下方式:
bash
update mysql.user set authentication_string=PASSWORD('123456') where user='root' and Host ='localhost';
同样之后输入flush privileges;
刷新下;
之后输入quit退出即可
然后重新登录,输入密码即可:
bash
mysql -u root -p
2.通过tcp发送数据将其存入数据库
总体设计为:
创建一个服务端,用来监听和解析、存入数据,客户端用来模拟循环发送数据,假设时间间隔为2小时,以及发送的数据为json格式,则相关代码如下所示:
2.1 创建数据库
bash
CREATE DATABASE test_tcp_data;
show databases;
#切换到这个数据库
use test_tcp_data;
#创建数据表,假设需要上传的数据为adc和温度,并记录相应插入表的时间
CREATE TABLE tcp_data (
id INT AUTO_INCREMENT PRIMARY KEY,
datetime DATETIME DEFAULT CURRENT_TIMESTAMP,
temperature FLOAT,
adc FLOAT
);
#查看数据表的格式
desc tcp_data;
如下图所示:
这里我们就创建好表;
2.2 将数据插入数据库
单独建一个python文件mysql_deal.py
,方便后期进行其他数据库的操作,都将对数据库的操作放到这个文件中。
python
import pymysql
my_config = {
'host':'localhost',
'user':'root',
'password':'123456',
'database':'test_tcp_data'
}
def test_data(adc, temperature):
conn = pymysql.connect(**my_config )
cursor = conn.cursor()
try:
sql = "INSERT INTO tcp_data(adc, temperature) VALUES (%s, %s)"
cursor.execute(sql, (adc, temperature))
conn.commit()
print("Insert success!")
except Exception as e:
print(f"Insert failed:{e}")
conn.rollback()
finally:
cursor.close()
conn.close()
return 'OK'
2.3 通过python创建服务端server
代码如下所示:
python
import socket
import json
from test import test_data
def process_data(data):
"""处理接收到的数据并存入数据库"""
try:
json_data = json.loads(data)
adc = json_data.get('adc')
temperature = json_data.get('temperature')
if adc is not None and temperature is not None:
#insert_data(adc, temperature)
print(f"Inserted data: adc={adc}, temperature={temperature}")
result = test_data(adc, temperature)
print(result)
else:
print("Data does not contain 'adc' or 'temperature'")
except json.JSONDecodeError:
print("Failed to decode JSON data")
def start_server(host='0.0.0.0', port=5000):
"""启动服务器并处理客户端连接"""
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(5)
print(f"Server listening on {host}:{port}")
while True:
client_socket, addr = server_socket.accept()
print(f"Connection from {addr}")
try:
data = client_socket.recv(1024).decode('utf-8')
process_data(data)
finally:
client_socket.close()
if __name__ == "__main__":
start_server()
2.4 创建client模拟循环发送数据
python
import socket
import json
import time
# 服务器的 IP 地址和端口
SERVER_IP = '127.0.0.1'
SERVER_PORT = 5000
def send_data_to_server(data):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
try:
# 连接到服务器
client_socket.connect((SERVER_IP, SERVER_PORT))
# 发送数据
client_socket.sendall(data.encode('utf-8'))
# 接收服务器响应
response = client_socket.recv(1024).decode('utf-8')
print(f"Server response: {response}")
except Exception as e:
print(f"An error occurred: {e}")
def main():
counter = 1
adc_counter = 0.1
while True:
# 构造数据
data = {
"adc": str(adc_counter),
"temperature": str(counter)
}
# 将字典转换为 JSON 字符串
json_data = json.dumps(data)
# 发送数据到服务器并处理响应
send_data_to_server(json_data)
# 增加计数器
counter += 1
adc_counter += 0.1
# 等待2小时
time.sleep(2 * 60 * 30)
if __name__ == "__main__":
main()
则分别通过打开窗口命令行运行
bash
python server.c
python client.c
这个时候我们可以切到mysql的界面,查看数据库,则知道刚插入进去: