阶段八:MySQL数据迁移实战

学习目标

一、数据迁移概述

1、什么是数据迁移

数据迁移(Data Migration) 是指将数据从一个系统、平台、存储介质或数据库迁移到另一个目标环境的过程,迁移过程中需保证数据的完整性、一致性、安全性和可追溯性,以确保业务系统能够在新环境中平稳运行。

在企业数字化转型、系统升级、国产化改造(信创)、云上迁移等场景中,数据迁移是最核心、风险最高的环节之一。

2、数据迁移的主要类型

<sheet sheet-id="KJNkRH" token="V9RlsIXeYhOzbHtBGjZcIouXnmg"></sheet>

3、数据迁移的总体流程

数据迁移通常分为 6 个阶段,每个阶段都有明确目标与关键工具:

<sheet sheet-id="q9vBNh" token="V9RlsIXeYhOzbHtBGjZcIouXnmg"></sheet>

二、数据库版本迁移(5.7=>8.0)

1、升级背景与意义

MySQL 8.0 是 MySQL 官方推出的重大版本更新,相比 MySQL 5.7 在性能、安全性、JSON 支持、事务一致性和复制机制等方面都有显著提升。

<sheet sheet-id="N5h3dj" token="V9RlsIXeYhOzbHtBGjZcIouXnmg"></sheet>

2、升级方式总览

<sheet sheet-id="SQ3sQ2" token="V9RlsIXeYhOzbHtBGjZcIouXnmg"></sheet>

3、推荐升级策略(企业生产环境)

推荐采用「逻辑迁移 + 实时同步 + 校验切换」三阶段方案。

3.1 阶段一:全量逻辑迁移(Full Dump)

# 导出
mysqldump -h old数据库地址 -uroot -p --single-transaction --routines --triggers --events --set-gtid-purged=OFF db_itheima > db_itheima.sql

# 导入
mysql -h new数据库地址 -uroot -p db_itheima < db_itheima.sql

命令作用:

执行结果:

关键参数:

注意事项:


**注意事项:**



需要的权限:

![](/assets/feishu-images/1009bb722e962ab5e6647741.png)

https://docs.percona.com/percona-xtrabackup/8.0/privileges.html


backup_admin:备份权限


进入到MySQL终端(先登录):


说明:

在数据库中需要以下权限:

第一步:创建全量备份




解决方案:

方案1:把你的套接字文件创建一个软链接,放置于/var/lib/mysql/mysql.sock文件中(不推荐)

注意事项:


第二步:预备阶段,把备份这段时间内产生的日志整合到全量备份中

官网地址:http://www.aliyun.com

image

选择登录/注册菜单:

image

单击注册按钮:

image

填写注册账号与密码信息:

image

输入账号、密码信息:

image

进入管理控制台:

image

效果如下图所示:

image

阿里云充值(可选)

由于需要购买阿里云相关组件,如ECS、RDS、SLB等等,所以我们需要先对账号进行充值操作。如下图所示:

image

选择充值菜单,进行充值操作。注:首次充值不得少于100元,否则后期有些组件无法购买!!!

image

领取免费ECS资源

领取地址:https://free.aliyun.com/

image

选择合适的ECS配置:

image
image
image

设置完成后,点击前往控制台:

image

远程连接ECS服务器

image

点击远程连接菜单,如下图所示:

image

远程连接,选择立即登录

image

登录后,选择右下角重置密码,如下图所示:

image

设置root管理账号的密码,如下图所示:

image

重置成功后,如下图所示:

image

输入新密码,重新登录,如下图所示:

image
image

使用远程连接软件连接ECS

本次案例我们以MobaXterm远程连接为主,首先我们需要获取ECS服务器的公网地址,如下图所示:

image

在MobaXterm端填写阿里云ECS信息:

image

输入root管理员账号与密码:

image

回车,登录Linux操作系统,如下图所示:

image
image

安装完成后,效果如下图所示

image

运行sl命令,查看效果

image

运行结果:

image

到此ECS远程连接服务器结束!

mysql_install.sh

#!/bin/bash #1.安装依赖软件 #2.判断是否有压缩包,如果有,则执行解压缩操作 #3.判断系统中是否安装过mariadb软件,如果有对其进行卸载操作 #4.创建mysql系统账号 #5.创建/export/server目录,然后移动mysql压缩包解压后的文件到/export/server目录下 #6.进入mysql目录,对其进行初始化操作 #7.设置ssl加密传输连接 #8.设置my.cnf与mysqld.service文件 [mysqld] port=3306 basedir=/export/server/mysql datadir=/export/server/mysql/data socket=/tmp/mysql.sock character_set_server=utf8 collation-server=utf8_unicode_ci

[Unit] After=network.target

[Service] User=mysql Group=mysql Type=forking

TimeoutSec=600

PIDFile=/export/server/mysql/data/mysqld.pid

Restart=on-failure RestartSec=5

[Install] WantedBy=multi-user.target #9.刷新后台服务,然后启动mysqld #10.重置mysql管理员密码为123456 #11.把mysql的bin目录添加到环境变量中 #12.解决mysql客户端首次无法登录问题 #13.弹出提示,MySQL安装成功


**注意事项:**


注意事项:


说明:

在数据库中需要以下权限:





快速的恢复数据库中的数据


第一次恢复报错
...

第五步:恢复数据时,一定要记得更改/export/server/mysql/data目录下的文件拥有者以及所属组权限,否则mysql无法启动


**注意事项:**

记得创建.err日志并设置权限为mysql.mysql(这部分可以忽略)

命令拆解:

命令部分重要程度详细解释
-p核心-p 的含义取决于当前命令,不能直接套用 Docker 端口映射解释。

注意事项:

[mysqld] port=3306 basedir=/export/server/mysql datadir=/export/server/mysql/data socket=/tmp/mysql.sock character_set_server=utf8 collation-server=utf8_unicode_ci slow_query_log=1 slow_query_log_file=/export/server/mysql/logs/mysql-slow.log long_query_time=1 log_queries_not_using_indexes=0 server-id=10 log_error=/export/server/mysql/logs/error.log log-bin=/export/server/mysql/data/binlog binlog_format=statement default_authentication_plugin=mysql_native_password


**注意事项:**



DTS数据迁移服务

![](/assets/feishu-images/24e2a859a9e6fe24b61f0347.png)

免费试用DTS

![](/assets/feishu-images/e0d4864bc472f201e34036bc.png)

进入管理控制台-数据迁移-创建任务:

![](/assets/feishu-images/7ff8024fa6a83934de57bb22.png)

创建mysql_to_rds任务:

![](/assets/feishu-images/540d53cf44e43b1fbbb4dd5f.png)

![](/assets/feishu-images/16c1a33b15a095a14b1ebc14.png)

![](/assets/feishu-images/7e9c94f3d882cd3eb4edc873.png)

单击测试连接以进行下一步:

![](/assets/feishu-images/dce879cf85a7dfb4c1039fa0.png)

![](/assets/feishu-images/76da9bff25273a05fb2ce29e.png)

![](/assets/feishu-images/5d23f1b63a0a379683233fd6.png)

单击下一步高级配置:

![](/assets/feishu-images/0e8e88f202abe6184c456a5d.png)

![](/assets/feishu-images/9fd5c3e5cbe536062d4fcd4f.png)

![](/assets/feishu-images/0743b1d1678557371fa2bc86.png)

校检完成后,保存并返回列表

![](/assets/feishu-images/9c6fa50a71456db31d7db699.png)

任务运行结果:

![](/assets/feishu-images/5dd57fef709d8fff77c65feb.png)


![](/assets/feishu-images/4d338fd082e04f09a8334774.png)





![](/assets/feishu-images/90bfe47347573a0ad261d2e2.png)







**高可用**:所有服务采用高可用架构,存在多个节点,可在任意节点出现故障的情况下,快速将请求或任务切换至正常节点运行。同时,复制、备份及对比等长时间运行的任务支持无损断点续传,一旦任务运行的节点出现异常,可在节点切换后继续传输数据。

命令拆解:

命令部分重要程度详细解释
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo普通目标 URL https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo,命令会访问这个地址或从这里下载内容。

注意事项:

swr.cn-east-3.myhuaweicloud.com/ninedata/ninedata:latest

-----------------------------------------------------------------------------------------------

参数说明 --privileged:赋予容器运行和访问的系统权限。


**命令拆解:**

| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `>/etc/modules-load.d/ninedata.conf` | 【普通】 | 配置文件路径,命令会读取这个文件里的配置。 |
| `>/etc/sysctl.d/99-ninedata.conf` | 【普通】 | 配置文件路径,命令会读取这个文件里的配置。 |
| `-d` | 【核心】 | 后台运行容器,命令返回后容器继续运行,终端不会被容器日志占用。 |
| `--name` | 【核心】 | 指定容器名称 `ninedata`,后续可以用这个名称执行 ps、logs、exec 等管理命令。 |
| `--cgroupns=host` | 【普通】 | Docker 过滤条件或配置值 `--cgroupns=host`,用于限定查询结果或改变容器运行行为。 |
| `-v` | 【核心】 | 目录挂载:把宿主机目录 `/sys/fs/cgroup` 挂载到容器内目录 `/sys/fs/cgroup:rw`,容器删除后宿主机数据仍可保留。 |
| `/sys/fs/cgroup:/sys/fs/cgroup:rw` | 【普通】 | Docker 镜像引用 `/sys/fs/cgroup:/sys/fs/cgroup:rw`,指定要运行、上传、下载或重新标记的镜像。 |
| `/opt/ninedata:/u01` | 【普通】 | Docker 镜像引用 `/opt/ninedata:/u01`,指定要运行、上传、下载或重新标记的镜像。 |
| `-p` | 【核心】 | 端口映射,格式是 `宿主机端口:容器端口`,把宿主机访问转发到容器端口。 |

**注意事项:**




#!/bin/bash
#1.安装依赖软件
#2.判断是否有压缩包,如果有,则执行解压缩操作
#3.判断系统中是否安装过mariadb软件,如果有对其进行卸载操作
#4.创建mysql系统账号
#5.创建/export/server目录,然后移动mysql压缩包解压后的文件到/export/server目录下
#6.进入mysql目录,对其进行初始化操作
#7.设置ssl加密传输连接
#8.设置my.cnf与mysqld.service文件
[mysqld]
port=3306
basedir=/export/server/mysql
datadir=/export/server/mysql/data
socket=/tmp/mysql.sock
character_set_server=utf8
collation-server=utf8_unicode_ci

[Unit]
After=network.target

[Service]
User=mysql
Group=mysql
Type=forking


TimeoutSec=600

PIDFile=/export/server/mysql/data/mysqld.pid

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
#9.刷新后台服务,然后启动mysqld
#10.重置mysql管理员密码为123456
#11.把mysql的bin目录添加到环境变量中
#12.解决mysql客户端首次无法登录问题
#13.弹出提示,MySQL安装成功

注意事项:


**命令拆解:**

| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `-p` | 【核心】 | `-p` 的含义取决于当前命令,不能直接套用 Docker 端口映射解释。 |

**注意事项:**





image
image

创建高权限账号

image

创建数据库与普通账号

image

创建MySQL数据源

image

创建RDS数据源

image

创建数据复制

image
image

建立映射关系

image
image
image
image

运行效果:

image

动态插入数据到MySQL数据库

image

查看NineData复制任务

image

验证RDS数据

image

支持数据库源如下:

image

工作经历01:

1、负责数据库的日常管理和维护,确保数据库的稳定性和安全性;

4、负责数据库的部署、优化、调试以及故障排查;

5、根据业务及项目需求,进行数据分析及数据汇总统计。

工作经历02:

1、负责公司内部系统日常巡检,确保系统运行正常;

4、实时接收各大水库各指标数据,监测数据变化;

6、运维文档的收集和整理。

工作经历03:

工作经历04:

项目名称:XXX省份周边水库监测平台运维

项目时间:2022.06-2023.04

项目介绍:公司承接了多个省市重点水库监测系统的建设与维护任务,系统汇集来自各地水库的水

据库,作为支撑水资源调度、水质预警、水电调控的核心数据基础。需要监测各大水库各种数据的

变化,同时,随着设备数量增多与数据激增,数据库面临写入压力大、查询缓慢、备份时间长等挑

战,需进行系统化优化与管理。

个人职责

3、实时接收各大水库各指标数据,监测水库数据变化,特殊时期定时提交数据给相关负责人;

项目时间:2024.06-2025.06

个人职责: