实践教程之PolarDB-X replica原理和使用

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。

PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。

本期实验将指导您关于PolarDB-X replica的原理和使用

本期免费实验地址

本期教学视频地址

前置准备

假设已经根据前一讲内容完成了PolarDB-X的搭建部署,可以成功链接上PolarDB-X数据库。

PolarDB-X作为MySQL的备库

本步骤将指导您如何使用PolarDB-X作为MySQL的备库。

1.建立复制链路。

a.切换至终端一,执行如下命令,登录云服务器ECS_1实例中的MySQL

说明:您需要将如下命令中的替换为云服务器ECS_1实例上的MySQL 8.0的初始密码。

mysql -uroot -p<PASSWORD>

b.执行如下命令,修改MySQL的root用户的初始密码为Aliyun123!

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Aliyun123!';

c.执行如下命令,修改root用户的登录ip白名单

update mysql.user set host='%' where user='root';

d.执行如下命令,使权限相关修改生效

FLUSH PRIVILEGES;

e.执行如下命令,查看最新的binlog File和binlog Position

show master status;

返回结果如下,您可查看到源库的binlog File和binlog Position。

20230314153506.jpg

f.切换至终端二,执行PolarDB-X安装完成后输出的的连接方式,登录PolarDB-X。例如mysql -h127.0.0.1 -P7148 -upolardbx_root -pXXXXXX。
20230314153538.jpg

g.执行如下命令,修改相关参数,建立复制链路。

说明:如果您想了解更多有关MySQL Replica用法,详情请参考MySQL官方文档。

参数说明:

MASTER_HOST:源库主机的主机名(或 IP 地址),本示例填写为云服务器ECS_1实例的私有地址。
MASTER_USER:源库的用户名,本示例填写为云服务器ECS_1实例的MySQL数据库的用户名root。
MASTER_PASSWORD:源库的密码,本示例填写为Aliyun123!。
MASTER_PORT:源库主机的TCP/IP端口,本示例填写为3306。
MASTER_LOG_FILE:复制I/O线程应该在下次线程启动时开始从源库读取的坐标,填写为上一步中从源库获取的binlog File。
MASTER_LOG_POS:复制I/O线程应该在下次线程启动时开始从源库读取的坐标,填写为上一步中从源库获取的binlog Postion。
SOURCE_HOST_TYPE:源库类型,本示例填写为mysql。

CHANGE MASTER TO
    MASTER_HOST='云服务器ECS_1实例的私有地址',            
    MASTER_USER='root',
    MASTER_PASSWORD='Aliyun123!',
    MASTER_PORT=3306,
    MASTER_LOG_FILE='binlog File',
    MASTER_LOG_POS=binlog Postion,
    SOURCE_HOST_TYPE=mysql
FOR CHANNEL 'mysql';

20230314153632.jpg

h.执行如下命令,仅复制新添加的库。由于主备是异构系统,我们将复制仅限于我们即将要新添加的库,防止主库的心跳等数据影响同步。

CHANGE REPLICATION FILTER replicate_do_db=(rpl) for channel 'mysql';

i.执行如下命令,查看链路状态。

SHOW SLAVE STATUS\G

j.执行如下命令,启动链路。

START SLAVE;

2.在master上执行DDL和DML语句。

a.切换至终端一,执行如下命令,创建数据库rpl。

create database rpl;

b.执行如下命令,使用数据库rpl。

use rpl;

c.执行如下命令,创建表example。

create table example (
  `id` bigint(11) auto_increment NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `score` bigint(11) DEFAULT NULL,
  primary key (`id`)
) engine=InnoDB default charset=utf8;

d.执行如下命令,插入数据。

insert into example values(null,'lily',375),(null,'lisa',400),(null,'ljh',500);

e.执行如下命令,查看数据。

select * from example;

返回结果如下,您可以看到源库中有三条数据。
20230314153819.jpg

3.在slave上查看数据

a.切换至终端二,执行如下命令,使用数据库rpl。

use rpl;

b.执行如下命令,查询数据库rpl中的表。

show tables;

c.执行如下命令,查看数据。

select * from example;

返回结果如下,你可查看到源库中的数据已经同步到备库中。
20230314153904.jpg

4.暂停并删除测试链路

a.执行如下命令,暂停链路。

STOP SLAVE;

b.执行如下命令,删除链路。

RESET SLAVE ALL;

c.执行如下命令,查看链路是否删除。

SHOW SLAVE STATUS;

使用PolarDB-X作为PolarDB-X的备库

本步骤将指导您如何使用一个PolarDB-X集群作为另外一个PolarDB-X集群的备库,并进行TPC-C测试。

1.建立复制链路。

a.切换至终端三,执行PolarDB-X安装完成后输出的的连接方式,登录PolarDB-X。例如mysql -h127.0.0.1 -P7148 -upolardbx_root -pXXXXXX。

20230314154017.jpg

b.执行如下命令,查看最新的binlog position。

SHOW MASTER STATUS\G

返回结果如下,您可查看到源库的binlog File和binlog Position。
20230314154054.jpg

c.切换至终端二,执行如下命令,修改相关参数,建立复制链路。

说明:如果您想了解更多有关MySQL Replica用法,详情请参考MySQL官方文档。

参数说明:

MASTER_HOST:源库主机的主机名(或 IP 地址),本示例填写为云服务器ECS_3实例的私有地址。
MASTER_USER:源库的用户名,本示例填写为polardbx_root。
MASTER_PASSWORD:源库的密码,本示例填写为云服务器ECS_3实例的PolarDB-X集群的密码。
MASTER_PORT:源库主机的TCP/IP端口,本示例填写为云服务器ECS_3实例的PolarDB-X集群的端口号。
MASTER_LOG_FILE:复制I/O线程应该在下次线程启动时开始从源库读取的坐标,填写为上一步中从源库获取的binlog File。
MASTER_LOG_POS:复制I/O线程应该在下次线程启动时开始从源库读取的坐标,填写为上一步中从源库获取的binlog Postion。
SOURCE_HOST_TYPE:源库类型,本示例填写为polardbx。

CHANGE MASTER TO
    MASTER_HOST='云服务器ECS_3实例的私有地址',
    MASTER_USER='polardbx_root',
    MASTER_PASSWORD='云服务器ECS_3实例的PolarDB-X集群的密码',
    MASTER_PORT=云服务器ECS_3实例的PolarDB-X集群的端口号,
    MASTER_LOG_FILE='binlog File',
    MASTER_LOG_POS=binlog Postion,
    SOURCE_HOST_TYPE=polardbx
FOR CHANNEL 'tpcc';

d.执行如下命令,仅复制新添加的库。由于主备是异构系统,我们将复制仅限于我们即将要新添加的库,防止主库的心跳等数据影响同步

CHANGE REPLICATION FILTER replicate_do_db=(tpcc);

e.执行如下命令,启动链路。

START SLAVE;

f.执行如下命令,查看链路状态

SHOW SLAVE STATUS\G

2.TPC-C测试。

a.首先请阅读PolarDB-X TPCC测试指南,了解PolarDB TPCC测试。

b.切换至终端三,执行如下命令,创建数据库tpcc。

create database tpcc;

c.输入exit退出PolarDB-X集群。

d.执行如下命令,使用yum安装JDK 1.8。

yum -y install java-1.8.0-openjdk*

e.执行如下命令,下载压测工具包。

wget https://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/file-manage-files/zh-CN/40302202/cgaj_benchmarksql.tar.gz

f.执行如下命令,解压压测工具包。

tar xzvf cgaj_benchmarksql.tar.gz

g.执行如下命令,编辑props.mysql配置文件。填入对应的PolarDB-X实例连接信息。

cd benchmarksql/run  vim props.mysql

h.在props.mysql配置文件中,按下i键进入编辑模式,修改如下参数后,按下Esc键后,输入:wq后按下Enter键保存并退出。

参数说明:

HOST:主机名{HOST},在本示例中您需要将{HOST}替换为127.0.0.1。
PORT:端口号{PORT},在本示例中您需要将{PORT}替换为云服务器ECS_3实例的PolarDB-X集群的端口号。
user:用户名,在本示例中您需要将{USER}替换为云服务器ECS_3实例的PolarDB-X集群的用户名polardbx_root。
password:密码,在本示例中您需要将{PASSWORD}替换为云服务器ECS_3实例的PolarDB-X的密码。
warehouses:仓库数,在本示例中填写为1。
loadWorkers:导入数据并发数,在本示例中填写为1。
terminals:压测并发数,在本示例中填写为5。
runMins:压测时间,在本示例中填写为2。
20230314154301.jpg

i.执行如下命令,导入压测数据。

nohup ./runDatabaseBuild.sh props.mysql &

j.按下Ctrl+C键后,执行如下命令,查看导入压测数据的日志。

cat nohup.out

请您等待大约3分钟,压测数据的日志返回结果如下,表示压测数据已成功导入。

说明:由于实验室资源有限,此处使用非生产规格实例,导致压测数据导入速度较慢。
20230314154345.jpg

k.执行云服务器ECS_3实例的PolarDB-X集群安装完成后输出的的连接方式,登录PolarDB-X。例如mysql -h127.0.0.1 -P7148 -upolardbx_root -pXXXXXX。

l.待数据导入完毕后,执行如下命令,在源端验证压测数据的完整性。

use tpcc;
select a.* from (Select w_id, w_ytd from bmsql_warehouse) a left join (select d_w_id, sum(d_ytd) as d_ytd_sum from bmsql_district group by d_w_id) b on a.w_id = b.d_w_id and a.w_ytd = b.d_ytd_sum where b.d_w_id is null;
select a.* from (Select d_w_id, d_id, D_NEXT_O_ID - 1 as d_n_o_id from bmsql_district) a left join (select o_w_id, o_d_id, max(o_id) as o_id_max from bmsql_oorder group by  o_w_id, o_d_id) b on a.d_w_id = b.o_w_id and a.d_id = b.o_d_id and a.d_n_o_id = b.o_id_max where b.o_w_id is null;
select a.* from (Select d_w_id, d_id, D_NEXT_O_ID - 1 as d_n_o_id from bmsql_district) a left join (select no_w_id, no_d_id, max(no_o_id) as no_id_max from bmsql_new_order group by no_w_id, no_d_id) b on a.d_w_id = b.no_w_id and a.d_id = b.no_d_id and a.d_n_o_id = b.no_id_max where b.no_id_max is null;
select * from (select (count(no_o_id)-(max(no_o_id)-min(no_o_id)+1)) as diff from bmsql_new_order group by no_w_id, no_d_id) a where diff != 0;
select a.* from (select o_w_id, o_d_id, sum(o_ol_cnt) as o_ol_cnt_cnt from bmsql_oorder  group by o_w_id, o_d_id) a left join (select ol_w_id, ol_d_id, count(ol_o_id) as ol_o_id_cnt from bmsql_order_line group by ol_w_id, ol_d_id) b on a.o_w_id = b.ol_w_id and a.o_d_id = b.ol_d_id and a.o_ol_cnt_cnt = b.ol_o_id_cnt where b.ol_w_id is null;
select a.* from (select d_w_id, sum(d_ytd) as d_ytd_sum from bmsql_district group by d_w_id) a left join (Select w_id, w_ytd from bmsql_warehouse) b on a.d_w_id = b.w_id and a.d_ytd_sum = b.w_ytd where b.w_id is null;

返回结果如下,若结果集均为空,则证明压测数据完整。
20230314154456.jpg

m.输入exit退出PolarDB-X集群。

n.执行如下命令,运行TPC-C测试。

./runBenchmark.sh props.mysql
返回结果如下,运行TPC-C测试后可以您看到实时的tpmC数值。请您耐心等待2分钟后,运行结束后会显示平均的tpmC数值。

20230314154523.jpg

o.执行云服务器ECS_3实例的PolarDB-X集群安装完成后输出的的连接方式,登录PolarDB-X。例如mysql -h127.0.0.1 -P7148 -upolardbx_root -pXXXXXX。

p.分别在终端二和终端三的PolarDB-X集群中执行如下命令,进行数据校验。

use tpcc;
select bit_xor(crc32(CONCAT_WS(',', `ol_w_id`, `ol_d_id`, `ol_o_id`, `ol_number`, `ol_i_id`, `ol_amount`, `ol_supply_w_id`, `ol_quantity`, `ol_dist_info`))) as checksum from  bmsql_order_line;

当源端和目标端返回结果一致时,表示两侧数据一致,replica保证了数据的一致性。

清理现场和回收资源

本步骤将指导您如何停止MySQL服务和删除PolarDB-X集群。

说明:在云起实验室中您可直接在页面右上角单击结束实验,即可释放所有资源。

1.停止MySQL服务。

a.切换至终端一,输入exit退出MySQL数据库。

b.执行如下命令,停止MySQL服务。

systemctl stop mysqld.service

2.删除PolarDB-X集群。

a.切换至终端二,输入exit退出PolarDB-X集群。

b.执行如下命令,删除云服务器ECS_2实例的PolarDB-X集群。

pxd cleanup

c.切换至终端三,输入exit退出PolarDB-X集群。

d.执行如下命令,删除云服务器ECS_3实例的PolarDB-X集群。

pxd cleanup

本文来源:PolarDB-X知乎号

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
2月前
|
存储 SQL 安全
应用案例|开源 PolarDB-X 在互联网安全场景的应用实践
中盾集团采用PolarDB-X云原生分布式数据库开源版本,有效解决了大数据量处理、复杂查询以及历史数据维护等难题,实现了业务的高效扩展与优化。
|
3月前
|
存储 Cloud Native 关系型数据库
PolarDB 高可用架构设计与实践
【8月更文第27天】 在现代互联网应用中,数据库作为核心的数据存储层,其稳定性和可靠性尤为重要。阿里云的 PolarDB 作为一款云原生的关系型数据库服务,提供了高可用、高性能和自动化的特性,适用于各种规模的应用。本文将详细介绍 PolarDB 的高可用架构设计,并探讨其实现数据安全性和业务连续性的关键技术。
99 0
|
24天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
25天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
4月前
|
存储 关系型数据库 MySQL
深度评测:PolarDB-X 开源分布式数据库的优势与实践
本文对阿里云开源分布式数据库 PolarDB-X 进行了详细评测。PolarDB-X 以其高性能、强可用性和出色的扩展能力在云原生数据库市场中脱颖而出。文章首先介绍了 PolarDB-X 的核心产品优势,包括金融级高可靠性、海量数据处理能力和高效的混合负载处理能力。随后,分析了其分布式架构设计,包括计算节点、存储节点、元数据服务和日志节点的功能分工。评测还涵盖了在 Windows 平台通过 WSL 环境部署 PolarDB-X 的过程,强调了环境准备和工具安装的关键步骤。使用体验方面,PolarDB-X 在处理分布式事务和实时分析时表现稳定,但在网络问题和性能瓶颈上仍需优化。最后,提出了改进建
7018 2
|
4月前
|
关系型数据库 分布式数据库 数据库
基于PolarDB的图分析:保险数据分析实践
本文以公开的保险数据集为例,示例了基于云原生数据库PolarDB上,在保险理赔场景下,执行图查询来发现异常理赔记录和欺诈团伙:例如,查询与欺诈保单有相同理赔病人的其他保单,或者找出欺诈保单的投保人社交关系,以便进行欺诈预警。PolarDB在关系型数据库的基础上,提供了图分析能力,为企业的统一数据管理和分析,提供了强有力的支撑。
|
4月前
|
存储 关系型数据库 数据库
关系型数据库设计范式:深入理解与实践
【7月更文挑战第20天】关系型数据库设计范式是数据库设计中的重要指导原则,它通过一系列规范来减少数据冗余、提高数据一致性和优化查询性能。在实际应用中,我们应该根据具体需求和数据特点,灵活选择和应用不同的范式级别,以构建高效、可靠和可扩展的数据库系统。同时,也需要注意范式设计带来的挑战和限制,根据实际情况进行权衡和调整。
|
5月前
|
运维 关系型数据库 分布式数据库
PolarDB产品使用问题之列存索引的原理是什么
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
6月前
|
安全 关系型数据库 分布式数据库
【PolarDB 开源】PolarDB 在金融行业中的实践:高可用与安全合规解决方案
【5月更文挑战第28天】PolarDB,一款适用于金融行业的强大数据库,以其高可用性和安全合规性脱颖而出。通过多副本机制和自动故障转移确保业务连续性,结合严格的访问控制和数据加密技术保护信息安全。在实际应用中,如银行核心系统,PolarDB 负责处理海量交易数据,同时支持主从架构以备故障切换。此外,设置强密码策略和加密存储确保合规性,并通过监控预警及时解决问题。随着金融科技发展,PolarDB 将在云原生架构和人工智能等领域发挥更大作用,助力金融行业创新与进步。
171 0
|
6月前
|
负载均衡 关系型数据库 分布式数据库
【PolarDB开源】PolarDB读写分离实践:优化读取性能与负载均衡策略
【5月更文挑战第26天】PolarDB是云原生关系型数据库,通过读写分离优化性能和扩展性。它设置主节点处理写操作,从节点处理读操作,异步复制保证数据一致性。优化读取性能的策略包括增加从节点数量、使用只读实例和智能分配读请求。负载均衡策略涉及基于权重、连接数和地理位置的分配。实践示例中,电商网站通过主从架构、只读实例和负载均衡策略提升商品查询效率。PolarDB的读写分离与负载均衡为企业应对大数据和高并发提供了有效解决方案。
241 0

相关产品

  • 云原生数据库 PolarDB