记录一次 在linux 搭建的mysql迁移到docker容器中

本文记录了一次腾讯云服务器遭受攻击后的恢复过程,包括误删系统文件导致的问题及解决方案,特别是将原有的Linux部署的MySQL迁移至Docker容器中的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上篇文章写道,我腾讯云被攻击了,然后我各种删除木马文件,但在这个过程中,有些系统文件没认到,以为是木马文件,就删除了,各种处理无果,打开腾讯云的救援模式,备份了些重要文件,然后重装系统了。

基于这个契机,有些老掉牙的架构,我也想趁机换一换了。

首先是想,原来mysql是用linux部署的,现在我想直接部署到docker容器中。

然后我就开始了,因为是重装了系统什么也没有。

首先还是先装docker.

CentOS安装Docker

CentOS安装Docker - 乐心湖's Blog | 技术小白的技术博客

Ubuntu的docker详细安装教程

Ubuntu的docker详细安装教程_夏夏不吃糖的博客-CSDN博客_ubuntu安装docker教程

我是centos,就用上面那个文档,一步一步操作。

docker安装完毕后,拉取一个mysql镜像

#拉取镜像

docker pull mariadb:latest

启动容器,挂载一个mysql的data目录出去

docker run  -p 23306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
--name simple_mysql \
-v /root/data/mysql/data:/var/lib/mysql:rw  \
-v /root/data/mysql/log:/var/log/mysql:rw  \
--restart=always \
-d mariadb

把原来的mysql下面的data数据拷贝到 /root/data/mysql/data下(刚刚挂载的数据目录是这个)

拷贝1:ibdata1,不要问我这是什么,这个一定要拷贝。替换前先做备份

 拷贝2:需要移植的数据库,我就以travel_system这个库为例。

cp -R /data/txyun_beifen/mysql/data/travel_system /root/data/mysql/data

拷贝过来,ll命令查看一下,可以看到一件事,那就是该目录的所有者和所属组都是root,而docker的默认的用户是polkitd,用户组是input,这个要改。

 修改文件的所有者与所属组

# 修改文件所有者

chown -R polkitd travel_system

# 修改文件所属组

chgrp -R input travel_system

好,我们来重启下容器,在用navicat连接看看情况。

docker restart simple_mysql 

总结:其实如果还能连接数据库,直接通过navicat的数据传输功能进行同步,是效率最高的,如果出现了我这样的情况,万一不能使用navicat,只有数据库data目录备份,可以使用该方法进行数据库还原,操作前多做好备份,三思而动哈。

 

### 将Windows上的MySQL迁移Linux Docker容器中的部署教程 #### 准备工作 为了成功地将Windows上的MySQL迁移LinuxDocker容器中,需先确认源环境(即当前使用的Windows MySQL版本)以及目标环境中已安装好Docker服务。确保拥有足够的权限来操作这两个系统的文件系统。 #### 导出MySQL数据库 在原生Windows环境下导出所需迁移MySQL数据库是非常重要的一步。可以利用`mysqldump`工具完成此过程[^1]: ```bash mysqldump -u root -p --all-databases > alldb_backup.sql ``` 上述命令会提示输入密码,并创建一个包含所有数据库结构和数据的SQL脚本文件`alldb_backup.sql`。 #### 创建并配置Dockerfile与docker-compose.yml 对于新搭建Linux服务器而言,在其上构建适合的应用场景至关重要。编写简单的`Dockerfile`用于定制化官方提供的MySQL镜像;同时准备`docker-compose.yml`简化多服务编排流程[^2]: **Dockerfile** ```dockerfile FROM mysql:latest COPY ./backup/alldb_backup.sql /docker-entrypoint-initdb.d/ ENV MYSQL_ROOT_PASSWORD=your_password_here ``` 这里假设已经有一个名为`backup`的本地目录用来存放之前备份好的`.sql`文件。 **docker-compose.yml** ```yaml version: '3' services: db: build: . volumes: - "./data:/var/lib/mysql" ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: your_password_here ``` 这段YAML定义了一个基于自定义镜像的服务节点`db`,并通过卷映射的方式持久保存数据至宿主机相应路径下。 #### 数据传输 考虑到安全性及效率问题,建议采用SCP协议或者其他安全手段实现跨平台间的大规模二进制流转移。具体来说就是把先前制作出来的逻辑备份集传送到远程Linux机器上去[^3]。 #### 启动服务 当一切准备工作都完成后,就可以切换到项目根目录执行如下指令启动整个应用栈了: ```bash docker-compose up -d ``` 这将会以后台守护进程的形式拉起指定的服务实例,并自动初始化导入预先设置好的初始状态。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值