云服务器上Docker启动的MySQL会自动删除数据库的问题

一、问题说明

除了常见的情况,例如没有实现数据挂载,导致数据丢失外,还需要考虑数据库是否被攻击,下图 REVOVER_YOUR_DATA 就代表被勒索了,这种情况通常是数据库端口使用了默认端口(3306)且密码设置简单导致, 当前情况系统不安全了,不建议您继续使用当前系统环境。

在这里插入图片描述

二、解决方法

2.1、密码方面

  1. 使用强密码策略,要求用户设置复杂且难以猜测的密码。

请注意,如果您使用的是MySQL 5.7及以上版本,并且在安装时使用了强密码策略插件(如validate_password),您可能需要设置一个更安全的密码。

以下是一个示例代码,展示了如何在MySQL命令行中执行这些步骤:

# 以管理员权限登录MySQL服务
mysql -u root -p
-- 选择MySQL数据库
use mysql;

-- 更新root用户的密码
UPDATE user SET authentication_string=PASSWORD('新密码') WHERE user='root';

-- 刷新权限使修改立即生效
flush privileges;

-- 退出MySQL
EXIT;

在这里插入图片描述

  1. 定期更换密码,降低密码被破解的风险。

在MySQL中,定期更换密码可以通过定时任务来实现,例如使用cron工具来定时执行更换密码的命令。

以下是一个简单的例子:

① 编辑crontab文件以添加定时任务。

crontab -e

② 添加以下行来设置定时任务,比如每月的第一天凌晨1点更换密码。

0 1 1 * ? /usr/bin/mysqladmin -u root -p'oldpassword' password 'newpassword'

确保将oldpassword替换为当前的MySQL root 用户密码,将newpassword替换为你想要设定的新密码。

注意

  • 确保mysqladmin的路径正确。

  • 如果当前MySQL root 密码为空,可以省略-p'oldpassword'部分。

  • 新密码应该遵循安全最佳实践,包括使用复杂度和随机性的要求。

  • 更改密码可能需要相应的权限,如果是在多用户系统上,请确保当前用户有执行这些操作的权限。

  • 如果你使用的是MySQL 5.7或更新版本,可以使用ALTER USER语句来更改密码,例如:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
    确保使用正确的SQL语法来匹配你的MySQL版本。

  1. 禁用或限制默认的管理员账户,避免使用通用的或已知的管理员用户名root。

要在MySQL中禁用或限制默认的管理员账户(如 root 用户),你可以创建一个新的管理员账户并授予适当的权限,然后禁用或删除默认的 root 账户。

以下是一个简化的步骤和示例代码:

① 创建一个新的管理员账户。

② 授予新账户足够的权限。

③ 禁用或删除默认的root账户。

示例代码:

-- 创建一个新的管理员账户
CREATE USER 'new_admin'@'localhost' IDENTIFIED BY 'StrongPassword!';
 
-- 授予新账户所有权限
GRANT ALL PRIVILEGES ON *.* TO 'new_admin'@'localhost' WITH GRANT OPTION;
 
-- 刷新权限使更改生效
FLUSH PRIVILEGES;
 
-- 禁用root账户(可选)
RENAME USER 'root'@'localhost' TO 'root'@'localhost' DISABLE;
 
-- 或者删除root账户(如果安全)
-- DROP USER 'root'@'localhost';

在实际操作中,你应该选择一个安全的密码为新用户设置密码,并考虑是否需要删除默认的 root 账户。禁用 root 账户可以增加一层安全性,但同时也可能导致你无法从 root 账户访问服务器,除非你有其他的备用方式。记得在操作前备份相关的配置信息。

2.2、访问授权与权限管理

  1. 阿里云服务器的安全组只允许特定的ip访问。

https://jingyan.baidu.com/article/c275f6ba101c72e33c75676e.html

  1. mysql给用户分配地址权限:只允许特定的IP地址或网络段进行访问。

在MySQL中,您可以通过GRANT语句来给用户分配特定的访问权限,包括IP地址权限。

以下是一个示例代码,展示如何仅允许特定的IP地址或网段访问数据库服务器:

-- 假设您已经有一个用户'myuser'@'%',并希望限制其只能从特定的IP地址或网段访问
 
-- 从单独的IP地址(例如192.168.1.100)授予权限
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'192.168.1.100';
 
-- 从整个子网段(例如192.168.1.0/24)授予权限
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'192.168.1.%';
 
-- 刷新权限使变更生效
FLUSH PRIVILEGES;

请确保替换mydatabase为您想要授权的数据库名,myuser为您的用户名,以及IP地址或网段为您想要允许的地址。

注意:在实际操作中,应该避免使用GRANT ALL PRIVILEGES,而应该只授予必要的最小权限,以保持安全性。

2.3、备份方面

  1. 将数据库的数据进行定期备,并且放到一个安全的地方。

为了定期备份MySQL数据库并将其放在一个安全的地方,你可以使用mysqldump命令行工具来创建数据库的SQL备份文件,然后使用rsync或其他文件同步工具将其同步到安全的服务器或位置。

以下是一个简单的脚本示例,展示如何自动执行这些步骤:

#!/bin/bash
 
# 配置变量
BACKUP_DIR="/path/to/your/backup/directory"
DB_USER="your_db_username"
DB_PASSWORD="your_db_password"
DB_NAME="your_database_name"
 
# 创建备份
mkdir -p "$BACKUP_DIR"
mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$BACKUP_DIR/$DB_NAME-$(date +%Y%m%d%H%M%S).sql"
 
# 将备份文件同步到安全的地方(请替换以下命令中的[security_server]为你的安全服务器地址)
rsync -avz --delete "$BACKUP_DIR" [security_server]:/path/to/your/backup/directory
 
# 删除旧的备份(保留最新的3个备份)
cd "$BACKUP_DIR"
ls -t | tail -n +4 | xargs rm -f

确保将脚本中的变量(BACKUP_DIR, DB_USER, DB_PASSWORD, DB_NAME)替换为你的实际配置。

这个脚本首先创建了一个包含当前日期时间的备份文件,然后使用rsync将备份同步到安全的服务器。最后,它删除除最新的3个备份文件以外的所有旧备份文件。

你可以将这个脚本添加到你的crontab中以定期执行备份:

crontab -e

然后添加一行以设置你的备份计划,例如每天凌晨1点执行:

0 1 * * * /path/to/your/backup/script.sh

确保给脚本可执行权限:

chmod +x /path/to/your/backup/script.sh

请注意,你需要根据你的实际环境调整这些命令,并确保rsyncmysqldump在你的系统上可用。同时,保护好你的数据库凭证,并确保只有授权的人可以访问你的安全服务器。


参考链接:https://blog.csdn.net/mynameisghr/article/details/137072228

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Coding and Paper Letter(八十九)

CPL之第八十九期。 1 Coding: 1.openai通用代理转换是一个用于将其他厂商服务转为openai 标准接口相应的工具. 通过该工具, 可以将其他厂商的服务转为openai 标准接口. 讯飞星火,通义千问,gemini,openai,copilot,double,kimi,智谱清言 使用spring2webf…

Qt——示波器/图表 QCustomPlot

一、介绍 QCustomPlot是一个用于绘图和数据可视化的Qt C小部件。它没有进一步的依赖关系,提供友好的文档帮助。这个绘图库专注于制作好看的,出版质量的2D绘图,图形和图表,以及为实时可视化应用程序提供高性能。QCustomPlot可以导出…

机器学习和深度学习 -- 李宏毅(笔记与个人理解1-6)

机器学习和深度学习教程 – 李宏毅(笔记与个人理解) day1 课程内容 什么是机器学习 找函数关键技术(深度学习) 函数 – 类神经网络来表示 ;输入输出可以是 向量或者矩阵等如何找到函数: supervised Lear…

【QingHub】EMQX单节点一键部署

EMQX 简介 EMQX是全球最具扩展性的开源MQTT 代理,具有高性能,可在 1 个集群中连接 1 亿多个 IoT 设备,同时保持每秒 100 万条消息的吞吐量和亚毫秒级的延迟。 EMQX 支持MQTT、HTTP、QUIC、WebSocket等多种开放标准协议。它 100% 符合MQTT 5.…

【Linux】tcpdump P3 - 过滤和组织返回信息

文章目录 基于TCP标志的过滤器格式化 -X/-A额外的详细选项按协议(udp/tcp)过滤低详细输出 -q时间戳选项 本文继续展示帮助你过滤和组织tcpdump返回信息的功能。 基于TCP标志的过滤器 可以根据各种TCP标志来过滤TCP流量。这里是一个基于tcp-ack标志进行过滤的例子。 # tcpdump…

大厂MVP技术JAVA架构师培养

课程介绍 这是一个很强悍的架构师涨薪计划课程,课程由专家级MVP讲师进行教学,分为是一个章节进行分解式面试及讲解,不仅仅是面试,更像是一个专业的架构师研讨会课程。课程内容从数据结构与算法、Spring Framwork、JVM原理、 JUC并…

每日Bug汇总--Day03

Bug汇总—Day03 一、项目运行报错 二、项目运行Bug 1、问题描述:Vue前端项目运行后台管理平台订单管理页面下的三个子页面出现点击不同的路由还是会出现相同的页面,导致页面和数据不匹配 解决办法: 在监听器中添加状态来根据路由地址变化…

C++ | Leetcode C++题解之第20题有效的括号

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isValid(string s) {int n s.size();if (n % 2 1) {return false;}unordered_map<char, char> pairs {{), (},{], [},{}, {}};stack<char> stk;for (char ch: s) {if (pairs.count(ch)) {if (…

【mT5多语言翻译】之六——推理:多语言翻译与第三方接口设计

请参考本系列目录&#xff1a;【mT5多语言翻译】之一——实战项目总览 [1] 模型翻译推理 在分别使用全量参数微调和PEFT微调训练完模型之后&#xff0c;我们来测试模型的翻译效果。推理代码如下&#xff1a; # 导入模型 if conf.is_peft:model AutoModelForSeq2SeqLM.from_pr…

如何设置端口映射?

端口映射是一种网络技术&#xff0c;通过在网络路由器或防火墙上设置规则&#xff0c;将外部网络请求转发到内部特定设备或服务的端口上。这样可以实现不同地区电脑与电脑、设备与设备、电脑与设备之间的信息远程通信&#xff0c;提供更加便捷的网络连接。 2. 天联组网 天联是…

【环境搭建】(五)Ubuntu22.04安装cuda_11.8.0+cudnn_8.6.0

一个愿意伫立在巨人肩膀上的农民...... 设备配置&#xff1a; 一、安装GCC 安装cuda之前&#xff0c;首先应该安装GCC&#xff0c;安装cuda需要用到GCC&#xff0c;否则报错。可以先使用下方指令在终端查看是否已经安装GCC。 gcc --version 如果终端打印如下则说明已经安装…

K8S容器空间不足问题分析和解决

如上图&#xff0c;今天测试环境的K8S平台出现了一个问题&#xff0c;其中的一个容器报错&#xff1a;Free disk space below threshold. Available: 3223552 bytes (threshold: 10485760B)&#xff0c;意思服务器硬盘空间不够了。这个问题怎么产生的&#xff0c;又怎么解决的呢…

性能优化原则

相关链接&#xff1a;【运行环境】加载资源的形式 性能优化 1 性能优化原则 多使用内存、缓存或其他方法 减少CPU计算量&#xff0c;减少网络加载耗时 &#xff08;适用于所有编程的性能优化----空间换时间&#xff09; 2 从何入手 性能优化-让加载更快 减少资源体积&#x…

neo4j-01

Neo4j是&#xff1a; 开源的&#xff08;社区版开源免费&#xff09;无模式&#xff08;不用预设数据的格式&#xff0c;数据更加灵活&#xff09;noSQL&#xff08;非关系型数据库&#xff0c;数据更易拓展&#xff09;图数据库&#xff08;使用图这种数据结构作为数据存储方…

Edge扩展程序上架流程

代码基本同Chrome扩展&#xff0c;无需改动&#xff0c;具体可以参考文档说明 参考官方文档&#xff0c;注册开发者账号&#xff0c;遇到报错可以参考另一篇文章&#xff0c;Microsoft注册问题 注册完毕后&#xff0c;跳转到 developer dashboard&#xff0c;将左侧导航栏选项…

【案例分享】如何通过甘特图管理项目进度?

我将通过一个实际案例来具体说明我是如何通过甘特图来管理项目进度的。 案例背景&#xff1a; 我负责过一个软件开发项目&#xff1a;一款在线学习APP。项目团队包括项目经理、开发人员、测试人员、UI设计师等多个角色&#xff0c;预计项目周期为6个月。 案例实施过程&…

Redis中的集群(四)

集群 槽指派 CLUSTER ADDSLOTS命令的实现 CLUSTER ADDSLOTS命令接受一个或多个槽作为参数&#xff0c;并将所有输入的槽指派给接收该命令的节点负责: CLUSTER ADDSLOTS <slot> [slot ...]CLUSTER ADDSLOTS命令的实现可以用以下伪代码来表示: def CLUSTER_ADDSLOTS(*…

【MATLAB源码-第5期】基于matlab的BPSK的理论误码率和实际误码率对比仿真。

1、算法描述 BPSK (Binary Phase Shift Keying)-------二进制相移键控。是把模拟信号转换成数据值的转换方式之一&#xff0c;利用偏离相位的复数波浪组合来表现信息键控移相方式。BPSK使用了基准的正弦波和相位反转的波浪&#xff0c;使一方为0&#xff0c;另一方为1&#xf…

机器人路径规划:基于移动机器人路径规划的Q-learning算法,可以自定义地图,修改起始点,提供MATLAB代码

一、Q-learning算法 Q-learning算法是强化学习算法中的一种&#xff0c;该算法主要包含&#xff1a;Agent、状态、动作、环境、回报和惩罚。Q-learning算法通过机器人与环境不断地交换信息&#xff0c;来实现自我学习。Q-learning算法中的Q表是机器人与环境交互后的结果&#…

lvs+keepalived+nginx负载搭建

LVS&#xff1a;&#xff08;linux virtual server&#xff09;是一款网络模型四层的负载软件&#xff0c;即IP端口的转发模式&#xff0c; LVS:提供三种负载方式&#xff1a; VS/NAT:网络地址转化 VS/TUN:端 VS/DR:直接轮询模式 10种调度算法&#xff1a;常用的由一下几种&…