4.1 实验介绍
4.1.1 关于本实验
本实验通过搭建简易 web 和自建 mysql,并进行数据库迁移,通过实操了解华为云的特性功
能。
4.1.2 实验目的
理解华为云数据库服务的基本原理。
理解 RDS,DRS 迁移服务的使用场景。
4.1.3 实验组网介绍
本实验首先在 ECS 上自建主备数据库及数据库中间件,体验运维人员实地部署数据库的操
作。然后通过 DRS 服务将自建数据库迁移到华为云 RDS,了解云上 RDS 的便捷性及迁移服
务 DRS 的使用。
HCIE-Cloud Service Solutions Architect 实验指导手册 第 212 页
表4-1 数据库IE 认证实验拓扑图
4.2 实验步骤
4.2.1 新增 VPC
步骤 1 VPC 参数
表4-2 VPC01 参数表
名称 参数
vpc01
区域:根据实验要求
网段:172.16.0.0/16
Subnet-terminal:
172.16.0.0/24
步骤 2 确认新建的 VPC
步骤 3 确认安全组
新建主机安全组 sg-migrate,将 22、80、443、3389 端口面向所有来源开通,确认需要开
通的端口号:
新建数据库的安全组 sg-mysql,确认端口 3306 向 vpc01 开放:
新建 mycat 的安全组 sg-mycat,确认端口 3310 向 vpc01 开放
4.2.2 新增云服务器 ECS-WEB01
步骤 1 选择弹性云服务器 ECS
选择 ECS 服务
点击购买
步骤 2 确认 ECS 的参数
ECS-WEB01 参数表:
参数 参数介绍 参数值
ECS参数
计费模式 按需计费
区域 根据实际情况而定
可用区 可用区1
规格 1vCPUs|2GB
镜像 Centos7.5
系统盘 普通IO,40G/SATA
云服务器备份 否
虚拟私有云 vpc01
安全组 sg-migrate
弹性公网IP
现在购买
规格:全动态BGP
计费方式:按流量计费/按宽带计
费
带宽:10Mbit/s
登录方式
密码或者秘钥(秘钥方式需要自行
保管私钥)
用户名/密码 root/自行设置并保管
高级配置 暂不配置
云服务名称 ECS-WEB01
购买数量 1
步骤 3 安装 httpd
通过终端模拟工具或者控制台登录 ECS-WEB01,通过以下命令安装 httpd
yum install httpd –y
步骤 4 安装 php
通过以下命令安装 php:
yum install -y php
通过以下命令安装相关组件
yum install -y php-pdo.x86_64 php-mysql
HCIE-Cloud Service Solutions Architect 实验指导手册 第 217 页
4.2.3 Mysql 主从部署
步骤 1 新增 ECS 实例 ECS-DB01
ECS-DB01 参数表:
参数 参数介绍 参数值
ECS 参数
计费模式 按需计费
区域 根据实际情况而定
可用区 可用区 1
规格 1vCPUs|2 核
镜像 Centos7.6
系统盘 普通 IO,40G/SATA
云服务器备份 否
虚拟私有云 vpc01
安全组 sg-mysql
弹性公网 IP 按流量 10Mb
登录方式
密码或者秘钥(秘钥方
式需要自行保管私钥)
用户名/密码 root/自行设置并保管
高级配置 暂不配置
云服务名称 ECS-DB01
购买数量 1
参考 4.2.2 步骤 2、步骤 3 购买 ECS 实例,ECS 名称为 ECS-DB01
步骤 2 新增 ECS 实例 ECS-DB02
ECS-DB02 参数表:
参数 参数介绍 参数值
ECS参数
计费模式 按需计费
区域 根据实际情况而定
可用区 可用区2
规格 s3.medium.1
镜像 Centos7.6
系统盘 高IO,40G/SATA
云服务器备份 否
虚拟私有云 vpc01
安全组 sg-mysql
弹性公网IP 按流量10Mb
登录方式
密码或者秘钥(秘钥方式需要自行
保管公钥)
用户名/密码 root/自行设置并保管
高级配置 暂不配置
云服务名称 ECS-DB02
购买数量 1
参考 4.2.2 步骤 2、步骤 3 购买 ECS 实例,ECS 名称为 ECS-DB02
步骤 3 确认已经购买的 ECS-DB 实例
确认两台 ECS-DB 不在同一个可用区
步骤 4 在 ECS-DB01 上部署 mysql
首先通过 ssh 登录或者控制台远程登录 ECS-DB01
步骤 5 在 ECS-DB01 上安装 mysql
通过下面的命令安装 mysql:
wget https://hcie-lab-2020.obs.cn-north-4.myhuaweicloud.com/mysql-community-release-el7-
5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-server -y
结果如下:
步骤 6 在 ECS-DB01 上启动 mysql
通过以下命令启动 mysql:
systemctl start mysqld
步骤 7 在 ECS-DB01 上修改 mysql 密码
首先通过以下命令登录 mysql:
mysql -u root
然后在 mysql>界面通过以下命令修改 mysql 的 root 密码为“Huawei@123!”:
use mysql
update user set password=PASSWORD("Huawei@123!") where User='root';
修改完毕通过以下命令退出 mysql:
quit
步骤 8 确认 ECS-DB01 的 mysql 状态
netstat -nutple|grep 3306
步骤 9 配置 ECS-DB01 为主库
登录 ECS-DB01,修改配置文件,通过以下命令备份 mysql 配置文件:
mv /etc/my.cnf /etc/my.cnf.bak
通过以下整段命令新增新的 my.cnf 配置文件:
cat << EOF >> /etc/my.cnf
[mysqld]
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
lower_case_table_names = 1
innodb_strict_mode = 1
sql_mode =
symbolic-links=0
character_set_server = utf8
log-bin = mysql-bin
binlog_format=row
server-id = 2
expire_logs_days = 10
slave_skip_errors = 1062
log_slave_updates = 1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
EOF
通过以下命令确认 mysql 配置文件:
cat /etc/my.cnf
通过以下命令重启 mysqld:
systemctl restart mysqld
步骤 10 在 ECS-DB01 上设置同步账户
首先通过以下命令登录 ECS-DB01 的 mysql:
mysql -pHuawei@123!
在 mysql>界面输入以下命令新建同步账户:
create user 'copy'@'172.16.%' identified by 'huawei@123';
在 mysql>界面输入以下命令为同步账户授予复制权限:
grant replication slave on *.* to 'copy'@'172.16.%' identified by 'huawei@123';
在 mysql>界面输入以下命令为 root 账户授予 vpc01 访问呢权限:
grant all privileges on *.* to 'root'@'172.16.%' identified by 'Huawei@123!';
在 mysql>界面输入以下命令使配置生效:
flush privileges;
步骤 11 记录 binlog 信息
确认主库 binlog 的 File 值和 Position 值,并记录,用于后续配置从库同步:
show master status;
步骤 12 在 ECS-DB02 上部署 mysql
参考 4.2.3 的步骤 4~步骤 7 安装 mysql,先不退出 mysql
步骤 13 为 ECS-DB02 的 root 设置访问权限
在 mysql>界面输入以下命令为 root 用户授予 vpc01 访问权限:
grant all privileges on *.* to 'root'@'172.16.%' identified by 'Huawei@123!';
步骤 14 确认 mysql 服务已经正常
通过以下命令确认服务正常:
netstat -nutpel|grep 3306
步骤 15 设置 ECS-DB02 为从库
登录 ECS-DB02,通过以下命令备份 mysql 配置文件:
mv /etc/my.cnf /etc/my.cnf.bak
通过复制以下整段命令执行配置从库的配置文件:
cat << EOF >> /etc/my.cnf
[mysqld]
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
sql_mode =
lower_case_table_names = 1
innodb_strict_mode = 1
log-bin = mysql-bin
binlog_format=row
character_set_server = utf8
server-id = 3
read-only = 1
expire_logs_days = 10
slave_skip_errors = 1062
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
EOF
步骤 16 确认配置文件
通过以下命令确认文件:
cat /etc/my.cnf
步骤 17 重启 ECS-DB02 的 mysql
通过以下命令重启 mysqld:
systemctl restart mysqld
步骤 18 记录 ECS-DB01 的内网 IP 地址
登录 ECS-DB01,通过 ifconfig 命令查看内网 IP 地址,并记录 IP 地址,用于下一步骤使用
步骤 19 设置 ECS-DB02 为从库
通过以下命令登录 ECS-DB02 的 mysql 数据库:
mysql -pHuawei@123!
输入以下命令设置 ECS-DB01 为从库:
CHANGE MASTER TO MASTER_HOST='步骤 17 中 ECS-DB01 的内网 ip', MASTER_USER='copy',
MASTER_PASSWORD='huawei@123', MASTER_LOG_FILE='步骤 11 中记录的 File',
MASTER_LOG_POS=步骤 11 中记录的 position;
步骤 20 开启主从同步
在 mysql>界面输入以下命令:
start slave;
步骤 21 查看主从同步状态
在 mysql>界面输入以下命令查看同步状态,查看 Slave_IO_Running 和
Slave_SQL_Running 的状态。
show slave status \G;
步骤 22 在 ECS-DB01 的 mysql 中插入数据表
登录 ECS-DB01 的 mysql 数据库:
mysql -pHuawei@123!
通过以下命令新建库:
create database demo;
通过以下命令创建数据表:
use demo;
CREATE TABLE IF NOT EXISTS `users` (`id` INT UNSIGNED AUTO_INCREMENT, `firstname`
VARCHAR(100) NOT NULL, `lastname` VARCHAR(100) NOT NULL, PRIMARY
KEY(`id`))ENGINE=InnoDB DEFAULT CHARSET=utf8;
通过以下命令插入数据:
insert into users values (1, 'Kelton', 'Hoover');
insert into users values (2, 'Siena', 'Alvarado');
insert into users values (3, 'Zayden', 'Bennett');
insert into users values (4, 'Kinley', 'Carter');
insert into users values (5, 'Athena', 'Wallace');
insert into users values (6, 'Gavin', 'Duran');
insert into users values (7, 'Alyssa', 'Oneill');
insert into users values (8, 'Kylan', 'Branch');
insert into users values (9, 'Nigel', 'Rodriguez');
insert into users values (10, 'Mackenzie', 'Watson');
insert into users values (11, 'Cara', 'Richard');
insert into users values (12, 'Madyson', 'Macdonald');
insert into users values (13, 'Jordin', 'Stanton');
insert into users values (14, 'Sidney', 'Dean');
insert into users values (15, 'Lainey', 'Skinner');
insert into users values (16, 'Adalyn', 'Sellers');
insert into users values (17, 'Alisson', 'Blake');
insert into users values (18, 'Jamarcus', 'Clarke');
insert into users values (19, 'Yoselin', 'Yoder');
insert into users values (20, 'Holden', 'Bridges');
步骤 23 登录 ECS-DB02 的 mysql,查看同步是否生效
在 ECSDB02 上通过以下命令查看同步信息
首先通过以下命令登陆 mysql:
mysql -pHuawei@123!
然后通过命令 show databases;查看公告新建的库是否已经正常同步:
使用 demo 库:
use demo
查看表数据:
select * from users;
数据能够查看到说明同步正常
如果同步失败,请查看错误日志
4.2.4 部署 mycat
步骤 1 新增一台 ECS 部署 mycat
ECS- mycat01 参数表
参数 参数介绍 参数值
ECS参数
计费模式 按需计费
区域 根据实际情况而定
可用区 可用区1
规格 1vCPUs|1GB
镜像 Centos7.5
系统盘 普通IO,40G/SATA
云服务器备份 否
虚拟私有云 vpc01
安全组 sg-mycat
弹性公网IP 按流量5Mb
登录方式
密码或者秘钥(秘钥方式需要自行
保管私钥)
用户名/密码 root/自行设置并保管
高级配置 暂不配置
云服务名称 ECS-mycat01
购买数量 1
步骤 2 部署 mycat
登录 ECS-mycat01,通过以下命令下载 mycat,并安装到目录/usr/local:
wget https://hcie-lab-2020.obs.cn-north-4.myhuaweicloud.com/Mycat-server-1.6-RELEASE-
20161028204710-linux.tar.gz
tar -xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
mv mycat /usr/local/ -f
步骤 3 安装 java
通过以下命令安装 java:
yum install -y java-1.8.0-openjdk
步骤 4 修改 mycat 数据库配置文件
通过以下命令设置切换到 mycat 配置文件目录:
cd /usr/local/mycat/conf
通过以下命令修改 mycat 配置文件 schema.xml(将红色字体替换为实际的值):
mv schema.xml schema.xml.bak
masterdb=主库地址(ECS-DB01 的内网 ip 地址)
slavedb=从库地址(ECS-DB02 的内网 ip 地址)
cat << EOF >> schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="copydb" checkSQLschema="false" sqlMaxLimit="100"
dataNode="copynode"></schema>
<dataNode name="copynode" dataHost="dthost" database="demo" />
<dataHost name="dthost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostmaster" url="$masterdb:3306" user="root"
password="Huawei@123!">
<!-- can have multi read hosts -->
<readHost host="hostslave" url="$slavedb:3306" user="root"
password="Huawei@123!"
weight="1" />
</writeHost>
</dataHost>
</mycat:schema>
EOF
确认已经修改的配置文件:
cat schema.xml
如果 IP 地址错误请通过 vi 编辑并修改 IP 地址
步骤 5 修改 mycat 服务配置文件
通过以下命令设置 mycat 配置文件 server.xml:
cd /usr/local/mycat/conf
mv server.xml server.xml.bak
cat << EOF >> server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property>
<property name="useGlobleTableCheck">0</property>
<property name="serverPort">3310</property>
<property name="manageport">9066</property>
<property name="sequnceHandlerType">2</property>
<property name="processorBufferPoolType">0</property>
<property name="frontWriteQueueSize">4096</property>
<property name="processors">32</property>
<property name="handleDistributedTransactions">0</property>
<property name="useOffHeapForMerge">1</property>
<property name="memoryPageSize">1m</property>
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<property name="systemReserveMemorySize">384m</property>
<property name="useZKSwitch">true</property>
</system>
<user name="root">
<property name="password">Huawei@123!</property>
<property name="schemas">copydb</property>
</user>
<user name="user">
<property name="password">Huawei@123!</property>
<property name="schemas">copydb</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
EOF
确认 mycat 服务的配置文件
cat server.xml
步骤 6 启动 mycat
通过以下命令启动 mycat:
cd /usr/local/mycat/bin
./mycat start
通过以下命令查看 mycat 的状态:
netstat -nutple|grep 3310
步骤 7 验证 mycat
使用 mysql 命令通过 3310 端口登录数据库
yum install -y mysql
mysql -h127.0.0.1 -uroot -P3310 -pHuawei@123!
show databases;
use copydb;
select * from users;
4.2.5 部署 php 代码
步骤 1 部署 php 代码
登录 ECS-WEB01 虚机,执行如下命令(将红色字体替换为实际值):
cd /var/www/html/
mycatip="mycat 虚机的内网 ip 地址"
cat << EOF >>index.php
<!DOCTYPE html>
<html>
<body>
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct(\$it) {
parent::__construct(\$it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
\$servername = "$mycatip";
\$username = "root";
\$password = "Huawei@123!";
\$dbname = "copydb";
\$dbport = 3310;
try {
\$conn = new PDO("mysql:host=\$servername;port=\$dbport;dbname=\$dbname",
\$username, \$password);
\$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
\$stmt = \$conn->prepare("SELECT id, firstname, lastname FROM users");
\$stmt->execute();
// set the resulting array to associative
\$result = \$stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator(\$stmt->fetchAll())) as \$k=>\$v) {
echo \$v;
}
}
catch(PDOException \$e) {
echo "Error: " . \$e->getMessage();
}
\$conn = null;
echo "</table>";
?>
</body>
</html>
EOF
步骤 2 启动 httpd 服务
使用以下命令开启 httpd:
systemctl start httpd
步骤 3 验证 web 服务是否能正常访问
打开浏览器,输入 ECS-WEB01 的外网 IP 查看是否能显示名字列表:
4.2.6 迁移到 RDS 数据库
步骤 1 购买数据库
首先打开云数据库 RDS 界面:
点击“购买数据库实例”
步骤 2 选择 RDS 购买参数
RDS 参数表:
参数 参数介绍 参数值
RDS参数
计费模式 按需计费
区域 根据实际情况而定
实例名称 随机生成
数据库引擎 MySQL
数据库版本 5.6
实例类型 单机(本次实验使用单机)
存储类型 超高IO
可用区 按实际情况选择
时区 UTC+8
性能规格 1核|2 GB
存储空间 40GB
磁盘加密 不加密
虚拟私有云(VPC) vpc01
高级配置 暂不配置
内网安全组 sg-mysql
管理员账户名 root
管理员密码 Huawei@123!
确认密码 Huawei@123!
参数 默认即可
标签 无
购买数量 1
只读实例 暂不购买
参数确认完毕后,点击“立即购买”
确认无误后点击“提交”
步骤 3 确认已经购买的 RDS 服务
等到 RDS 实例创建完毕
步骤 4 点击实例名称
步骤 5 点击参数修改,搜索 innodb_strict_mode 参数,将值由 off 改为 on,点击保存
步骤 6 创建迁移任务
进入数据复制服务 DRS
步骤 7 创建迁移任务
点击“创建迁移任务”
DRS 场景选择参数表:
参数 参数介绍 参数值
场景选择
源数据库来源 本云ECS自建库
目标数据库来源 本云云数据库
参数确认完毕后,点击“下一步”
步骤 8 迁移实例设置
迁移实例配置表:
参数 参数介绍 参数值
迁移实例
区域 按实际情况填写
任务名称 使用默认
数据流动方向 入云
源数据库引擎 MySQL
目标数据库引擎 MySQL
网络类型 VPC网络
目标数据库实例 步骤3购买的RDS实例
目标库读写设置 读写(请确认必须为读写)
迁移模式 全量+增量
步骤 9 源库及目标库设置
等待迁移实例创建成功;
填写源库信息,并通过“测试连接”按钮确认“测试成功”
源库信息配置表:
参数 参数介绍 参数值
源库信息
源库类型 ECS自建数据库
VPC 创建好的VPC01
IP地址或域名 ECS-DB01的内网IP地址
端口 3306
数据库用户名 root
数据库密码 Huawei@123!
目标库信息配置表:
参数 参数介绍 参数值
目标库信息 数据库实例名称 步骤3购买的RDS实例名称
数据库用户名 root
数据库密码 Huawei@123!
填写目标库信息,并通过“测试连接”按钮确认“测试成功”
源库和目标库都测试成功后,点击“下一步”
步骤 10 迁移设置
迁移设置配置表:
参数 参数介绍 参数值
迁移设置
流速模式 不限速
过滤DROP DATABASE 是
迁移用户 不迁移
迁移对象 全部迁移
步骤 11 预检查
等待检查完毕
确认所有参数正常后点击“下一步”,如果存在告警信息请按照提示修改参数或者确认 mysql
配置文件
步骤 12 参数确认
确认参数后点击“下一步”
步骤 13 启动迁移任务
确认无误后点击“立即启动”,接着点击“启动任务”
等待迁移完成
步骤 14 查看迁移任务
确认任务状态,等待迁移完成
等待状态变为“增量迁移”
步骤 15 登录 rds 验证迁移结果
打开 RDS 管理列表,点击“登录”
输入用户名(root)和密码(Huawei@123!)
点击库名 demo
找到 users 表,点击“打开表”
打开 users 表查看结果:
步骤 16 在 RDS 新增列
点击“新增”,并手动插入一条数据
确认后点击“提交编辑”
在弹出的窗口点击“确定”
步骤 17 配置只读数据库
打开 RDS 实例控制台,点击查看 RDS 实例详情
点击“创建只读”:
在不同的可用区创建只读数据库
确认完毕后点击“提交”购买只读实例
步骤 18 查看只读实例
在 RDS 控制台查看只读实例
等待只读库创建完毕
步骤 19 记录 RDS 主库和 RDS 只读实例的 IP 地址
分别记录 RDS 主库和 RDS 只读实例的 IP 地址,准备下一步的迁移操作
步骤 20 myscat 后端数据库迁移到 RDS
登录 mycat 虚机,修改配置文件,确认主库、从库、RDS 的内网 ip 地址(将红色替换为实
际值)
cd /usr/local/mycat/conf
sed -i "s/主库 ECS-DB01 的内网 IP 地址/RDS 主库的内网 IP 地址/g" schema.xml
sed -i "s/从库 ECS-DB02 的内网 IP 地址/RDS 只读实例的内网 IP 地址/g" schema.xml
确认是否修改成功:
cat schema.xml
步骤 21 重启 mycat
通过以下命令重启 mycat:
cd /usr/local/mycat/bin
./mycat restart
步骤 22 验证 web 是否正常
在浏览器输入 ECS-WEB01 的外网 IP,查看新插入的数据是否可以正常显示
步骤 23 关闭迁移实例
结束任务
任务结束后删除任务
步骤 24 删除 ECS 数据库实例
ECS 数据库实例已经成功迁移到 RDS 服务,打开 ECS 控制台,删除实例 ECS-DB01 和 ECS-
DB02
4.3 结果验证
4.3.1 在 web 端验证结果
在浏览器输入 ECS-WEB01 的外网 IP,查看新插入的数据是否可以正常显示: