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

一、问题说明

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

二、解决方法

2.1、密码方面

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

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

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

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

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

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

-- 退出MySQL
EXIT;
  1. 定期更换密码,降低密码被破解的风险。

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

以下是一个简单的例子:

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

bash 复制代码
crontab -e

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

sql 复制代码
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账户。

示例代码:

sql 复制代码
-- 创建一个新的管理员账户
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地址或网段访问数据库服务器:

sql 复制代码
-- 假设您已经有一个用户'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或其他文件同步工具将其同步到安全的服务器或位置。

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

bash 复制代码
#!/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中以定期执行备份:

bash 复制代码
crontab -e

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

bash 复制代码
0 1 * * * /path/to/your/backup/script.sh

确保给脚本可执行权限:

bash 复制代码
chmod +x /path/to/your/backup/script.sh

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


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

相关推荐
量子网络4 分钟前
debian 如何进入root
linux·服务器·debian
时光の尘7 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
The_Ticker27 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
Elastic 中国社区官方博客33 分钟前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
企鹅侠客38 分钟前
ETCD调优
数据库·etcd
Json_1817901448044 分钟前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
煎饼小狗1 小时前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
我言秋日胜春朝★1 小时前
【Linux】进程地址空间
linux·运维·服务器
永乐春秋1 小时前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
繁依Fanyi1 小时前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse