云服务器上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

相关推荐
爱写代码的小朋友15 分钟前
华三交换机配置常用命令
运维·服务器·网络
IT成长日记26 分钟前
【MySQL基础】 JSON函数入门
mysql·json·json函数
wangjun515934 分钟前
jenkins 参数化发布到服务器 publish over ssh、label、Parameterized publishing
服务器·ssh·jenkins
愿你天黑有灯下雨有伞37 分钟前
Docker 安装 Elasticsearch 教程
运维·elasticsearch·docker
愚润求学42 分钟前
【Linux】Linux权限
linux·服务器·语法
低头不见1 小时前
一个服务器算分布式吗,分布式需要几个服务器
运维·服务器·分布式
小爬虫程序猿1 小时前
淘宝商品信息如何存储到数据库?
数据库·爬虫·php
麻芝汤圆1 小时前
使用 MapReduce 进行高效数据清洗:从理论到实践
大数据·linux·服务器·网络·数据库·windows·mapreduce
赋创小助手1 小时前
Gartner预计2025年AI支出达6440亿美元:数据中心与服务器市场的关键驱动与挑战
运维·服务器·人工智能·科技·架构
天狼12221 小时前
第1章-3 MySQL的逻辑架构
mysql·逻辑架构