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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

第四章、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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
1月前
|
存储 弹性计算 算法
倚天产品介绍|倚天ECS加速国密算法性能
倚天ECS是阿里云基于平头哥自研数据中心芯片倚天710推出arm架构实例,采用armv9架构,支持SM3/SM4指令,可以加速国密算法性能。本文基于OpenSSL 3.2和Tongsuo 实测对比了倚天ECS g8y实例和Intel g7 实例国密性能。为用户选择ECS提供参考。
|
1月前
|
监控 持续交付 API
构建高效可扩展的微服务架构
在当今快速迭代和竞争激烈的软件市场中,构建一个高效、可扩展且易于维护的后端系统变得尤为重要。微服务架构作为一种流行的分布式系统设计方式,允许开发者将应用程序划分为一系列小型、自治的服务,每个服务负责执行特定的业务功能。本文将探讨如何利用现代技术栈搭建一个符合这些要求的微服务架构,并讨论其潜在的挑战与解决方案。我们将涵盖服务划分策略、容器化、服务发现、API网关、持续集成/持续部署(CI/CD)以及监控和日志管理等关键主题,以帮助读者构建出既可靠又灵活的后端系统。
|
1月前
|
监控 Kubernetes 持续交付
构建高效可扩展的微服务架构:后端开发实践指南
在数字化转型的浪潮中,企业对软件系统的要求日益提高,追求快速响应市场变化、持续交付价值成为核心竞争力。微服务架构以其灵活性、模块化和独立部署的特点,成为解决复杂系统问题的有效途径。本文将深入探讨如何构建一个高效且可扩展的微服务架构,涵盖关键设计原则、技术选型及实践案例,为后端开发者提供一条清晰的指导路线,帮助其在不断变化的技术环境中保持竞争力。
133 3
|
1月前
|
编解码 弹性计算 Cloud Native
倚天使用|倚天ECS视频编解码之x264性能
在平头哥发布了首颗为云而生的 CPU 芯片倚天710之后,搭载倚天 710 的 ECS 实例表现出强劲的性能实力,在x264编解码场景下有着极高的性价比。
|
1月前
|
存储 弹性计算 关系型数据库
阿里云服务器ESSD云盘性能等级PL0、PL1、PL2、PL3区别,云盘性能级别PL知识点参考
在我们选择阿里云服务器系统盘和数据盘时,如果是选择ESSD云盘,还需要选择云盘的云盘性能级别PL,PL性能级别有PL3、PL2、PL1、PL0四个性能级别的云盘规格,如果是通过阿里云的活动来购买云服务器的话,由于系统盘默认一般为20G或40G容量,可选的PL性能级别通常只有PL0(单盘IOPS性能上限1万)和PL1(单盘IOPS性能上限5万)可选择,有的用户肯能并不清楚ESSD云盘的性能等级之间有何区别,单盘IOPS性能指的是什么,本文为大家介绍一下ESSD云盘的云盘性能级别PL3、PL2、PL1、PL0相关知识点。
阿里云服务器ESSD云盘性能等级PL0、PL1、PL2、PL3区别,云盘性能级别PL知识点参考
|
25天前
|
存储 缓存 监控
构建高效可扩展的后端服务架构
在当今互联网时代,构建高效可扩展的后端服务架构对于企业的业务发展至关重要。本文将探讨如何通过合理设计和优化后端服务架构,实现系统的高性能、高可用性和易扩展性,从而满足不断增长的业务需求和用户规模。
18 0
|
14天前
|
运维 监控 自动驾驶
构建可扩展的应用程序:Apollo与微服务架构的完美结合
构建可扩展的应用程序:Apollo与微服务架构的完美结合
32 10
|
25天前
|
负载均衡 网络协议 Java
构建高效可扩展的微服务架构:利用Spring Cloud实现服务发现与负载均衡
本文将探讨如何利用Spring Cloud技术实现微服务架构中的服务发现与负载均衡,通过注册中心来管理服务的注册与发现,并通过负载均衡策略实现请求的分发,从而构建高效可扩展的微服务系统。
|
1月前
|
弹性计算 小程序 开发者
阿里云服务器性能测评:25M带宽阿里云云服务器支持多少人访问?
在深入探讨25M带宽云服务器的性能时,我们首先要明确一个核心概念:带宽与服务器能够支持的同时访问量之间存在着直接的关联。那么,大家可能会好奇,带宽为25M的云服务器究竟能够支持多少用户同时访问呢?
129 0