实验手册
实现数据库迁移上云
实验预计耗时:45 分钟
1. 课程背景
1.1 课程目的
DTS数据传输服务是提供数据迁移、数据同步、数据订阅于一体的数据库数据传输服务,可以帮助用户在业务不停服的前提下轻松完成数据库迁移。支持迁移的数据库有具有公网地址的MySQL数据库、专线接入腾讯云的MySQL数据库或者是腾讯云 CVM 上的自建 MySQL 数据库。本课程将通过介绍和演示将腾讯云 CVM 上自建 MySQL 数据库迁移至腾讯云数据库 MySQL 的步骤,让学员们可以简单、快速掌握 DTS 数据传输服务的使用。
1.2 课前知识准备
1.相关概念
a)MySQL:MySQL 数据库是一种关系型数据库管理系统,是一种开源数据库软件。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。我们可以使用 MySQL 数据库创建和管理多个数据库(database)和表(table)。
b)CVM:腾讯云服务器 CVM(Cloud Virtual Machine)是腾讯云提供的可扩展的计算服务。使用 CVM 避免了使用传统服务器时需要预估资源用量及前期投入,帮助用户在短时间内快速启动任意数量的云服务器并即时部署应用程序。腾讯云 CVM 支持用户自定义一切资源:CPU、内存、硬盘、网络、安全等等,并可以在需求发生变化时轻松地调整它们。
c)TencentDB for MySQL:云数据库 MySQL(TencentDB for MySQL)是腾讯云基于开源数据库 MySQL 专业打造的高性能分布式数据存储服务,让用户能够在云中更轻松地设置、操作和扩展关系数据库。
d)TencentDB for MySQL 的数据库实例:
- 基础版
- 基础版采用单个节点部署,价格低廉,性价比非常高
- 基础版不建议用于业务正式环境,适用于个人学习、微型网站、企业非核心小型系统以及大中型企业开发与测试环境
- 高可用版
- 高可用版采用一主 N 从的高可用模式,实时热备,提供宕机自动检测和故障自动转移
- 高可用版默认一主一从异步复制方式,可以通过购买和升级迁移到一主二从强同步模式
e)DTS:腾讯云数据传输服务(Data Transmission Service,DTS)支持 MySQL、Redis、MongoDB 等多种关系型数据库及 NoSQL 数据库迁移,可帮助用户在业务不停服的前提下轻松完成数据库迁移上云,利用实时同步通道轻松构建高可用的数据库容灾架构,通过数据订阅来满足商业数据挖掘、业务异步解耦等场景需求。它具有数据同步、高传输性能、故障自动恢复、可视化操作和设置简单快速等特点。
2.相关原理
如图所示,整个实验在腾讯云平台上操作。首先创建 CVM 云服务器,部署自建的 MySQL 数据库,并在上面建库建表;然后通过 DTS 数据迁移服务,实现将自建数据库的数据迁移至腾讯云数据库 MySQL 中。
2. 实验环境
2.1 实验操作环境
本实验要求:
- 运行 Microsoft Windows,可以接入互联网的笔记本电脑或者台式机。
- Internet 浏览器,例如 Chrome, IE 或 Firefox。
- 能够通过浏览器连接腾讯云官网https://cloud.tencent.com。
2.2 实验的数据规划表
数据项 | 数据 | 说明 |
---|---|---|
腾讯云账号 | 账号:XXXXXXXX 密码:XXXXXXXX | 涉及产品:云数据库MySQL、CVM |
云数据库 MySQL | 账号:root 密码:XXXXXXXX | 无 |
CVM 云服务器 | 账号:root 密码:XXXXXXXX | 无 |
2.3 配置表
购买产品 | 规格 | 备注 |
---|---|---|
腾讯云 CVM*1 | 标准型 S2 1C 1GB | 需购买创建 |
腾讯云 CDB*1 | MySQL5.7,1 核 1000G | 需购买创建 |
腾讯云 DTS | 地域:广州 | 免费 |
3. 实验流程
本课题主要由四个部分组成:
- 创建腾讯云 CVM 服务器,在服务器上完成 MySQL 数据库的安装和部署并创建测试数据。
- 迁移前完成实例的检查和参数的调整。
- 在腾讯云控制台上创建 DTS 数据迁移任务,选择迁移类型和需要迁移的库表。
- 迁移完成后,登录腾讯云数据库 MySQL 查看数据是否成功迁移。
4. 实验步骤
4.1 任务 1 自建数据库准备
【任务目标】
通过本任务的学习,学员能够掌握创建并登录 CVM 云服务器的方法,并在 CVM 上部署 MySQL 数据库。
【任务步骤】
1.购买 CVM 云服务器,用于部署 MySQL 数据库,此步骤是用来模拟自建数据库的。
进入到腾讯云服务器管理控制台中进行购买。
点击【新建】按钮。
选择自定义配置,根据需求选择机型配置信息。在【自定义配置】下,本次实验的选择包括:
计费模式 | 地域 | 可用区 | 网络 | 实例 | 镜像 | 公网带宽 |
---|---|---|---|---|---|---|
按量计费 | 广州 | 广州四区 | Default-VPC | 标准型 S5 | CentOS 64 位 CentOS 7.6 64 位 | 按使用流量 |
在【主机配置】下,本次实验的选择包括:
安全组 | 登录方式 | 其他 |
---|---|---|
【已有安全组】【放通全部端口】 | 【设置密码】【填写密码和确认密码】 | 保持默认设置 |
创建 CVM 成功。
2.在 CVM 上部署自建 MySQL
1)自建 MySQL。
找到创建的 CVM 实例,点击右侧的登录按钮。
点击立即登录。
输入云数据库 MySQL 实例的登录密码。
使用如下命令安装 mysql 源,本次安装的 mysql 源是 mysql 5.7 版本:
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
注意:安装时出现 Is this ok y/N:时输入y 。
使用如下命令安装 mysql。
yum install mysql-community-server
启动 mysql。
systemctl start mysqld
使用命令获取 mysql 的默认密码。
grep 'temporary password' /var/log/mysqld.log
执行以下命令连接 mysql,输入上面自动生成的密码,进入 mysql。
mysql -uroot -p
自建 MySQL 完成。
2)创建迁移账号
由于在下面需要创建迁移账号,而设置账号的密码默认具有一定的限制,如长度不能少于八位、必须含有数字、大小写字母和特殊符号等,因此必须先修改两个全局参数,才能在创建迁移账号时将密码设置成“123456”。
首先,修改 validate_password_policy 参数的值,“=0”即为密码可以只有数字组成。
set global validate_password_policy=0;
其次,validate_password_length(密码长度)参数默认为 8,我们修改为 1,这样默认密码长度可以最小为1。
set global validate_password_length=1;
完成之后再次执行修改密码语句即可成功,为了可以更方便地登录 mysql 本地账号"root"(其中'root'@'localhost'是该账号的账号全名,"root"是用户名,"localhost"表示只有使用本地IP地址登录时该用户名和密码才有效)。
mysql> alter user 'root'@'localhost' identified by '123456';
在该 MySQL 数据库上创建迁移账号"move",并设置密码为"333666",在该账号上建库建表完成迁移(其中'move'@'%'是该账号的账号全名,"move"是用户名,"%"表示使用任何IP地址登录时该用户名和密码都有效)。
create user 'move'@'%' identified by '333666';
向迁移账号授权,使该账号在之后的数据迁移任务校验中通过检查源实例权限。
grant all privileges on *.* to 'move'@'%';
刷新权限。
flush privileges;
”ctrl+z“退出当前本地账号,输入创建的 MySQL 迁移账号的用户名"move"和密码登录"333666"。
mysql -umove -p333666
3.在 MySQL 上创建数据库和测试表
创建 Test 数据库。
create database Test;
show databases;
进入 Test 数据库中,创建 test1 表和 test2 表。
use Test;
create table test1(id int);
create table test2(name varchar(20));
查看已创建表。
show tables;
4.2 任务 2 预先检查项
【任务目标】
通过本任务的学习,学员能够掌握迁移前确认同名库表、数据库版本、源库 MySQL 变量的查看和调整。
【任务步骤】
1.检查目标 TencentDB 实例是否有同名库表,避免冲突。
show databases;
显然无同名库。
显然无同名表。
show tables;
2.检查数据库版本。
可支持 MySQL 5.1/5.5/5.6/5.7 版本迁移上云,由于我们在之前安装的 mysql 源是 5.7 版本的,因此符合迁移条件。
3.检查目标 TencentDB 实例容量必须大于源实例。
由于我们创建的云数据库 MySQL 的规格是【高可用版-1000MB 内存,25GB 存储空间】,所以理论上我们的源实例大小低于 25GB 就可以迁移成功,在本实验中是肯定符合条件的。
4.确认源库 MySQL 变量。
各变量要满足如下条件,才能在后续的迁移数据中完成校验,需要依次检查:
server_id > 1
log_bin = ON
binlog_format = ROW/MIXED
BINLOG_row_image = FULL
innodb_stats_on_metadata = OFF
wait_timeout 建议大于或等于 3600 秒,务必小于 7200 秒
interactive——timeout 与 wait——timeout 设置相同时长
如果源实例为 slave 角色,需要在源实例中确认以下参数:
log_slave_updates = OFF
例如检查'server_id':
show variables like 'server_id';
此时需要将'server_id'改为大于1的数值,我们通常将它改为2。
set global server_id=2;
再次查看变量,结果如下:
由于log_bin变量默认为“OFF”,需要改为“ON”,才可以通过迁移任务校验中的“检查源实例配置”。
修改方法如下:
show variables like 'log_bin';
使用CTRL+Z退出mysql命令行后再执行 vim命令,进入/etc/my.cnf目录下。
vim /etc/my.cnf
将下面变量的修改值直接复制粘贴加入其中(输入命令后按i进入编辑模式,复制粘贴完成后,Esc退出编辑模式,输入:wq保存)。
server_id=2
log_bin=on
binlog_format=ROW
重启数据库。
重新登录迁移账号。
查看log_bin的值,已经修改为“ON”。
show variables like 'log_bin';
修改character_set_server的值,使CVM自建的数据库的该值与要迁移到的云数据库中的该值相同,方法如下:
show variables like 'chara%';
set global character_set_server=utf8;
查看 character_set_server 的值,显示为“utf8”。
show variables like 'character_set_server';
变量修改完成。
4.3 任务 3 创建并配置迁移任务
【任务目标】
通过本任务的学习,学员能够掌握 DTS 数据迁移任务的创建和配置流程。
【任务步骤】
1.创建 DTS 数据迁移服务
- 登陆控制台,进入【数据迁移】页面,单击【新建任务】。
- 填写配置,可为您的迁移任务指定名称和指定开始时间。
- 源库设置:源库类型选择【MySQL】,服务供应商选择【普通】,接入类型选择【公网】,所属地区选择【华南地区(广州)】,主机地址和端口号根据之前创建的 CVM 的主机地址和端口号填写,账号和密码分别为迁移账号的账号和密码,本次实验的账号为move,密码333666。
- 点击测试连通性,验证源库的连接是否成功。
- 通过连通性测试。
- 目标库设置:选择目标数据库的所属地域和实例 ID。
- 点击【保存】按钮,进入迁移任务的下一步配置。
2.选择迁移类型和库列表
在【选择类型及库列表】中,选择类型选择【全量迁移】,选择对象选择【指定对象】,数据库设置选择【Test】,数据一致性检测选择【不检测】,点击【保存】。
3.启动迁移
- 校验迁移任务信息。
- 任务校验存在 3 种状态:通过、警告和失败。
- 在校验通过后,您可以单击【启动】立即开始迁移数据。
4.完成迁移
- 当迁移进度达到 100%时,可单击右侧【完成】,完成迁移任务。
4.4 任务 4 实验验证
【任务目标】
登录云数据库 MySQL,检查数据是否迁移成功。
【任务步骤】
1.实验验证
登录云数据库 MySQL 的DMC数据管理控制台,查看在自建数据库上创建的测试库表是否已经成功迁移。
5. FAQ
1.为什么创建的云数据库 MySQL 实例,不支持 DTS 数据迁移服务?
答:在购买云数据库 MySQL 时,选择高可用版本而非基础版,因为只有高可用版才可进行数据迁移服务。
2.在校验迁移任务信息时,出现了部分信息校验【警告】或【失败】,如何解决?
答:在预先检查项过程中,一定要确认各变量满足如下条件:
server_id > 1
log_bin = ON;
binlog_format = ROW/MIXED
BINLOG_row_image = FULL
innodb_stats_on_metadata = 0
wait_timeout 建议大于或等于 3600 秒,务必小于 7200 秒
interactive——timeout 与 wait——timeout 设置相同时长
如果源实例为 slave 角色,需要在源实例中确认以下参数:
log_slave_updates = 1
否则会在校验是出现报错,即任务校验的状态为【失败】。
查看变量信息使用:
show variables like '[变量名]';
例如:
修改变量信息使用:
set global [变量名] = [XXX];
例如:
6. 注意事项
如实验资源无需保留,请在实验结束后及时销毁,以免产生额外费用。
学员评价