服务器架构之性能扩展-第四章(5)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

第四章、MYSQL主从复制和分区技术

Mysql作为web数据库,对于越来越大的数据存储,主从复制、分区技术和SQL语句优化,对于提高访问量有很大的帮助。

 

 

4.1mysql用户授权

主服务器首先对远程服务器建立一个授权用户,可以在从服务器上登录主服务器的数据库。

Mysqlgrant all on *.* to user@192.168.10.2 identified by "123";

Mysql>use mysql

Mysql>select user,password,host from user;   //查看用户情况


 

测试:从服务器登陆,可以看到内容和主服务器是一样的


4.2 mysql bin-log日志

Mysqlbin-log日志是记录与数据的增删改查有关的数据库语句。于是bin-log可以作为数据库恢复的文件来使用,也是mysql能够主从复制的基础。

4.2.1开启mysqlbin-log日志

Vi /etc/my.cnf

Log-bin=mysql-bin   //增加这个语句,重启mysql即可

4.2.2查看是否开启bin-log

Mysql>show variables like ‘%bin%’;

 


1.2.3.mysqlbin-log日志管理

mysql>flush logs;   //此时就会多一个新的bin-log日志

mysql>show master status;  //查看目前使用的bin-log日志

mysql>reset master;  //清空所有日志

4.2.4bin-log进行数据的备份和恢复

备份数据库:测试数据库名为test,表为t

Mysqldump –uroot –p test –l –F > ‘/tmp/test.sql’ 

-L锁定表,-F是刷新bin-log日志,这样便可以用刷新之前的日志进行恢复到备份时刻

Mysql>insert into t values(1);  //插入新纪录

Mysq>flush logs;

Mysql>drop table t;        //删除表

恢复数据库

Mysql test </tmp/test.sql  

如果要恢复数据库备份后那段时间的记录,就需要恢复bin-log日志

Mysqlbinlog mysql-00002.bin |mysql –uroot –p test

 

下图是bin-log的日志内容我们可以看到它是包含position点的。恢复日志也可以指定position点。--stop-position=193.


4.3mysql主从复制

Mysql主从复制的优点:

1.如果主服务器出现问题,可以快速切换到从服务器提供服务

2.可以在从服务器上执行查看操作,降低主服务器的访问压力

3.可以在从服务器上执行备份,以避免备份期间影响主服务器的服务

4.3.1Mysql主服务器的配置:

Mysql>grant all slave on *.* to saisai@192.168.10.2 identified by “123”;

Vi /etc/my.cnf

Log-bin=mysql-bin       //开启log-bin功能

Server-id=1               //指定server ID

Service mysql restart

Mysql>show master status;    //查看是否开启和bin ID

4.3.2mysql从服务器的配置

Vi /etc/my.cnf


指定主服务器ipserver id(这里id要不为1),以及主服务器的端口和连接主服务器的用户名和密码,开启bin-log,然后重启mysql服务器,同步之前要确保主从服务器有相同的数据库名和表结构。

Mysql>show slave status\G


这里要保证两个yes选项,第一个slave_io_running yes表示可以成功从主服务器上读取binlog日志并写入从服务上,第二个slave_Sql_runningyes表示可以成功读取本机binlog日志同步数据。可以看到它们也具有相同的bin-log

如果数据无法同步:

如果是slave_io_running失败,要检查一下从数据库能否登陆主数据,然后检查从数据库是否和主数据有一致的数据库和表结构。

如果是slave_sql_running失败,要检查从服务是否启动和配置文件。

slave stop set global sql_slave_skip_counter=1;slave start.

4.4Mysql表分区

4.4.1分区技术简介

mysql的数据记录超过千万或上亿条纪录时,数据的性能会出现下降,这时就要用到分表分区技术或优化sql语句的方法来提高数据库的使用效率。

分表技术通常有垂直分表和水平分表,垂直分表是对数据库字段进行分表;水平分表是对数据记录进行分表。垂直分表技术复杂,不易操作,水平分表更常用。

水平分表可以将一个表分成多个表,但是如果多个表使用不同的表名,则查询语句要更改,于是引入了分区分表的概念,它不改变表名。

分区分表是在逻辑层进行水平分表,对与应用程序而言,它依然是一张表。Mysql5.1中,它有5钟分区类型:

4.4.2分区技术类型

Range分区:基于属于一个给定的连续区间的列值,把匹配的多行分配给相应分区

List分区:类似range分区,区别在于list分区是基于列值匹配一个离散值集合中的某个值来进行选择

Hash分区:基于用户定义的表达式的返回值进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算,这个函数可以包含mysql中有效的,产生非负整数值的任何表达式

Key分区:类似于hash分区,区别在于key分区只支持计算一列或多列,且mysql服务器提供其自身的哈希函数

查看mysql的版本信息:mysql>status;


查看是否支持分区技术:mysql>show plugins;  //看到partion选项


4.4.3range分区技术

1:假定如下的表,该表有20加音像店的职员记录,这二十家的音像编号从120,如果采用range分区为4个小分区,如何实现呢?

Mysql>create table employees(

>id int not null,

>fname varchar(30),

>lname varchar(30),

>hired date not null default ‘1970-01-01’,

>separated date not null default ‘9999-12-31’,

>job_code int not null,

>store_id int not null

>)

>partition by range(store_id)(

>partition p0 values less than(6),

>partition p1 values less than(11),

>partition p2 values less than(16),

>partition p3 values less than(21),

>);

 

根据store_id(店号)进行分区,less than根据店号ID进行分区。

如果要按离职时间进行分区可以使用:

>partition by range(yearseparated)(

>partition p0 values less than(1991),

>partition p1 values less than(1996),

>partition p2 values less than(2001),

>partition p3 values less than maxvalue,

>);   //使用year()函数转为整形

4.4.4 list分区技术

 

List分区类似于range分区,但他是根据离散值来分区。

3.还是该表保存有20家音像店,编号从120,而这20家音像店分布在四个区域:

 

>partition by list(store_id)(

>partition pnorth  values in (3,5,6,9,17),

>partition peast values in(1,2,10,11,19,20),

>partition pwest values in(4,12,13,14,18),

>partition pcentral values in( 7,8,15,16),

>);

4.4.5hash分区技术

Hash分区主要是用来保护数据在预先确定数目的分区中平均分布。他可以在基于用户定义的表达式的返回值来进行选择分区,该表达式使用将要插入到表中的这些行的列值进行计算

4:把不同时期的入职时间进行hash

>Partition by hashyearhired))

>partitions 4

>;

5


可以查看到数库分为5个分区,从04,在加上frm文件和par文件,供12个文件。

4.4.4range分区技术

不同分区技术对比

 

创建索引,也是一种提高数据库效率的方法。

Mysql>Create index idx_id on t2(id);

Mysql>show index from t2;


 

测试1:大数据测试

首先建立一个表,插入几个数据进行测试,然后使用select into t2 select * from  t2 ;进行倍数的增加


再打开一个终端,发现是均匀分配数据的。还有一个发现,有时索引比数据更大,造成空间浪费。

 


插入1000万行记录,然后看时间和大小,1000万条记录。


查看数据库文件大小


实验二、用存储过程生成大数据

存储过程:是一种通过创建语句,然后调用数据库的方法。

通过存储过程灌入800万条测试数据库

Mysql>delimiter //

Mysql>create procedure load_part_tab()

Begin

  Declare v <8000000

 Do

 Insert into part_tab

 Values (v,’testing partitions’,adddate(‘2000-01-01’,(rand(v)*36520)mod 3652));

 Set v=v+1;

End while;

End

//

Mysql>delimiter;

分别插入数值和字段“testingpartition“和随机时间。

 

Mysql>? procedure   //查看存储帮助


再创建一个两个表,一个使用分区实例,一个不使用分区实例,然后调用存储过程即可完成内容的插入,最后测试。

Mysql分区实例:

Mysql>create table part_tab (c1 int default null,c2 varchar(30) default null, c3 date default null ) engine=myisam

Partition by range(year(c3))(

Partition p0 values less than(2000),

Partition p1values less than(2001),

Partition p2 values less than(2002),

Partition p3 values less than(2003),

Partition p4 values less than(2004),

Partition p5 values less than(2005),

Partition p6 values less than(2006),

Partition p7 values less than(2006),

Partition p8 values less than(2007),

Partition p9 values less than(2008),

Partition p10 vlues less than maxvalue);

创建未分区实例:

Mysql> create table no_part_tab (c1 int default null,c2 varchar(30) default null, c3 date default null ) engine=myisam;

利用存储过程插入数据:

Mysql>call load_part_tab();

Mysql>inset into no_part_tab select * from part_tab;

测试:SQL性能

Mysql>select count(*) from part_tab where c3>date ‘2000-01-01’ and c3<’2000-12-31’;    //大约0.55

Mysql> select count(*) from no_part_tab where c3>date ‘2000-01-01’ and c3<’2000-12-31’;    //大约5

相差10倍,说明分区技术可以有效降低查询时间。

 

检索范围查看到,分区表查找范围明显很小为79万。

如果创建索引再查看结果:

Mysql>create index_c3 on no_part_tab(c3);

Mysql> create index_c3 on part_tab(c3);

测试:


发现创建索引之后测试访问时间发现明显二者都显著变小,说明索引也是一种优化查询的方法。下图是查找未索引的字段。

 

4.5innodb表创建分区表

Innodb是一种事务型的表存储引擎。对于innodb表,要区分两个概念。共享表空间和独占表空间。

共享表空间:某个数据库的所有表的数据,存储在一个数据文件中,默认的文件名为ibdata1,初始化为10MB

独占表空间:每一个表都将会生成独立的文件来存储数据,每一个表除了一个frm文件还有一个.ibd文件。

只有把innodb设置成独立表空间以后,才能创建innodb的表分区。

Vi /etc/my.cnf  //innodb_file_per_table =1,重启mysql即可


然后创建表,指定引擎和分区情况,查看数据文件即可看到分区文件顺利生成。


 

 

 

 

本文转自zsaisai 51CTO博客,原文链接:http://blog.51cto.com/3402313/966578


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
344
分享
相关文章
vivo 湖仓架构的性能提升之旅
聚焦 vivo 大数据多维分析面临的挑战、StarRocks 落地方案及应用收益。 在 **即席分析** 场景,StarRocks 使用占比达 70%,查询速度提升 3 倍,P50 耗时从 63.77 秒缩短至 22.30 秒,查询成功率接近 98%。 在 **敏捷 BI** 领域,StarRocks 已完成 25% 切换,月均查询成功数超 25 万,P90 查询时长缩短至 5 秒,相比 Presto 提升 75%。 在 **研发工具平台** 方面,StarRocks 支持准实时数据查询,数据可见性缩短至 3 分钟,查询加速使 P95 延迟降至 400 毫秒,开发效率提升 30%。
vivo 湖仓架构的性能提升之旅
阿里云特惠云服务器99元与199元配置与性能和适用场景解析:高性价比之选
2025年,阿里云长效特惠活动继续推出两款极具吸引力的特惠云服务器套餐:99元1年的经济型e实例2核2G云服务器和199元1年的通用算力型u1实例2核4G云服务器。这两款云服务器不仅价格亲民,而且性能稳定可靠,为入门级用户和普通企业级用户提供了理想的选择。本文将对这两款云服务器进行深度剖析,包括配置介绍、实例规格、使用场景、性能表现以及购买策略等方面,帮助用户更好地了解这两款云服务器,以供参考和选择。
阿里云服务器实例选择指南:热门实例性能、适用场景解析对比参考
2025年,在阿里云的活动中,主售的云服务器实例规格除了轻量应用服务器之外,还有经济型e、通用算力型u1、计算型c8i、通用型g8i、计算型c7、计算型c8y、通用型g7、通用型g8y、内存型r7、内存型r8y等,以满足不同用户的需求。然而,面对众多实例规格,用户往往感到困惑,不知道如何选择。本文旨在全面解析阿里云服务器实例的各种类型,包括经济型、通用算力型、计算型、通用型和内存型等,以供参考和选择。
阿里云服务器ECS u1、c7、e实例、c8i实例有什么区别?性能有差异吗?
阿里云ECS实例包括经济型e、通用算力型u1、计算型c7和c8i,性能与价格各异。经济型e为共享型,适合轻量应用;u1性价比高,适配中小型企业需求;c7和c8i为企业级独享型,性能依次递增,适用于高性能场景。以2核4G为例,u1实例199元/年起,带5M带宽;c7和c8i价格更高但性能更强。选择时需根据实际需求权衡性能与成本。
云原生时代的架构革新,Apache Doris 存算分离如何实现弹性与性能双重提升
随着云基础设施的成熟,Apache Doris 3.0 正式支持了存算分离全新模式。基于这一架构,能够实现更低成本、极致弹性以及负载隔离。本文将介绍存算分离架构及其优势,并通过导入性能、查询性能、资源成本的测试,直观展现存算分离架构下的性能表现,为读者提供具体场景下的使用参考。
云原生时代的架构革新,Apache Doris 存算分离如何实现弹性与性能双重提升
架构革新:揭示卓越性能与高可扩展的共赢秘诀
为了构建现代化的可观测数据采集器LoongCollector,iLogtail启动架构通用化升级,旨在提供高可靠、高可扩展和高性能的实时数据采集和计算服务。然而,通用化的过程总会伴随性能劣化,本文重点介绍LoongCollector的性能优化之路,并对通用化和高性能之间的平衡给出见解。
架构革新:揭示卓越性能与高可扩展的共赢秘诀
阿里云服务器实例选购参考:经济型e实例与通用算力型u1实例性能、价格与适用场景解析
在阿里云目前的云服务器实例规格中,通用算力型u1和经济型e实例的云服务器凭借其相对较低的活动价格,成为了众多用户关注的焦点。其中经济型e(ecs.e-c1m1.large)实例2核2G3M带宽特惠价99元1年,通用算力型u1实例(ecs.u1-c1m2.large)2核4G5M带宽特惠价199元1年。由于经济型e实例属于共享型实例规格,而通用算力型u1实例则是独享型实例规格,因此,用户在选择时往往会对这两款云服务器的性能、适用场景及价格进行比较。本文将为您详细介绍这两款云服务器的区别、性能特点、适用场景及价格对比,以供参考和选择。
阿里云服务器2核8G、4核16G、8核32G配置热门实例价格、性能与场景全攻略
2核8G/4核16G/8核32G配置的阿里云服务器在阿里云活动中目前有经济型e、通用算力型u1、通用型c7、通用型g8i和通用型g8y五种实例可选,虽然配置相同,但是这些实例规格之间的价格差别是很大的。面对不同配置和类型的云服务器实例,有的新手用户往往因为不知道他们之间的区别,所以不知道如何选择。本文将针对常见的2核8G、4核16G、8核32G配置,深入剖析阿里云服务器中的经济型e、通用算力型u1、通用型g7及通用型g8y实例,以供大家参考和选择。
销售易CRM:技术架构与安全性能的深度解析
销售易CRM基于云计算与微服务架构,融合高可用性、弹性扩展及模块化开发优势,为企业提供灵活定制化的客户关系管理解决方案。系统采用多层次安全防护机制,包括数据加密、细粒度权限控制和实时监控审计,确保数据安全与隐私保护。某金融机构的成功案例表明,销售易CRM显著提升了数据安全性和系统性能,同时满足行业合规要求。作为数字化转型的利器,销售易CRM助力企业实现可持续发展与市场竞争力提升。
阿里云服务器ECS内存型2核16G、4核32G和8核64G配置实例、费用和性能参数表
本文整理了2025年阿里云服务器租赁价格表,涵盖2核16G、4核32G和8核64G配置收费标准。CPU内存比为1:8,提供多种实例规格如ECS内存型r8i、通用算力型u1等。价格由CPU内存、公网带宽及系统盘组成,支持优惠折扣(年付6.7折起)。文中详细列出各配置参考价格、公网带宽与系统盘收费,并对比不同实例规格性能,如Intel Xeon和AMD EPYC处理器系列,帮助用户选择高性价比方案。具体价格以阿里云官网为准。
67 4

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等