关于mysql:mysql知识点

 1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联: 主:binlog线程——记录下所有扭转了数据库数据的语句,放进master上的binlog中; 从:io线程——在应用start slave 之后,负责从master上拉取 binlog 内容,放进 本人的relay log中; 从:sql执行线程——执行relay log中的语句; 2、MySQL中myisam与innodb的区别: 1>.InnoDB反对事物,而MyISAM不反对事物 2>.InnoDB反对行级锁,而MyISAM反对表级锁 3>.InnoDB反对MVCC, 而MyISAM不反对 4>.InnoDB反对外键,而MyISAM不反对 5>.InnoDB不反对全文索引,而MyISAM反对。 装置mysql:http://youhua.cuohei.com/ innodb引擎的4大个性: 1.插入缓存 2.二次写 3.自适应哈希索引 4预读 myisam与innodbselectcount(*)哪个更快? myisam更快,因为myisam外部保护了一个计数器,能够间接调取。 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义: (1)、varchar与char的区别 char是一种固定长度的类型,varchar则是一种可变长度的类型 (2)、varchar(50)中50的涵义 最多寄存50个字符,varchar(50)和(200)存储hello所占空间一样,但后者在排序时会耗费更多内存,因为order by col采纳fixed_length计算col长度(memory引擎也一样) (3)、int(20)中20的涵义 是指显示字符的长度 但要加参数的,最大为255,比方它是记录行数的id,插入10笔材料,它就显示00000000001 ~~~00000000010,当字符的位数超过11,它也只显示11位,如果你没有加那个让它未满11位就后面加0的参数,它不会在后面加0 20示意最大显示宽度为20,但仍占4字节存储,存储范畴不变; (4)、mysql为什么这么设计 对大多数利用没有意义,只是规定一些工具用来显示字符的个数;int(1)和int(20)存储和计算均一样; 4、问了innodb的事务与日志的实现形式: (1)、有多少种日志; 谬误日志:记录出错信息,也记录一些正告信息或者正确的信息。 查问日志:记录所有对数据库申请的信息,不管这些申请是否失去了正确的执行。 慢查问日志:设置一个阈值,将运行工夫超过该值的所有SQL语句都记录到慢查问的日志文件中。 二进制日志:记录对数据库执行更改的所有操作。 中继日志: 事务日志: (2)、事物的4种隔离级别: 隔离级别 读未提交(RU) 读已提交(RC) 可反复读(RR) 串行 5、MySQL数据事务是如何通过日志来实现的 事务日志是通过redo和innodb的存储引擎日志缓冲(Innodb log buffer)来实现的,当开始一个事务的时候,会记录该事务的lsn(log sequence number)号; 当事务执行时,会往InnoDB存储引擎的日志的日志缓存外面插入事务日志;当事务提交时,必须将存储引擎的日志缓冲写入磁盘(通过innodb_flush_log_at_trx_commit来管制),也就是写数据前,须要先写日志。这种形式称为“预写日志形式” 6、MySQL数据库cpu飙升到500%的话怎么解决? 1、列出所有过程 show processlist,察看所有过程 ,多秒没有状态变动的(干掉) 2、查看超时日志或者谬误日志 (个别会是查问以及大批量的插入会导致cpu与i/o上涨,当然不排除网络状态忽然断了,,导致一个申请服务器只承受到一半,比方where子句或分页子句没有发送) 7、sql优化各种办法: (1)、explain进去的各种item的意义; select_type 示意查问中每个select子句的类型 type 示意MySQL在表中找到所需行的形式,又称“拜访类型” possible_keys 指出MySQL能应用哪个索引在表中找到行,查问波及到的字段上若存在索引,则该索引将被列出,但不肯定被查问应用 key 显示MySQL在查问中理论应用的索引,若没有应用索引,显示为NULL key_len 示意索引中应用的字节数,可通过该列计算查问中应用的索引的长度 ref 示意上述表的连贯匹配条件,即哪些列或常量被用于查找索引列上的值 Extra 蕴含不适宜在其余列中显示但非常重要的额定信息 (2)、profile的意义以及应用场景; 查问到 SQL 会执行多少工夫, 并看出 CPU/Memory 使用量, 执行过程中 Systemlock, Table lock 花多少工夫等等 8、备份打算,mysqldump以及xtranbackup的实现原理: (1)、备份打算; 这里每个公司都不一样,您别说那种1小时1全备什么的就行 (2)、备份复原工夫; 这里跟机器,尤其是硬盘的速率有关系,以下列举几个仅供参考 20G的2分钟(mysqldump) 80G的30分钟(mysqldump) 111G的30分钟(mysqldump) 288G的3小时(xtra) 3T的4小时(xtra) 逻辑导入工夫个别是备份工夫的5倍以上 (3)、xtrabackup实现原理 在InnoDB外部会保护一个redo日志文件,咱们也能够叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录批改。当InnoDB启动时,InnoDB会查看数据文件和事务日志,并执行两个步骤:它利用(前滚)曾经提交的事务日志到数据文件,并将批改过但没有提交的数据进行回滚操作。 9、500台db,在最快工夫之内重启 puppet,dsh 10、innodb的读写参数优化 (1)、读取参数 global buffer pool以及 local buffer; (2)、写入参数; innodb_flush_log_at_trx_commit innodb_buffer_pool_size (3)、与IO相干的参数; innodb_write_io_threads = 8 innodb_read_io_threads = 8 innodb_thread_concurrency = 0 (4)、缓存参数以及缓存的实用场景。 query cache/query_cache_type 并不是所有表都适宜应用query cache。造成query cache生效的起因次要是相应的table产生了变更 第一个:读操作多的话看看比例,简略来说,如果是用户清单表,或者说是数据比例比拟固定,比如说商品列表,是能够关上的,前提是这些库比拟集中,数据库中的实务比拟小。 第二个:咱们“行骗”的时候,比如说咱们竞标的时候压测,把query cache关上,还是能收到qps激增的成果,当然前提醒前端的连接池什么的都配置一样。大部分状况下如果写入的居多,访问量并不多,那么就不要关上,例如社交网站的,10%的人产生内容,其余的90%都在生产,关上还是成果很好的,然而你如果是qq音讯,或者聊天,那就很要命。 第三个:小网站或者没有高并发的无所谓,高并发下,会看到 很多 qcache 锁 期待,所以个别高并发下,不倡议关上query cache 11、如何监控你们的数据库的?慢日志都是怎么查问的? 监控的工具有很多,例如zabbix,lepus, 12、实现主从一致性校验: 主从一致性校验有多种工具 例如checksum、mysqldiff、pt-table-checksum等 13、数据库是否反对emoji表情,如果不反对,如何操作? 如果是utf8字符集的话,须要降级至utf8_mb4方可反对。 14、如何保护数据库的数据字典的? 个别是间接在生产库进行正文,利用工具导出成excel不便流通。 15、表中有大字段X(例如:text类型),且字段X不会常常更新,以读为为主,请问拆带来的问题: 连贯耗费 + 存储拆分空间;不拆可能带来的问题:查问性能; 1、如果能容忍拆分带来的空间问题,拆的话最好和常常要查问的表的主键在物理构造上搁置在一起(分区) 程序IO,缩小连贯耗费,最初这是一个文本列再加上一个全文索引来尽量对消连贯耗费 2、如果能容忍不拆分带来的查问性能损失的话:下面的计划在某个极致条件下必定会呈现问题,那么不拆就是最好的抉择 16、MySQL中InnoDB引擎的行锁是通过加在什么上实现(或称实现)的?为什么是这样子的? InnoDB是基于索引来实现行锁 例: select * from tab_with_index where id = 1 for update; for update 能够依据条件来实现行锁锁定,并且 id 是有索引键的列, 如果 id 不是索引键那么InnoDB将实现表锁,,并发将无从谈起 17.个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查问出满足条件的第50000到第50200中的这200条数据记录 1、如果A表TID是自增长,并且是间断的,B表的ID为索引 select * from a,b where a.tid = b.id and a.tid>500000 limit 200; 2、如果A表的TID不是间断的,那么就须要应用笼罩索引.TID要么是主键,要么是辅助索引,B表ID也须要有索引。 select * from b , (select tid from a limit 50000,200) a where b.id = a .tid; 18、什么是存储过程?有哪些优缺点? 存储过程是一些预编译的SQL语句。更加直白的了解:存储过程能够说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个办法一样实现一些性能(对单表或多表的增删改查),而后再给这个代码块取一个名字,在用到这个性能的时候调用他就行了。存储过程是一个预编译的代码块,执行效率比拟高,一个存储过程代替大量T_SQL语句 ,能够升高网络通信量,进步通信速率,能够肯定水平上确保数据安全 19、索引是什么?有什么作用以及优缺点? 1、索引是对数据库表中一或多个列的值进行排序的构造,是帮忙MySQL高效获取数据的数据结构 2、索引就是放慢检索表中数据的办法。数据库的索引相似于书籍的索引。在书籍中,索引容许用户不用翻阅残缺个书就能迅速地找到所须要的信息。在数据库中,索引也容许数据库程序迅速地找到表中的数据,而不用扫描整个数据库。 20、MySQL数据库几个根本的索引类型:一般索引、惟一索引、主键索引、全文索引: 1、索引放慢数据库的检索速度 2、索引升高了插入、删除、批改等保护工作的速度 3、惟一索引能够确保每一行数据的唯一性 4、通过应用索引,能够在查问的过程中应用优化暗藏器,进步零碎的性能 5、索引须要占物理和数据空间 21、什么是事务? 事务(Transaction)是并发管制的根本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。事务是数据库保护数据一致性的单位,在每个事务完结时,都能保持数据一致性。 22、数据库的乐观锁和乐观锁是什么? 数据库管理系统(DBMS)中的并发管制的工作是确保在多个事务同时存取数据库中同一数据时不毁坏事务的隔离性和统一性以及数据库的统一性。乐观并发管制(乐观锁)和乐观并发管制(乐观锁)是并发管制次要采纳的技术手段。 乐观锁:假设会产生并发抵触,屏蔽所有可能违反数据完整性的操作 乐观锁:假如不会产生并发抵触,只在提交操作时查看是否违反数据完整性。 23、应用索引查问肯定能进步查问的性能吗?为什么 通常,通过索引查问数据比全表扫描要快.然而咱们也必须留神到它的代价. 1、索引须要空间来存储,也须要定期维护, 每当有记录在表中增减或索引列被批改时,索引自身也会被批改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 因为索引须要额定的存储空间和解决,那些不必要的索引反而会使查问反应时间变慢.应用索引查问不肯定能进步查问性能,索引范畴查问(INDEX RANGE SCAN)实用于两种状况: 2、基于一个范畴的检索,个别查问返回后果集小于表中记录数的30% 3、基于非唯一性索引的检索 24、drop、delete与truncate的区别: SQL中的drop、delete、truncate都示意删除,然而三者有一些差异的: 1、delete和truncate只删除表的数据不删除表的构造 2、速度,一般来说: drop> truncate >delete 3、delete语句是dml,这个操作会放到rollback segement中,事务提交之后才失效; 4、如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立刻失效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 25、drop、delete与truncate别离在什么场景之下应用? 1、不再须要一张表的时候,用drop 2、想删除局部数据行时候,用delete,并且带上where子句 3、保留表而删除所有数据的时候用truncate 26、超键、候选键、主键、外键别离是什么? 1、超键:在关系中能惟一标识元组的属性集称为关系模式的超键。一个属性能够为作为一个超键,多个属性组合在一起也能够作为一个超键。超键蕴含候选键和主键。 2、候选键:是最小超键,即没有冗余元素的超键。 3、主键:数据库表中对贮存数据对象予以惟一和残缺标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。 4、外键:在一个表中存在的另一个表的主键称此表的外键。 27、什么是视图?以及视图的应用场景有哪些? 1、视图是一种虚构的表,具备和物理表雷同的性能。能够对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的批改不影响根本表。它使得咱们获取数据更容易,相比多表查问。 2、只裸露局部字段给访问者,所以就建一个虚表,就是视图。 3、查问的数据来源于不同的表,而查问者心愿以对立的形式查问,这样也能够建设一个视图,把多个表查问后果联结起来,查问者只须要间接从视图中获取数据,不用思考数据来源于不同表所带来的差别 28、三个范式是指: 第一范式(1NF):数据库表中的字段都是繁多属性的,不可再分。这个繁多属性由根本类型形成,包含整型、实数、字符型、逻辑型、日期型等。 第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的局部函数依赖(局部函数依赖指的是存在组合关键字中的某些字段决定非关键字段的状况),也即所有非关键字段都齐全依赖于任意一组候选关键字。 第三范式(3NF):在第二范式的根底上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则合乎第三范式。所谓传递函数依赖,指的是如 果存在"A → B → C"的决定关系,则C传递函数依赖于A。因而,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段 → 非关键字段 x → 非关键字段y ...

July 6, 2021 · 2 min · jiezi

关于mysql:centos7安装mysql8

官网下载对应的rpm 本地装置yum localinstall mysql80-community-release-el7-3.noarch.rpm装置serveryum install mysql-community-server -y

July 6, 2021 · 1 min · jiezi

关于mysql:mysql主从复制类型

mysql 复制类型图谱graph TD C{mysql复制类型} C --> D[异步复制] C --> E[提早复制] C --> F[半同步复制] C --> G[多源复制] C --> K[并行复制] F --> H[有损] F --> Y[无损]mysql 默认的是异步复制模式异步复制异步复制中,master和slave无任何依赖关系,master不关怀slave是否复制胜利。异步复制是性能最好的,相比其余模式惟一的毛病就是可能会呈现复制提早的状况。半同步复制半同步复制须要装置并启用半同步复制插件。并且须要多个slave节点有损半同步 master忽然宕机,然而多个slave并没有返回收到二进制日志的ACK,所以有可能slave会失落master最初一批提交的事务数据。是因为有损半同步把 COMMIT提交步骤放在了复制前一步。无损半同步 把同步放在了COMMIT前一步,直到ACK后提交。这样就算master宕机,事务也会在salve提交,或者是回滚。所以不存在数据失落问题。提早复制通过设置延迟时间来做复制,一半用来做备份。。。多源复制从多个mysql主机复制数据。。目前接触的业务没发现多源复制的用途。。。并行复制COMMIT ORDER 这种是主机是怎么样,slave也是怎么样WRITESET 事务不抵触则并行。举荐应用WRITESET并行复制读写拆散有了mysql复制技术后,能够很轻松的搭建出一套读写拆散的架构。 如有谬误,请斧正!

July 6, 2021 · 1 min · jiezi

关于mysql:MySQL连接数管理

前言: MySQL 连贯状态是数据库中比拟重要的一个指标,比如说目前总共有多少个连贯、各连贯处于什么状态等等,这些连贯状态也能从侧面反映出数据库以后运行状况。本篇文章咱们一起来学习下 MySQL 连贯相干内容。 1.connection相干参数先来看下 connection 相干参数,只有参数设置正当了,数据库能力跑得更好。 max_connections:最大连接数,默认为 151 ,可动静批改。max_connect_errors:当同一个客户端连贯出错的次数达到 max_connect_errors 时,服务器将阻止该主机进行再次连贯。默认为 100 ,可动静批改。max_user_connections:对于单个数据库用户容许的最大同时连接数。默认为 0 ,即示意无限度,可动静批改。connect_timeout:期待一个连贯响应的工夫,默认为 10s ,在获取连贯阶段起作用,可动静批改。以 max_connections 参数为例,来看下具体参数如何查看及批改: # 查看相干参数mysql> show variables like 'max_connections';+-----------------+-------+| Variable_name | Value |+-----------------+-------+| max_connections | 151 |+-----------------+-------+# 批改参数 (my.cnf配置文件中也要批改)mysql> set global max_connections = 500;Query OK, 0 rows affected (0.79 sec)mysql> show variables like 'max_connections';+-----------------+-------+| Variable_name | Value |+-----------------+-------+| max_connections | 500 |+-----------------+-------+2.几个常见连贯谬误若 connection 相干参数设置不当,达到肯定瓶颈时可能会呈现连贯谬误的问题,上面列举下几种常见的连贯谬误及解决办法。 呈现频繁最高的可能就是 Too many connections 谬误了,这个谬误产生的起因是以后数据库的总连接数曾经达到了 max_connections 数值,当再有客户端尝试连贯时及会报此谬误。 MySQL 实际上容许 max_connections + 1 个客户端连贯,额定一个连贯供具备 SUPER 特权的用户应用。当产生 Too many connections 谬误时,我看能够用 root 账号登录数据库,而后增大 max_connections 参数即可。其实设置适当的 max_connections 即可防止此类谬误再次发生,默认的 151 显然有点小,咱们能够监控下数据库连贯总数,依据不同环境做出调整,比方设为 500 或 1000,当然也不能设置过大。 ...

July 6, 2021 · 1 min · jiezi

关于mysql:多活备安全监管稳运行容器云解决方案实现金融数字化落地

云原生赋能数字化转型 最新的《中国数字经济倒退白皮书》显示,2020年我国数字经济规模扩张到39.2万亿元,曾经成为国民经济的重要推动力量,各行各业都在鼎力推动“数字化转型”,这未然成为金融行业的关键词。 数字化转型,离不开技术的反对,越来越多的金融机构借力金融科技技术疾速实现数字化产品翻新。数字金融将买通更多壁垒,建设数字经营、数字信赖及数字风控。数字经济时代的云计算曾经跳出了技术范畴,和业务密不可分,成为数字金融的必选项,金融行业对云原生的利用也越来越深刻,以容器为代表的云原生技术在进步资源效率,降低成本、麻利交付、业务高可用等方面,受到了人们的宽泛关注并在泛滥行业中迅速遍及。 毋庸置疑,在企业上云已是大势所趋的当下,为了满足业务疾速上线、按需扩容和伸缩的需要,金融机构会把业务与技术向云原生演进,而容器作为云原生架构的根底外围,以容器为根底的云平台具备极致弹性、故障自愈、大规模可复制等优质能力,赋能增效成绩显著。金融机构由此也越来越偏向于将利用开发走向容器化。 **容器技术“隔岸关火”金融业数字转型艰难** 目前阶段,金融行业仍处在微小的IT架构改革与紧迫的数字化转型期间,数字化转型出现出新的趋势,服务将降级到以云+端+生态+场景为根底的经营,不仅须要全面数字化,还须要有灵便的底层架构来应答前端业务的疾速翻新。容器技术因为在轻量级、自蕴含、敏捷性与无状态利用上的人造优越性,对DevOps、云原生、微服务、编排治理等利用部署有着更佳的撑持成果。对于容器技术的深刻利用在金融行业曾经回升到了政策领导的高度。 早在2016年银监会公布的对于《中国银行业信息科技“十三五”倒退布局监管领导意见(征求意见稿)》中明确提出了对容器技术的采纳。保险、银行、信托、领取四大金融子行业企业,纷纷在容器化利用上一直尝试。 然而,在容器理论利用中,却面临着重重困难。一方面金融业务用户不足容器畛域的长期研发与运维教训,另一方面对新技术的安全性思考更为显著,很多金融机构通常只能对热门的容器“隔岸观火”而已。在金融行业数据安全高标准的要求下,除了应答撑持外围业务,实现数据库资源的高效弹性调度问题,金融业在转型过程中还面临着诸多痛点。 目前给到金融机构的解决方案少数是整体性的,不足重点,并不能很好地捕捉到每家机构的具体需要。有时候技术升级过于具体,往往与整体业务架构不兼容,金融机构不得不消耗过多额定老本。此外,一些曾经在转型过程中的金融机构也有着技术不自主可控,业务平安、稳定性低等忧愁。技术升级后的运维次要依赖人力,一旦遇到流量洪峰时,扩缩容难度大,周期长。产品从上线到交付,因为生产环境和测试环境的差异性,很容易在交付环节出错。在分布式场景下,很难动静辨认云上组建的状态及配置信息,给诊断故障造成肯定难度。更不用说,有的机构如果想要更换合作方,又会因为利用未标准化、受云服务商绑定、可移植性低等一系列问题带来极高的迁徙老本和难度。 针对以上问题,谐云基于容器、DevOps、云上监控等云原生技术打造了金融级容器云解决方案,提供金融混合云计划,交融异构IT资源、PaaS利用治理、微服务、DevOps和分布式外围中间件,联合头部金融客户单干的场景劣势,在为金融行业提供互联网端敏态业务撑持的同时,也为业务凋谢和混合架构带来的平安容灾和监管需要提供无效伎俩,是针对金融行业理论需要定制的一套容器云解决方案,堪称行业内最懂金融的容器云。 谐云金融级容器云解决方案*01金融级的多活容灾计划* 金融业务对软件系统的可靠性要求相当严格,PaaS作为面向业务利用的治理平台,其可靠性也十分重要,根据金融行业监管要求,须要提供基于两地三核心部署架构的容器云基座,谐云依据各方要求,设计并研发了金融级的两地三核心容器底座,通过三个层面保障业务及平台的整体连续性。其一:平台级保障,通过设计研发平台数据库的多实例同步,实现平台治理数据层面的高可用保障;其二:kubernetes底座层保障,引入etcd同步机制,通过钻研同步效率及性能,晋升底座级的高可用级别;其三:业务级保障,配合业务零碎数据设计,配合Otter同步组件,实现底层业务的数据高可用保障。 *02无感知秒级故障隔离机制* 业务零碎的故障总是考究MTTR、PRO、RTO,这些数字对于大多是运维、保障部门都是KPI红线,因而,一旦呈现业务零碎的故障,第一工夫想到的必然是复原业务。谐云科技针对这一普适性的需要,提出了基于容器云业务场景下的解决方案。 谐云科技基于自研的NPD组件,实现秒级的业务故障隔离,故障零碎能够在秒级主动隔离、主动拉起新业务实例并优雅切换流量;在保留故障现场的同时,优先解决线上业务复原问题;同时针对我的项目理论教训,设计各类故障特色,帮忙NPD组件疾速了解并通过特色隔离实例。 *03云上业务运行可观测能力* 运维保障团队能解决问题,但不代表心愿遇到问题。古往今来,最好的解决方案就是“趋利避害”,然而在这之前,咱们须要有一套云上环境的全链路监控零碎,通过最轻量的旁路角度,以类穿戴型设施的形式,帮忙业务零碎实现日常监测,升高零碎罹患“心脑血管”等重要疾病的概率。 金融类业务大多具备调用链路长,一次交易申请跨域跨集群跨数据中心更是相当常见,为解决“数智金融”时代的分布式系统可观测问题,谐云科技提出了后K8S时代的重要解决方案--基于EBPF的旁路式全链路业务监控(后简称“云监控”)。 谐云通过多年的Linux内核技术钻研积攒,自研“云监控”解决方案,通过极低功耗的旁路代价,抓取云上的各类东西向、南北向流量,并联合主动绘制的业务拓扑,疾速展现业务健康状况,让用户对业务的“血脂血压血糖”了然于胸;对于运维上报的各类云上业务故障,能够联合链路剖析,定位故障层级,实现业务零碎的“门诊预检”;同时“云监控”搭载了谐云多年研发积攒的APM产品探针,对于“门站预检”确定是代码故障的论断,能够自动化装载APM Agent,在不重启业务的状况下,对业务进行代码级“冠脉造影”,最终定位故障点。 *04DevOps研发运维一体化* DevOps在各个行业曾经全面开展,但在具体落地实际方面往往停顿迟缓、成果不佳,其根本原因是DevOps实际本身就是一个系统化的工程。企业在DevOps建设过程中,只有联合企业的现状根底,设计合乎企业现状与特点的DevOps实际内容与演进路线,能力更快、更好、更无效地推动落地,防止短少工具链或烟囱式工具建设的状况,充沛享受DevOps研发运维一体化实际带来的业务与IT价值晋升。 谐云领有大量金融客户DevOps实践经验,相熟金融业务特色及IT组织状况,通过“DevOps教练赋能” 和“工具链设计建设”并行不悖,涵盖工具平台、流程体系、标准制度、人员能力等全方面的建设,采纳先晋升认知后落地实际、先试点验证后全面推开的过程,分阶段晋升企业研发运维能力 —— 规范化技术栈、标准化推动、DevOps实际扩大、自动化框架建设、构建自服务能力,构建出一个螺旋回升的过程,继续推动,不断改进,进而为金融业务倒退注入继续一直的生机。 全行业数字化过程减速中,容器在云化中施展了极大价值,作为新技术采纳最为前沿的行业畛域,金融行业数字化转型也因云与容器落地带来了益处。谐云的金融级容器云解决方案,是云原生时代金融行业解决方案的集大成者。多活容灾确保金融业务的安全可靠,秒级故障隔离保障金融业务的连续性,云上监控则实现业务零碎的日常监测,全方位保障金融行业的业务继续稳固倒退,做好刚强的后盾! 将来,谐云将不断完善后K8s时代,持续深耕云原生全栈解决方案,继续致力于技术创新,与金融行业客户独特成长,减速数字化转型,共创行业新价值。

July 6, 2021 · 1 min · jiezi

关于mysql:mysql多表连接查询

 1.穿插连贯查问 穿插连贯返回的后果是被连贯的两个表中所有数据行的笛卡儿积;比方:汇合A={a,b},汇合B={0,1,2},则汇合A和B的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。所以,穿插连贯也被称为笛卡尔连贯,其语法格局如下: SELECT * FROM 表1 CROSS JOIN 表2; 在该语法中:CROSS JOIN用于连贯两个要查问的表,通过该语句能够查问两个表中所有的数据组合。 因为这个穿插连贯查问在理论使用中没有任何意义,所以只做为理解即可 2.内连贯查问 内连贯(Inner Join)又称简略连贯或天然连贯,是一种十分常见的连贯查问。内连贯应用比拟运算符对两个表中的数据进行比拟并列出与连贯条件匹配的数据行,组合成新的 记录。也就是说在内连贯查问中只有满足条件的记录能力呈现在查问后果中。其语法格局如下: SELECT 查问字段1,查问字段2, ... FROM 表1 [INNER] JOIN 表2 ON 表1.关系字段=表2.关系字段 在该语法中:INNER JOIN用于连贯两个表,ON来指定连贯条件;其中INNER能够省略。 mysql装置:http://mysql.cuohei.com/ 筹备数据,代码如下: -- 若存在数据库mydb则删除 DROP DATABASE IF EXISTS mydb; -- 创立数据库mydb CREATE DATABASE mydb; -- 抉择数据库mydb USE mydb; -- 创立部门表 CREATE TABLE department( did int (4) NOT NULL PRIMARY KEY, dname varchar(20) ); -- 创立员工表 CREATE TABLE employee ( eid int (4) NOT NULL PRIMARY KEY, ename varchar (20), eage int (2), departmentid int (4) NOT NULL ); -- 向部门表插入数据 INSERT INTO department VALUES(1001,'财务部'); INSERT INTO department VALUES(1002,'技术部'); INSERT INTO department VALUES(1003,'行政部'); INSERT INTO department VALUES(1004,'生存部'); -- 向员工表插入数据 INSERT INTO employee VALUES(1,'张三',19,1003); INSERT INTO employee VALUES(2,'李四',18,1002); INSERT INTO employee VALUES(3,'王五',20,1001); INSERT INTO employee VALUES(4,'赵六',20,1004); 查问员工姓名及其所属部门名称 MySQL命令: select employee.ename,department.dname from department inner join employee on department.did=employee.departmentid; 3.外连贯查问 在应用内连贯查问时咱们发现:返回的后果只蕴含合乎查问条件和连贯条件的数据。然而,有时还须要在返回查问后果中不仅蕴含符合条件的数据,而且还包含左表、右表或两个表中的所有数据,此时咱们就须要应用外连贯查问。外连贯又分为左(外)连贯和右(外)连贯。其语法格局如下: SELECT 查问字段1,查问字段2, ... FROM 表1 LEFT | RIGHT [OUTER] JOIN 表2 ON 表1.关系字段=表2.关系字段 WHERE 条件 由此可见,外连贯的语法格局和内连贯十分类似,只不过应用的是LEFT [OUTER] JOIN、RIGHT [OUTER] JOIN关键字。其中,关键字右边的表被称为左表,关键字左边的表被称为右表;OUTER能够省略。 在应用左(外)连贯和右(外)连贯查问时,查问后果是不统一的,具体如下: 1、LEFT [OUTER] JOIN 左(外)连贯:返回包含左表中的所有记录和右表中合乎连贯条件的记录。 2、RIGHT [OUTER] JOIN 右(外)连贯:返回包含右表中的所有记录和左表中合乎连贯条件的记录。 ...

July 5, 2021 · 1 min · jiezi

关于mysql:MySQL表的关联关系

 在理论开发中数据表之间存在着各种关联关系。在此,介绍MySQL中数据表的三种关联关系。 多对一 多对一(亦称为一对多)是数据表中最常见的一种关系。例如:员工与部门之间的关系,一个部门能够有多个员工;而一个员工不能属于多个部门只属于某个部门。在多对一的表关系 中,应将外键建在多的一方否则会造成数据的冗余。 多对多 多对多是数据表中常见的一种关系。例如:学生与老师之间的关系,一个学生能够有多个老师而且一个老师有多个学生。通常状况下,为了实现这种关系须要定义一张两头表(亦称为连贯表)该表会存在两个外键别离参照老师表和学生表。 一对一 在开发过程中,一对一的关联关系在数据库中并不常见;因为以这种形式存储的信息通常会放在同一张表中。 mysql装置:http://install.cuohei.com/ 接下来,咱们来学习在一对多的关联关系中如果增加和删除数据。先筹备一些测试数据,代码如下: DROP TABLE IF EXISTS student; DROP TABLE IF EXISTS class; -- 创立班级表 CREATE TABLE class( cid int(4) NOT NULL PRIMARY KEY, cname varchar(30) ); -- 创立学生表 CREATE TABLE student( sid int(8) NOT NULL PRIMARY KEY, sname varchar(30), classid int(8) NOT NULL ); -- 为学生表增加外键束缚 ALTER TABLE student ADD CONSTRAINT fk_student_classid FOREIGN KEY(classid) REFERENCES class(cid); -- 向班级表插入数据 INSERT INTO class(cid,cname)VALUES(1,'Java'); INSERT INTO class(cid,cname)VALUES(2,'Python'); -- 向学生表插入数据 INSERT INTO student(sid,sname,classid)VALUES(1,'tome',1); INSERT INTO student(sid,sname,classid)VALUES(2,'lucy',1); INSERT INTO student(sid,sname,classid)VALUES(3,'lili',2); INSERT INTO student(sid,sname,classid)VALUES(4,'domi',2); 1.关联查问 查问Java班的所有学生 MySQL命令: select * from student where classid=(select cid from class where cname='Java'); 2.对于关联关系的删除数据 请从班级表中删除Java班级。在此,请留神:班级表和学生表之间存在关联关系;要删除Java班级,应该先删除学生表中与该班相关联的学生。否则,假若先删除Java班那么学生表中的cid就失去了关联 删除Java班 MySQL命令: delete from student where classid=(select cid from class where cname='Java'); delete from class where cname='Java'; ...

July 5, 2021 · 1 min · jiezi

关于mysql:MySQL别名设置

 在査询数据时可为表和字段取別名,该别名代替表和字段的原名参加查问操作。 操作的表当时已筹备 1.为表取别名 在查问操作时,假若表名很长应用起来就不太不便,此时可为表取一个別名,用该别名来代替表的名称。语法格局如下所示: SELECT * FROM 表名 [AS] 表的别名 WHERE .... ; 将student改为stu查问整表 MySQL命令: select * from student as stu; mysql装置:http://fix.cuohei.com/ 2.为字段取别名 在查问操作时,假若字段名很长应用起来就不太不便,此时可该字段取一个別名,用该别名来代替字段的名称。语法格局如下所示: SELECT 字段名1 [AS] 别名1 , 字段名2 [AS] 别名2 , ... FROM 表名 WHERE ... ; 将student中的name取别名为“姓名” 查问整表 MySQL命令: select name as '姓名',id from student;

July 5, 2021 · 1 min · jiezi

关于mysql:MySQL函数

 在此,先筹备测试数据,代码如下: -- 创立数据库 DROP DATABASE IF EXISTS mydb; CREATE DATABASE mydb; USE mydb; -- 创立student表 CREATE TABLE student ( sid CHAR(6), sname VARCHAR(50), age INT, gender VARCHAR(50) DEFAULT 'male' ); -- 向student表插入数据 INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female'); mysql装置:http://down.cuohei.com/ 1.聚合函数 在开发中,咱们经常有相似的需要:统计某个字段的最大值、最小值、 平均值等等。为此,MySQL中提供了聚合函数来实现这些性能。所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此——输出多行,输入一行。聚合函数具备主动滤空的性能,若某一个值为NULL,那么会主动将其过滤使其不参加运算。 聚合函数应用规定: 只有SELECT子句和HAVING子句、ORDER BY子句中可能应用聚合函数。例如,在WHERE子句中应用聚合函数是谬误的。 接下来,咱们学习罕用聚合函数。 1.1、count() 统计表中数据的行数或者统计指定列其值不为NULL的数据个数 查问有多少该表中有多少人 MySQL命令: select count(*) from student; 1.2、max() 计算指定列的最大值,如果指定列是字符串类型则应用字符串排序运算 查问该学生表中年纪最大的学生 MySQL命令: select max(age) from student; 1.3、min() 计算指定列的最小值,如果指定列是字符串类型则应用字符串排序运算 查问该学生表中年纪最小的学生 MySQL命令: select sname,min(age) from student; 1.4、sum() 计算指定列的数值和,如果指定列类型不是数值类型则计算结果为0 查问该学生表中年纪的总和 MySQL命令: select sum(age) from student; 1.5、avg() 计算指定列的平均值,如果指定列类型不是数值类型则计算结果为 查问该学生表中年纪的平均数 MySQL命令: select avg(age) from student; 2.其余罕用函数 这里我就不一一举例了,根本混个眼生,当前用到再细说 2.1、工夫函数 SELECT NOW(); SELECT DAY (NOW()); SELECT DATE (NOW()); SELECT TIME (NOW()); SELECT YEAR (NOW()); SELECT MONTH (NOW()); SELECT CURRENT_DATE(); SELECT CURRENT_TIME(); SELECT CURRENT_TIMESTAMP(); SELECT ADDTIME('14:23:12','01:02:01'); SELECT DATE_ADD(NOW(),INTERVAL 1 DAY); SELECT DATE_ADD(NOW(),INTERVAL 1 MONTH); SELECT DATE_SUB(NOW(),INTERVAL 1 DAY); SELECT DATE_SUB(NOW(),INTERVAL 1 MONTH); SELECT DATEDIFF('2019-07-22','2019-05-05'); 2.2、字符串函数 --连贯函数 SELECT CONCAT () -- SELECT INSTR (); --统计长度 SELECT LENGTH(); 2.3、数学函数 -- 绝对值 SELECT ABS(-136); -- 向下取整 SELECT FLOOR(3.14); -- 向上取整 SELECT CEILING(3.14); ...

July 5, 2021 · 2 min · jiezi

关于mysql:SQL的概述

 1.SQL的概述 Structure Query Language(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国规范,后被国际化规范组织(ISO)驳回为关系数据库语言的国际标准。数据库管理系统能够通过SQL治理数据库;定义和操作数据,保护数据的完整性和安全性。mysql装置请参考:http://www.runbulls.com/ 2.SQL的长处 1、简略易学,具备很强的操作性 2、绝大多数重要的数据库管理系统均反对SQL 3、高度非过程化;用SQL操作数据库时大部分的工作由DBMS主动实现 3.SQL的分类 1、DDL(Data Definition Language) 数据定义语言,用来操作数据库、表、列等; 罕用语句:CREATE、 ALTER、DROP 2、DML(Data Manipulation Language) 数据操作语言,用来操作数据库中表里的数据;罕用语句:INSERT、 UPDATE、 DELETE 3、DCL(Data Control Language) 数据管制语言,用来操作拜访权限和安全级别; 罕用语句:GRANT、DENY 4、DQL(Data Query Language) 数据查询语言,用来查问数据 罕用语句:SELECT

July 5, 2021 · 1 min · jiezi

关于mysql:MySQL数据库的数据类型

应用MySQL数据库存储数据时,不同的数据类型决定了 MySQL存储数据形式的不同。为此,MySQL数据库提供了多种数据类型,其中包含整数类型、浮点数类型、定点 数类型、日期和工夫类型、字符串类型、二进制…等等数据类型。MySQL装置请参考:http://anzhuang.runbulls.com/ 1.整数类型依据数值取值范畴的不同MySQL 中的整数类型可分为5种,别离是TINYINT、SMALUNT、MEDIUMINT、INT和 BIGINT。下图列举了 MySQL不同整数类型所对应的字节大小和取值范畴而最罕用的为INT类型的, 数据类型 字节数 无符号数的取值范畴 有符号数的取值范畴TINYINT 1 0~255 -128~127SMALLINT 2 0~65535 -32768~32768MEDIUMINT 3 0~16777215 -8388608~8388608INT 4 0~4294967295 -2147483648~ 2147483648BIGINT 8 0~18446744073709551615 -9223372036854775808~92233720368547758082.浮点数类型和定点数类型在MySQL数据库中应用浮点数和定点数来存储小数。浮点数的类型有两种:单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE)。而定点数类型只有一种即DECIMAL类型。下图列举了 MySQL中浮点数和定点数类型所对应的字节大小及其取值范畴: 数据类型 字节数 有符号的取值范畴 无符号的取值范畴FLOAT 4 -3.402823466E+38~-1.175494351E-38 0和1.175494351E-38~3.402823466E+38DOUBLE 8 -1.7976931348623157E+308~2.2250738585072014E-308 0和2.2250738585072014E-308~1.7976931348623157E+308DECIMAL(M,D) M+2 -1.7976931348623157E+308~2.2250738585072014E-308 0和2.2250738585072014E-308~1.7976931348623157E+308从上图中能够看出:DECIMAL类型的取值范畴与DOUBLE类型雷同。然而,请留神:DECIMAL类型的无效取值范畴是由M和D决定的。其中,M示意的是数据的长 度,D示意的是小数点后的长度。比方,将数据类型为DECIMAL(6,2)的数据6.5243 插人数据库后显示的后果为6.52 3.字符串类型在MySQL中罕用CHAR 和 VARCHAR 示意字符串。两者不同的是:VARCHAR存储可变长度的字符串。当数据为CHAR(M)类型时,不论插入值的长度是理论是多少它所占用的存储空间都是M个字节;而VARCHAR(M)所对应的数据所占用的字节数为理论长度加1 插入值 CHAR(3) 存储需要 VARCHAR(3) 存储需要‘’ ‘’ 3个字节 ‘’ 1个字节‘a’ ‘a’ 3个字节 ‘a’ 2个字节‘ab’ ‘ab’ 3个字节 ‘ab’ 3个字节‘abc’ ‘ab’ 3个字节 ‘abc’ 4个字节‘abcd’ ‘ab’ 3个字节 ‘abc’ 4字节4.字符串类型文本类型用于示意大文本数据,例如,文章内容、评论、详情等,它的类型分为如下4种: ...

July 5, 2021 · 1 min · jiezi

关于mysql:MySQL数据库数据表的基本操作

 1.数据库的基本操作 MySQL装置实现后,要想将数据存储到数据库的表中,首先要创立一个数据库。创 建数据库就是在数据库系统中划分一块空间存储数据,语法如下: create database 数据库名称; 创立一个叫db1的数据库MySQL命令: -- 创立一个叫db1的数据库 show create database db1; 创立数据库后查看该数据库根本信息MySQL命令: show create database db1; 删除数据库MySQL命令: drop database db1; 查问出MySQL中所有的数据库MySQL命令: show databases; 将数据库的字符集批改为gbk MySQL命令: alter database db1 character set gbk; 切换数据库 MySQL命令: use db1; 查看以后应用的数据库 MySQL命令: select database(); MySQL装置请参考:http://install.runbulls.com/ 2.数据表的基本操作 数据库创立胜利后可在该数据库中创立数据表(简称为表)存储数据。请留神:在操作数据表之前应应用“USE 数据库名;”指定操作是在哪个数据库中进行先关操作,否则会抛出“No database selected”谬误。 语法如下: create table 表名( 字段1 字段类型, 字段2 字段类型, … 字段n 字段类型 ); 2.1 创立数据表 示例:创立学生表 MySQL命令: create table student( id int, name varchar(20), gender varchar(10), birthday date ); 2.2 查看数据表 示例:查看以后数据库中所有表 MySQL命令: show tables; 示例:查表的根本信息 MySQL命令: show create table student; 示例:查看表的字段信息 MySQL命令: desc student; 2.3 批改数据表 有时,心愿对表中的某些信息进行批改,例如:批改表名、批改字段名、批改字段 数据类型…等等。在MySQL中应用alter table批改数据表. 示例:批改表名 MySQL命令: alter table student rename to stu; 示例:批改字段名 MySQL命令: alter table stu change name sname varchar(10); 示例:批改字段数据类型 MySQL命令: alter table stu modify sname int; 示例:减少字段 MySQL命令: alter table stu add address varchar(50); 示例:删除字段 MySQL命令: alter table stu drop address; 2.4 删除数据表 语法: drop table 表名; 示例:删除数据表 MySQL命令: drop table stu; ...

July 5, 2021 · 1 min · jiezi

关于mysql:MySQL数据表插入数据

 在MySQL通过INSERT语句向数据表中插入数据。在此,咱们先筹备一张学生表,代码如下: create table student( id int, name varchar(30), age int, gender varchar(30) ); 装置mysql请参考:http://xiazai.runbulls.com/ 1. 为表中所有字段插入数据 每个字段与其值是严格一一对应的。也就是说:每个值、值的程序、值的类型必须与对应的字段相匹配。然而,各字段也毋庸与其在表中定义的程序统一,它们只有与 VALUES中值的程序统一即可。 语法如下: INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...); 示例:向学生表中插入一条学生信息 MySQL命令: insert into student (id,name,age,gender) values (1,'bob',16,'male'); 2. 为表中指定字段插入数据 语法如下: INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...); 插入数据的办法根本和为表中所有字段插入数据,一样,只是须要插入的字段由你本人指定 3. 同时插入多条记录 语法如下: INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (值 1,值 2,…),(值 1,值 2,…),...; 在该形式中:(字段名1,字段名2,…)是可选的,它用于指定插人的字段名;(值 1,值 2,…),(值 1,值 2,…)示意要插人的记录,该记录可有多条并且每条记录之间用逗号隔开。 示例:向学生表中插入多条学生信息 MySQL命令: insert into student (id,name,age,gender) values (2,'lucy',17,'female'),(3,'jack',19,'male'),(4,'tom',18,'male'); ...

July 5, 2021 · 1 min · jiezi

关于mysql:MySQL更新数据update

 在MySQL通过UPDATE语句更新数据表中的数据。在此,咱们将就用六中的student学生表 1. UPDATE根本语法 UPDATE 表名 SET 字段名1=值1[,字段名2 =值2,…] [WHERE 条件表达式]; 在该语法中:字段名1、字段名2…用于指定要更新的字段名称;值1、值 2…用于示意字段的新数据;WHERE 条件表达式 是可选的,它用于指定更新数据须要满足的条件 2. UPDATE更新局部数据 示例:将name为tom的记录的age设置为20并将其gender设置为female MySQL命令: update student set age=20,gender='female' where name='tom'; mysql装置参考:http://youhua.cuohei.com/ 3. UPDATE更新全副数据 示例:将所有记录的age设置为18 MySQL命令: update student set age=18;

July 5, 2021 · 1 min · jiezi

关于mysql:MySQL删除数据

 在MySQL通过DELETE语句删除数据表中的数据。在此,咱们先筹备一张数据表,代码如下: -- 创立学生表 create table student( id int, name varchar(30), age int, gender varchar(30) ); MySQL装置请参考:http://anzhuang.cuohei.com/ -- 插入数据 insert into student (id,name,age,gender) values (2,'lucy',17,'female'),(3,'jack',19,'male'),(4,'tom',18,'male'),(5,'sal',19,'female'),(6,'sun',20,'male') ,(7,'sad',13,'female'),(8,'sam',14,'male'); 1. DELETE根本语法 在该语法中:表名用于指定要执行删除操作的表;[WHERE 条件表达式]为可选参数用于指定删除的条件。 DELETE FROM 表名 [WHERE 条件表达式]; 2. DELETE删除局部数据 示例:删除age等于14的所有记录 MySQL命令: delete from student where age=14; 3. DELETE删除全副数据 示例:删除student表中的所有记录 MySQL命令: delete from student; 4. TRUNCATE和DETELE的区别 TRUNCATE和DETELE都能实现删除表中的所有数据的性能,但两者也是有区别的: 1、DELETE语句后可跟WHERE子句,可通过指定WHERE子句中的条件表达式只删除满足条件的局部记录;然而,TRUNCATE语句只能用于删除表中的所有记录。 2、应用TRUNCATE语句删除表中的数据后,再次向表中增加记录时主动减少字段的默认初始值从新由1开始;应用DELETE语句删除表中所有记录后,再次向表中增加记录时主动减少字段的值为删除时该字段的最大值加1 3、DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句 ...

July 5, 2021 · 1 min · jiezi

关于mysql:MySQL数据表简单查询

 1.简略查问概述 简略查问即不含where的select语句。在此,咱们解说简略查问中最罕用的两种查问:查问所有字段和查问指定字段。 mysql装置请参考:http://shujuku.cuohei.com/ 在此,先筹备测试数据,代码如下: -- 创立数据库 DROP DATABASE IF EXISTS mydb; CREATE DATABASE mydb; USE mydb; -- 创立student表 CREATE TABLE student ( sid CHAR(6), sname VARCHAR(50), age INT, gender VARCHAR(50) DEFAULT 'male' ); -- 向student表插入数据 INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female'); 2.查问所有字段 查问所有字段 MySQL命令: select * from student; 3.查问指定字段(sid、sname) 查问指定字段(sid、sname) MySQL命令: select sid,sname from student; 4.常数的查问 在SELECT中除了书写列名,还能够书写常数。能够用于标记 常数的查问日期标记 MySQL命令: select sid,sname,'2021-03-02' from student; 5.从查问后果中过滤反复数据 在应用DISTINCT 时须要留神: 在SELECT查问语句中DISTINCT关键字只能用在第一个所查列名之前。 MySQL命令: select distinct gender from student; 6.算术运算符(举例加运算符) 在SELECT查问语句中还能够应用加减乘除运算符。 查问学生10年后的年龄 MySQL命令: select sname,age+10 from student; ...

July 5, 2021 · 1 min · jiezi

关于mysql:代码简洁主义用一条SQL统计留存LTV付费留存

序言对于常见的统计语句网上没什么文章,根本都不是很简洁或者一条条SQL的重叠出统计语句,各种子查问嵌套重大。刚好最近又重写统计表,记录一下新办法的成绩,顺便不便宽广面向搜寻编程的哥们有个思路参考,有不对的中央欢送大神斧正哈 ! 留存统计留存统计外围性能只须要两个表中的两个字段就能统计分明,要害表及字段如下:用户表users,蕴含user_id(用户ID)和reg_time(注册日期)的字段。 用户ID注册工夫user_idreg_time登录表login_log,蕴含user_id(用户ID)和login_time(登录工夫) 用户ID登录工夫user_idlogin_time创立并增加表格测试数据,2张表的工夫都是datetime类型 YYYY-MM-DD HH:MM:SS-- 用户注册表create table users(user_id varchar(10) primary key,reg_time datetime);insert into users values('u_01','2020-01-01 09:15:00'),('u_02','2020-01-01 00:04:00'),('u_03','2020-01-01 22:16:00'),('u_04','2020-01-01 20:32:00'),('u_05','2020-01-01 13:59:00'),('u_06','2020-01-01 21:28:00'),('u_07','2020-01-01 14:03:00'),('u_08','2020-01-01 11:00:00'),('u_09','2020-01-01 23:57:00'),('u_10','2020-01-01 04:46:00'),('u_11','2020-01-02 14:21:00'),('u_12','2020-01-02 11:15:00'),('u_13','2020-01-02 07:26:00'),('u_14','2020-01-02 10:34:00'),('u_15','2020-01-02 08:22:00'),('u_16','2020-01-02 14:23:00'),('u_17','2020-01-03 09:20:00'),('u_18','2020-01-03 11:21:00'),('u_19','2020-01-03 12:17:00'),('u_20','2020-01-03 15:26:00');-- 登陆日志表create table login_log(user_id varchar(10),login_time datetime,primary key(user_id,login_time));insert into login_log values('u_02','2020-01-02 00:14:00'),('u_10','2020-01-02 08:32:00'),('u_03','2020-01-02 09:20:00'),('u_08','2020-01-02 10:07:00'),('u_04','2020-01-02 10:29:00'),('u_09','2020-01-02 11:45:00'),('u_05','2020-01-02 12:19:00'),('u_01','2020-01-02 14:29:00'),('u_15','2020-01-03 00:26:00'),('u_14','2020-01-03 11:18:00'),('u_11','2020-01-03 13:18:00'),('u_16','2020-01-03 14:33:00'),('u_06','2020-01-04 07:51:00'),('u_18','2020-01-04 08:11:00'),('u_07','2020-01-04 09:27:00'),('u_10','2020-01-04 10:59:00'),('u_20','2020-01-04 11:51:00'),('u_03','2020-01-04 12:37:00'),('u_17','2020-01-04 15:07:00'),('u_08','2020-01-04 16:35:00'),('u_01','2020-01-04 19:29:00'),('u_14','2020-01-05 08:03:00'),('u_12','2020-01-05 10:27:00'),('u_15','2020-01-05 16:33:00'),('u_19','2020-01-06 09:03:00'),('u_20','2020-01-06 15:26:00'),('u_04','2020-01-08 11:03:00'),('u_05','2020-01-08 12:54:00'),('u_06','2020-01-08 19:22:00'),('u_13','2020-01-09 10:20:00'),('u_15','2020-01-09 16:40:00'),('u_18','2020-01-10 21:34:00');接下来就是关键步骤了,联表并解决数据,简略说说解决数据的思路:艰深的说,留存的算法为登录那天 - 注册那天=(N)留。比方:次留就是 登录那天-注册那天= (1)留。当咱们两张表中含有注册工夫跟登录工夫时,最奢侈的想法应该是使用上述例1的公式间接统计出留存。联表并以含有注册工夫的users表为主表,登录表为从表,合成一张大表数据后对注册工夫分组统计。联表如下:(from users left join login_log on users.user_id = login_log.user_id)、分组如下:(group by date(users.reg_time))应用sum(datediff(login_time, reg_time) = 1) as ‘次日留存用户数’ 来别离求同一注册工夫的其余几个纬度的用户留存状况最终代码如下:~~~~select date(reg_time) dt, count(distinct users.user_id) 新增用户数, sum(datediff(login_time,reg_time)=1) 次日留存用户数, sum(datediff(login_time,reg_time)=3) 四日留存用户数, sum(datediff(login_time,reg_time)=7) 八日留存用户数, sum(datediff(login_time,reg_time)=1)/count(distinct users.user_id)*100 次日留存率, sum(datediff(login_time,reg_time)=3)/count(distinct users.user_id)*100 四日留存率, sum(datediff(login_time,reg_time)=7)/count(distinct users.user_id)*100 八日留存率from users left join login_log on users.user_id=login_log.user_idgroup by date(reg_time);日期新增用户数次日留存用户数四日留存用户数八日留存用户数次日留存率四日留存率八日留存率2020-01-011086380.00%60.00%30.00%2020-01-02643266.67%50.00%33.33%2020-01-03432175.00%50.00%25.00%得出的留存后果与数据是完全一致的,同理也能用这种办法得出付费留存和LTV。相比嵌套的子查问简洁了很多。 ...

July 5, 2021 · 1 min · jiezi

关于mysql:JOIN

当初有两张表,t1表100行,t2表1000行select * from t1 straight_join t2 on (t1.a=t2.b);Simple Nested-Loop Join(没有被MYSQL应用)前提:join字段t2.b不存在索引 查问过程:全表扫描t1,而后将每一条记录a字段作为条件到被驱动表t2进行一次全表扫描,也就是100次全表扫描。 Block Nested-Loop Join(简称BNL)前提:join字段t2.b不存在索引。查问过程:全表扫描t1,将数据放入join buffer,再将被驱动表t2数据与join buffr里的t1数据进行批量比照。当t1表数据过多,join buffer存不下时,会将数据分段反复执行整个查问过程。tips:所以某些场景下能够通过设置join_buffer_size增大join buffer进步join速度。通过explain的Extra 字段有 Using join buffer(Block Nested Loop)。 Index Nested-Loop Join(简称NLJ)前提:join字段t2.b存在索引。查问过程:全表扫描t1,循环100次(将第一条记录a字段作为条件去被驱动表t2查问二级索引树,失去主键ID,再回表查问主键索引树)。应用BKA优化查问过程:全表扫描t1,循环100次(将每一条记录a字段放入join buffer),将join buffer里的a字段作为条件去被驱动表t2范畴查问二级索引树,失去主键ID,将主键ID放入read_rnd_buffer,递增排序后,范畴查问主键索引树。工夫复杂度:100+1002log2^1000(先扫描驱动表100行,再循环100次扫描二级索引树失去主键ID,再"回表"扫描主键索引树1002log2^1000)。tips:假如驱动表的行数是 N,被驱动表行数M,也就是N+N2log2^M。能够看出驱动表的行数N对后果影响更大,所以才有了小表驱动大表。 Multi-Range Read(针对回表的优化)因为大多数的数据都是依照主键递增程序插入失去的,所以咱们能够认为,如果依照主键的递增程序查问的话,对磁盘的读比拟靠近程序读,可能晋升读性能。 开启MRR优化set optimizer_switch="mrr=on"稳固应用MRR优化,依照官网文档的说法,是当初的优化器策略,判断耗费的时候,会更偏向于不应用 MRR,把 mrr_cost_based 设置为 off,就是稳固应用 MRR 了set optimizer_switch="mrr=on,mrr_cost_based=off"所以回表会变为:依据二级索引树失去主键ID后存入read_rnd_buffer(read_rnd_buffer_size参数管制),进行递增排序,拿排序后的主键ID去主键索引树进行范畴查问。(用上MRR,通过explain的Extra 字段有 Using MRR) Batched Key Access(针对NLJ的优化,BKA依赖MRR)开启BKA优化,前两个参数是为了开启MRRset optimizer_switch='mrr=on,mrr_cost_based=off,batched_key_access=on';join_buffer 在 BNL 算法里的作用,是暂存驱动表的数据。然而在 NLJ 算法里并没有用。那么,刚好就能够复用 join_buffer 到 BKA 算法中。在NLJ过程中,因为从驱动表 t1,一行行地取出 a 的值,再到被驱动表 t2 去做 join。也就是说,对于表 t2 来说,每次都是匹配一个值。这时,MRR 的劣势就用不上了。所以能够将t1表的a字段放入join buffer,递增排序后,在t2的b字段索引树上进行范畴查问,失去主键ID,再利用MRR优化进行后续回表。 hash join因为join_buffer 外面保护的是一个无序数组,所以在和被驱动表join时就须要逐条匹配,如果通过hash构造去存储驱动表数据的话,就能大大减少等值判断次数。 ...

July 5, 2021 · 1 min · jiezi

关于mysql:mysql-sum函数中对两字段做运算时有null时的情况

背景在针对一些数据进行统计汇总的时候,有时会对表中的某些字段进行逻辑运算,如加减乘除,如果要求和的话还可能会用到sum函数,如果两者联合起来应该怎么解决,如果参加运算的字段中呈现null值的时候会呈现一些什么状况。 问题CREATE TABLE `user` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '自增ID', `name` varchar(20) NOT NULL COMMENT '名称', `total_amount` int(11) DEFAULT NULL COMMENT '账户总金额', `freeze_amount` int(11) DEFAULT NULL COMMENT '解冻金额', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci数据如下 如上表所示,用户信息表中有账户总金额和解冻金额字段,咱们当初想要计算可用金额,依据业务场景可用金额 = total_amount - freeze_amount,如果此时要汇总计算表中所有数据的可用金额总和,咱们能够写如下SQL。 依据表中的数据,咱们晓得统计后正确的后果应该是 (2000 - 50) + (1500 - 100) + (500 - 50) + 1000 = 4800但如果咱们这么写,那么失去的后果是谬误的。 select sum(total_amount - freeze_amount) from user(2000 - 50) + (1500 - 100) + (500 - 50) + (1000 - null) = 3800因为1000 - null的后果不是1000而是null,因为null与任何值比拟和运算的后果都是null,所以咱们应该针对null做非凡解决。 ...

July 4, 2021 · 1 min · jiezi

关于mysql:环境安装MySQL安装

一文教会你装置与卸载MySQL1. 官网下载拜访官方网站:https://www.mysql.com/ 下载MySQL。 这里就不是我着重讲的重点了。接下来还是用我发给大家的版本吧。也能够自行下载收费的版本都能够的啦! 2. 文件下载这里间接分享一份百度网盘的链接给大家。 链接:https://pan.baidu.com/s/1WL6J... 提取码:9iwr外面包含了<font color=#ff1493>MySQL</font>的装置,还有<font color=#ff1493>SQLyog</font>图形界面的安装包。 3. 卸载步骤有人就会奇怪,为什么要先将卸载步骤呢?因为我这台电脑中,原本就存在了<font color=#ff1493>MySQL</font>,所以还是带大家先来卸载步骤啦。哈哈,无非我就是懒。 卸载这一步骤还是十分有用滴!进行<font color=#ff1493>MySQL</font>服务。 具体有两种形式: 通过命令行形式:<font color=#ff1493>Win + R</font> 而后敲<font color=#ff1493>cmd</font>进入命令行。 net stop mysql按下entry键后后果:MySQL 服务正在进行.MySQL 服务已胜利进行。通过计算机管理形式 右击计算机-->治理-->服务-->启动或进行<font color=#ff1493>MySQL</font>服务 下载<font color=#ff1493>MySQL</font>安装程序。 找到控制面板--> 程序和性能,卸载<font color=#ff1493>MySQL</font>程序。 卸载过后,也须要删除文件夹中的<font color=#ff1493>MySQL</font>,比方我的下载目录是<font color=#ff1493>E:\Program Files (x86)</font>中<font color=#ff1493>MySQL</font>该目录下残余了所有文件,把<font color=#ff1493>MySQL</font>文件夹也删了。 删除<font color=#ff1493>C</font>盘<font color=#ff1493>ProgramDate</font>暗藏目录中对于<font color=#ff1493>MySQL</font>的目录。(重点) <font color=#ff1493>ProgramDate</font>目录是暗藏的,所以须要咱们显示进去能力持续操作: 能够点击<font color=#ff1493>C</font>盘中的查看,--> 再点击暗藏的我的项目的性能,就能失去了。 如果没有看到这个性能的话,就按我上面这个步骤来 第一步:在计算机界面,点击组织,抉择文件夹和搜寻选项: 第二步:弹出如下对话框,点击查看: 第三步:在高级设置中向下搜寻,可看到显示暗藏文件夹,点击确认。 此时你曾经失去了这个<font color=#ff1493>ProgramDate</font>暗藏目录了。接下来就是删除外面的<font color=#ff1493>MySQL</font>。 走到这里,基本上来说,你的<font color=#ff1493>MySQL</font>曾经齐全卸载洁净了。接下来就是正式咱们的装置步骤了。 4. 装置步骤装置前留神先敞开了windows防火墙。关上下载的<font color=#ff1493>MySQL</font>安装文件<font color=#ff1493>mysql-5.5.40-win64.msi</font>,间接双击关上即可。 ...

July 3, 2021 · 2 min · jiezi

关于mysql:mysql脚本subscribe

-- Created by 10169291 on 2017/4/1, 10:03:35 -------- select 'set sql_mode=ANSI' as prompt;set sql_mode=ANSI;select 'change database to zxinsag' as prompt;use zxinsag; select 'Dropping TL_NORTH_SUBID_PHONE...' as prompt;drop table if exists TL_NORTH_SUBID_PHONE;select 'Dropping TL_NORTH_SUBSCRIBE...' as prompt;drop table if exists TL_NORTH_SUBSCRIBE;select 'Dropping TL_NORTH_SUBSCRIBE_UPDATE...' as prompt;drop table if exists TL_NORTH_SUBSCRIBE_UPDATE;select 'Dropping TL_SOUTH_SUBSCRIBE...' as prompt;drop table if exists TL_SOUTH_SUBSCRIBE;select 'Dropping TO_SOUTH_SUBSCRIBE...' as prompt;drop table if exists TO_SOUTH_SUBSCRIBE;select 'Dropping TP_CALLEVENT_DEF...' as prompt;drop table if exists TP_CALLEVENT_DEF;select 'Dropping TP_DIRECTION_DEF...' as prompt;drop table if exists TP_DIRECTION_DEF;select 'Dropping TP_NOTIFY_MODE_DEF...' as prompt;drop table if exists TP_NOTIFY_MODE_DEF;select 'Dropping TT_NORTH_SUB_COMPARE...' as prompt;drop table if exists TT_NORTH_SUB_COMPARE;select 'Dropping TT_SOUTH_SUB_RESULT...' as prompt;drop table if exists TT_SOUTH_SUB_RESULT;select 'Dropping TT_SUBSCRIBE_EVENT...' as prompt;drop table if exists TT_SUBSCRIBE_EVENT;select 'Dropping TT_SUBSCRIBE_PHONE...' as prompt;drop table if exists TT_SUBSCRIBE_PHONE; ...

July 3, 2021 · 35 min · jiezi

关于mysql:mysql常用函数

mysql数据库的启停 ebaserdb用户执行xpecdmoni 开启xsuperstop 敞开mysql.server status 状态 登陆mysql -uroot -pAAA -h10.47.235.192 查看版本:mysql --help | grep Distrib mysql -Vmysql> select version();mysql> status; 第一招、mysql服务的启动和进行 net stop mysql net start mysql 第二招、登陆mysql 语法如下: mysql -u用户名 -p用户明码 键入命令mysql -uroot -p, 回车后提醒你输出明码,输出12345,而后回车即可进入到mysql中了,mysql的提示符是: mysql> 留神,如果是连贯到另外的机器上,则须要退出一个参数-h机器IP 第三招、减少新用户 格局:grant 权限 on 数据库.* to 用户名@登录主机 identified by "明码" 如,减少一个用户user1明码为password1,让其能够在本机上登录, 并对所有数 据库有查问、插入、批改、删除的权限。首先用以root用户连入mysql,而后键入以下命令: grant select,insert,update,delete on . to user1@localhost Identified by "password1"; 如果心愿该用户可能在任何机器上登陆mysql,则将localhost改为"%"。 如果你不想user1有明码,能够再打一个命令将明码去掉。 grant select,insert,update,delete on mydb.* to user1@localhost identified by ""; ...

July 3, 2021 · 3 min · jiezi

关于mysql:MySQL底层索引深度解刨

作者:王新华 为什么须要索引?一句话概括:索引的呈现其实就是为了进步数据查问的效率。 一、索引常见模型模型: 哈希表、有序数组和搜寻树 哈希表哈希表是一种以键 - 值(key-value)存储数据的构造,咱们只有输出待查找的键即 key,就能够找到其对应的值即 Value。哈希的思路很简略,把值放在数组里,用一个哈希函数把 key 换算成一个确定的地位,而后把 value 放在数组的这个地位。工夫复杂度:0(1)画重点:如果索引的值有反复的话,会产生hash碰撞,尽管能够解决hash抵触,然而导致查问效率升高。场景: 哈希表这种构造实用于只有等值查问的场景,不适用于查找范畴的。相似 redis Memcached 及其他一些 NoSQL 引擎。搜寻树在理解搜寻树之前咱们须要先晓得 二叉树、均衡二叉树、B树、B+树 举荐一个工具能够清晰的了解树的原理: https://www.cs.usfca.edu/~gal... 二叉树二叉树个性: 左子树的键值小于根的键值,右子树的键值大于根的键值。 如下图就是一个二叉树 以后二叉树的插入程序是: 3 2 4 1 5 如果咱们按1 2 3 4 5 的程序来插入的化, 咱们失去的二叉树就是如下图所示如果是这种二叉树查问效率就太低了。若想二叉树的查问效率尽可能高,须要二叉树是均衡的从而引出新的定义 - 均衡二叉树或称AVL树。 均衡二叉树均衡二叉树特点: 满足二叉树的个性任何节点的两个子树的高度最大差为1如上两个组合之后就是均衡二叉树,如下图 中插入树的程序为:1 2 3 4 5 6 7 8 时候生成的是如图所示的内容,和图二实现不一样, 在通过工具生成这个图的时候显著能够看到不论如何插入节点数据都能满足均衡二叉树的特点2。 当删除一个节点之后同样能满足avl树,如下图删除图3中的5节点之后展现如下。 总结一下 均衡二叉树的长处 a 不错的查找性能(O(logn)), 不存在极其的低效查找的状况。b 能够实现范畴查找、数据排序。看起来 AVL 树作为数据查找的数据结构的确很不错,然而 AVL 树并不适宜做 Mysql 数据库的索引数据结构,因为考虑一下这个问题: 数据库查问数据的瓶颈在于磁盘 IO,如果应用的是 AVL 树,咱们每一个树节点只存储了一个数据,咱们一次磁盘 IO 只能取出来一个节点上的数据加载到内存里,那比方查问 id=8 这个数据咱们就要进行磁盘 IO 三次,这是如许耗费工夫的。所以咱们设计数据库索引时须要首先思考怎么尽可能减少磁盘 IO 的次数。 ...

July 2, 2021 · 2 min · jiezi

关于mysql:容器化-基于-Kubernetes-的新一代-MySQL-高可用架构实现方案

作者:高日耀 资深 MySQL 内核研发 本文源于作者在 KubeSphere & Friends 2021 杭州站 的演讲内容《基于 Kubernetes 的新一代 MySQL 高可用架构实现计划》。 本文是 MySQL 容器化系列的第三篇文章,次要介绍 MySQL 容器化 Helm 版本[1] 的设计思路。 Dockerfile 简介首先 RadonDB MySQL 一个 Pod 中的容器角色中,个别蕴含 MySQL、Xenon、slowlog 三个容器。 其中,MySQL 和 Xenon Dockerfile 目录构造如下所示: MySQL Dockerfile 解析启动 MySQL 主过程前,须要筹备数据库配置、初始化等,这些工作要在最终的 MySQL 运行之前解决。在制作镜像时,通过配置 MySQL Dockerfile 中 ENTRYPOINT 和 CMD 参数,可提前准备数据库配置、初始化等过程。 Docker 是分层的,每一条命令都会建一个镜像层,分层太多会导致疾速收缩。在制作镜像时,不倡议分层太多。 MySQL Dockerfile 文件中命令示例如下: MySQL mysql-entry.sh 文件中蕴含启动命令,其次要执行流程如下: Xenon Dockerfile 解析Xenon Dockerfile 比较简单,跟 MySQL Dockerfile 流程相似。 ...

July 2, 2021 · 2 min · jiezi

关于mysql:node和mysql的CURD总结

导语:之前做过一个小我的项目,其中用到了node和mysql,当初就联合这两者做一个应用操作总结。CURD是数据库技术中的缩写词,代表创立(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作,用于解决数据等操作。目录后期筹备实战演练办法总结后期筹备装置php环境手动装置倡议浏览本博客另一篇文章《win10手动配置php开发环境教程》 集成环境装置能够应用这几个集成包: PHPStudy LNMP XAMPP wampserver appserv 装置node环境在nodejs官网下面下载而后装置,一步一步的装置好了以下,查问下那个版本。 实战演练本大节通过一个商品的增删改查来展现如何应用node来连贯mysql进行各种操作。 node筹备装置依赖包$ mkdir demo$ cd demo$ npm init$ npm install express --save$ npm install -g express-generator$ npm install pm2 -g$ npm install supervisor启动node服务编写启动脚本 // index.jsconst express = require('express');const app = express();const port = 3000;const db = require('./mysql');app.get('/', (req, res) => { res.send('Hello,demo!');})app.listen(port, () => { console.log('Server is running on port ', port + '!');})在package.json退出以下命令 "dev": "node index.js" // package.json{ "name": "demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "node index.js" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.1", "mysql": "^2.18.1", "supervisor": "^0.12.0" }}启动脚本 ...

July 1, 2021 · 5 min · jiezi

关于mysql:MySQL-常见面试题知识点总结2021-最新版-JavaGuide

相干浏览: 2.7w字!Java根底面试题/知识点总结!(2021 最新版)这篇文章之前发过,不过,我最近对其进行了重构欠缺并且修复了很多小问题。所以,在公号再同步一下! 内容很硬!强烈建议小伙伴们花 10 分钟左右浏览一遍! MySQL 根底关系型数据库介绍顾名思义,关系型数据库就是一种建设在关系模型的根底上的数据库。关系模型表明了数据库中所存储的数据之间的分割(一对一、一对多、多对多)。 关系型数据库中,咱们的数据都被寄存在了各种表中(比方用户表),表中的每一行就寄存着一条数据(比方一个用户的信息)。 大部分关系型数据库都应用 SQL 来操作数据库中的数据。并且,大部分关系型数据库都反对事务的四大个性(ACID)。 有哪些常见的关系型数据库呢? MySQL、PostgreSQL、Oracle、SQL Server、SQLite(微信本地的聊天记录的存储就是用的 SQLite) ......。 MySQL 介绍 MySQL 是一种关系型数据库,次要用于长久化存储咱们的零碎中的一些数据比方用户信息。 因为 MySQL 是开源收费并且比拟成熟的数据库,因而,MySQL 被大量应用在各种零碎中。任何人都能够在 GPL(General Public License) 的许可下下载并依据个性化的须要对其进行批改。MySQL 的默认端口号是3306。 存储引擎存储引擎相干的命令查看 MySQL 提供的所有存储引擎 mysql> show engines; 从上图咱们能够查看出 MySQL 以后默认的存储引擎是 InnoDB,并且在 5.7 版本所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 反对事务。 查看 MySQL 以后默认的存储引擎 咱们也能够通过上面的命令查看默认的存储引擎。 mysql> show variables like '%storage_engine%';查看表的存储引擎 show table status like "table_name" ; MyISAM 和 InnoDB 的区别 MySQL 5.5 之前,MyISAM 引擎是 MySQL 的默认存储引擎,堪称是风光一时。 ...

July 1, 2021 · 3 min · jiezi

关于mysql:mysql-datetime-NOT-NULL-DEFAULT-00000000-000000-无效

mysql datetime NOT NULL DEFAULT '0000-00-00 00:00:00' 有效 创立表时,数据类型为datetime,默认值为0000-00-00 00:00:00时报错,查了材料说0000-00-00 00:00:00 在mysql5.7中为非标准工夫,所以谬误 解决办法: show variables like 'sql_mode';查看sql_model中的值是否有NO_ZERO_IN_DATE,NO_ZERO_DATE这两个,如有则持续上面步骤set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' 这个步骤是删除下面的NO_ZERO_IN_DATE,NO_ZERO_DATE,因为他俩禁止了0000这样的日期和工夫,因而从新设置sql_mode,去掉这两项就能够了执行胜利后再执行sql应该就能够了须要留神的事项设置sql_mode有两种形式第一种:set session sql_mode ='xxxx'第二种: set global sql_mode ='xxxx'参考示例:SET [SESSION|GLOBAL] sql_mode='modes'此外还要留神:SESSION(默认为选项):示意以后回话中失效;GLOBAL(需重启MySql):示意全局失效如果你是应用客户端Navicat等工具操作的,有很大的可能性你会关上多个窗口,如果你在一个窗口中应用set session sql_mode='xxxx'批改sql_mode的值,而后另一个窗口中执行之前报错的sql,你会发现还是会报那个谬误,因为SESSION是示意以后会话中失效,切记。

July 1, 2021 · 1 min · jiezi

关于mysql:推荐一个MySQL宝藏网站

前言: 在学习 MySQL 的过程中,兴许你心愿有个中文网站能够参考,或者你已经在搜索引擎中寻找过此类网站。如果你有此类需要的话,那么上面介绍的这个网站你肯定要珍藏。 1.宝藏文档网站后面文章有介绍过 MySQL 官网文档,咱们晓得官网文档都是英文的,尽管能够通过翻译插件翻译为中文,但翻译成果总是不太现实。有些同学可能在想,如果有中文版就好了,在搜索引擎中搜寻 MySQL 中文文档,也能找到局部内容,但要么是版本很老要么是残缺不全,无奈参考应用。 笔者某次无意间发现一个中文文档网站,用了一段时间,感觉品质还能够。废话不多说,马上举荐给大家。网站地址:https://www.docs4dev.com/docs/zh/mysql/5.7/reference 咱们来看下文档首页,比照下官网文档首页,布局还是很类似的。 此中文文档基于 MySQL 5.7 官网文档译制,和原版目录构造齐全一样,翻译品质还能够,应用体验根本和官网文档统一。依据笔者应用教训,总结出该网站的以下几点长处: 是 MySQL 5.7 版本中文文档,版本还不算老。翻译准确度尚可 不存在将 SQL 代码翻译成中文及将 table 翻译为“桌子”的状况。反对站内搜索。超链接跳转正确,且是站内跳转。网址后缀和官网保持一致,例如:https://www.docs4dev.com/docs/zh/mysql/5.7/reference/replication.html 与 https://dev.mysql.com/doc/refman/5.7/en/replication.html 页面内容统一。网站在继续保护。2.对于Docs4dev其实 MySQL 中文文档只是 Docs4dev 网站的一小部分。Docs4dev 顾名思义就是专为开发者筹备的文档网站,除了 MySQL 文档外,此网站还蕴含 Java、Spring、Linux、Big Data、Python 等中文文档,上面两张图片别离是网站首页及团队 GitHub 首页。 创立 Docs4dev 的初衷,是因为作者本人在写代码的过程中,常常须要查看各类框架的文档,然而大部分文档都只有英文版本,而且很多文档不反对站内搜索,查资料时十分不不便。能够看出,Docs4dev 网站中的文档还是很丰盛的,并且团队还在继续保护,若有谬误可给作者提 issue ,切实是一个为开发者筹备的宝藏网站。 总结: Docs4dev 是一款不可多得的文档网站,如果你学习过程中常常要参考官网文档,能够关上 Docs4dev 找寻下,说不定有你想要的文档。对于 MySQL 中文文档,笔者常常关上参考,当然你也能够抉择读原版英文文档或者二者比照着看,无论怎么说也是多了一个抉择。多参考文档对于零碎学习还是很有必要的。

June 30, 2021 · 1 min · jiezi

关于mysql:mysql启动失败Job-for-mysqldservice-failed-because

报错信息: Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.明天启动mysql发现报错如上提醒,依据如下步骤进行了排查修复 1, 查看日志文件 /var/log/mysqld.logtail -f /var/log/mysqld.log2021-06-29T06:00:14.989419Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool2021-06-29T06:00:14.992452Z 0 [Note] Plugin 'FEDERATED' is disabled.2021-06-29T06:00:15.000437Z 0 [Note] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them.2021-06-29T06:00:15.000859Z 0 [Warning] CA certificate ca.pem is self signed.2021-06-29T06:00:15.002287Z 0 [Note] Server hostname (bind-address): '*'; port: 33062021-06-29T06:00:15.002345Z 0 [Note] IPv6 is available.2021-06-29T06:00:15.002377Z 0 [Note] - '::' resolves to '::';2021-06-29T06:00:15.002393Z 0 [Note] Server socket created on IP: '::'.2021-06-29T06:00:15.039471Z 0 [ERROR] /usr/sbin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2 - No such file or directory)2021-06-29T06:00:15.039485Z 0 [ERROR] Can't start server: can't create PID file: No such file or directory2 新建 /var/run/mysqld目录mkdir -p /var/run/mysqld/3 执行mysql启动命令service mysqld restart, 发现仍然失败, 再次查看日志 /var/log/mysqld.log[ERROR] /usr/sbin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 13 - Permission denied)[ERROR] Can't start server: can't create PID file: Permission denied报错说是没有权限. ...

June 29, 2021 · 1 min · jiezi

关于mysql:Mysql报错message-from-server-is-blocked-because-of-many

报错内容:java.sql.SQLException: null,  message from server: "Host '10.21.5.91' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'" 起因:数据库屡次 谬误连贯 造成 屏蔽了以后ip连贯数据库的申请 解决形式1:选中数据库----刷新----权限 解决形式2:1:登录mysql控制台:mysql -uroot -p2:flush hosts

June 29, 2021 · 1 min · jiezi

关于mysql:面试八股文MYSQL隔离模式

MYSQL 数据库中一个事务具备ACID示意原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。 事务并发可能引发的问题1.脏读一个事务读到了另一个未提交事务批改过的数据。(脏读只在读未提交隔离级别才会呈现)2.不可反复读一个事务只能读到另一个曾经提交的事务批改过的数据,并且其余事务每对该数据进行一次批改并提交后,该事务都能查问失去最新值。(不可反复读在读未提交和读已提交隔离级别都可能会呈现)3.幻读一个事务先依据某些条件查问出一些记录,之后另一个事务又向表中插入了合乎这些条件的记录,原先的事务再次依照该条件查问时,能把另一个事务插入的记录也读出来。(幻读在读未提交、读已提交、可反复读隔离级别都可能会呈现)隔离模式未提交读在读未提交隔离级别下,事务A能够读取到事务B批改过但未提交的数据。可能产生脏读、不可反复读和幻读问题。已提交读在读已提交隔离级别下,事务B只能在事务A批改过并且已提交后能力读取到事务B批改的数据。读已提交隔离级别解决了脏读的问题,但可能产生不可反复读和幻读问题可反复读在可反复读隔离级别下,事务B只能在事务A批改过数据并提交后,本人也提交事务后,能力读取到事务B批改的数据。可反复读隔离级别解决了脏读和不可反复读的问题,但可能产生幻读问题。发问:为什么上了写锁(写操作),别的事务还能够读操作?因为InnoDB有MVCC机制(多版本并发管制),能够应用快照读,而不会被阻塞。发问:为什么innodb默认应用可反复读?因为,binlog和sql执行程序问题。串行化顾名思义。

June 28, 2021 · 1 min · jiezi

关于mysql:COMP5349-Cloud-Computin

COMP5349: Cloud Computing Sem. 1/2019Assignment 1: Data Analysis with MapReduce and SparkIndividual Work: 20% 22.03.20191 IntroductionThis assignment tests your ability to implement simple data analytic workload using basicfeatures of MapReduce and Spark framework. In particular, you are encouraged to practicethe skills of designing algorithms by organizing data as key value pairs, the concept thatis central to both frameworks. The data set you will work on is adapted from TrendingYoutube Video Statistics data from Kaggle. There are two workloads you should designand implement against the given data set. You are required to implement one workloadwith MapReduce and the other workload with Spark.2 Input Data Set DescriptionThe dataset contains several months’ records of daily top trending YouTube video in thefollowing ten countries: Canada,France, Germany, India,Japan, Mexico, Russia, South Korea,United Kingdom and United States of America. There are up to 200 trending videoslisted per day.In the original data set, each country’s data is stored in a separate CSV file, with eachrow representing a trending video record. If a video is listed as trending in multiple days,each trending appearance has its own record. The record includes video id, title, trendingdate, publish time, number of views, and so on. The record also includes a category idfield. The categories are slightly different in each country. A JSON file defineing themapping between category ID and category name is provided for each country.The following preprocessing have been done to ensure that you can focus on the mainworkload design. Merge the 10 individual CSV files into a single CSV file; Add a column category to store the actual category name based on the mapping Add a column country to store the trending country, each country is represented bytwo capital letter code.1 Remove rows with invalid video id values Remove textual columns that are not relevant to the workloads and may cause encodingand parsing issueThe results is a CSV file AllVideos short.csv with mostly numeric and date columns.3 Analysis Workload Description3.1 Category and Trending CorrelationSome videos are trending in multiple countries. We are interested to know if there is anycorrelation between video category and trending popularity among countries. For instance,we all know that “music has an universal appeal”, in the context of Youtube videos, wemay expect to see a common set of trending music videos among many countries. Onthe contrary, we may expect to see each country with a distinctive set of trending politicalvideos.In this workload, you are asked to find out the average country number for videos ineach category. For instance, if in the data set there are five videos belonging to categorySports, their trending data are as follows:video id category trending date views country1 Sports 18.17.02 700 US1 Sports 18.18.02 1500 US2 Sports 18.11.03 3000 US2 Sports 18.11.03 2000 CA2 Sports 18.11.03 5000 IN2 Sports 18.12.03 7000 IN3 Sports 18.17.04 2000 JP4 Sports 18.16.04 3000 KR4 Sports 18.17.04 9000 KR5 Sports 18.16.04 4000 RUWe can see that video 1 appears in 1 country; video 2 appears in 3 countries; video 3, 4and 5 each appears in 1 country respectively. The average country number for videos incategory Sports would be (1+3+1+1+1)5 = 1.4 The final result of this work load would looklike the following:Music: 1.31News & Politics: 1.05...23.2 Controversial Trending Videos IdentificationListing a video as trending would help it attract more views. However, not all trendingvideos are liked by viewers. It is not unusual for a trending video to have more dislikesthan likes; For some video, listing it as trending would increase its dislikes numbermore than the increase of its likes number. This workload aims to identify such videos.Below are a few records of a particular video demonstrating the change of various numbersover time:video id trending date views likes dislikes countryQwZT7T-TXT0 2018-01-03 13305605 835378 629120 USQwZT7T-TXT0 2018-01-04 23389090 1082422 1065772 USQwZT7T-TXT0 2018-01-05 28407744 1204072 1278887 USQwZT7T-TXT0 ... ... ... ... USQwZT7T-TXT0 2018-01-09 37539570 1402578 1674420 USQwZT7T-TXT0 2018-01-03 13305605 835382 629123 GBQwZT7T-TXT0 2018-01-04 23389090 1082426 1065772 GBQwZT7T-TXT0 2018-01-05 728407744 1204074 1278889 GBQwZT7T-TXT0 ... ... ... ... GBQwZT7T-TXT0 2018-01-18 45349447 1572111 1944971 GBThe video has multiple trending appearances in US and GB. In both countries, its views,likes and dislikes all increase over time with each trending appearance. As highlightedin the table above, the dislikes number grows much faster than the likes numbers. Inboth countries, the video ended with higher number of dislikes than likes albeit startingwith higher likes number.In this workload, you are asked to find out the top 10 videos with fastest growthof dislikes number between its first and second trending appearances. Here we measurethe growth of dislikes number by the gap of dislikes increase and likes increasebetween the first two trending appearances in the same country.For instance, the dislikes growth of video QwZT7T-TXT0 in US is computed as follows:(1065772 629120) (1082422 ? 835378) = 189608Where the first component is the increase of dislikes and the second component isthe increase of likes between the first and second trending appearances .The result of this workload should show a few details of the top 10 videos, including thevideo id, category, dislike growth value and country code. Below is a few sample results:"BEePFpC9qG8", 366556, "Film & Animation", "DE""RmZ3DPJQo2k", 334594, "Music", "KR""1Aoc-cd9eYs", 192222, "Entertainment", "GB""QwZT7T-TXT0", 189608, "Entertainment", "US""QwZT7T-TXT0", 189605, "Entertainment", "GB"3If a video has changed its category name over time, you can use the category of thefirst appearance. It is possible to include the same video multiple times in top 10 list if ithas large dislikes growth in multiple countries. Video QwZT7T-TXT0 is such an example.4 Coding and Execution RequirementBelow are requirements on coding and Execution: You can implement the workloads in either Java or Python. No other language isallowed. You must use MapReduce and Spark framework in your implementation. Implementationusing plain language features will not achieve any point. Implementation“pretends” to use the framework will not achieve any point. A typical example of“pretending” to use MapReduce framework is to design the workload as one job,with an identity mapper and a bloated reducer; The identity mapper just pass theinput as is to the reducer, which has all the implemented everything in one function. Your code must take two parameters: an input path and an output path. The outputshould be written to a file. Your code must execute on AWS EMR with emr-5.21.0 software release. For Java implementation, a script (e.g. ant build file) must be provided to allow easycreation of the executable jar file. The job submission command must be provided ina read.me file. For Python implementation, a shell script must be provided with job submission command.45 DeliverableThere are two deliverables: source code and brief report (up to 2 pages). Both are dueon Wednesday 10th of April 23:59 (Week 7).JAVA submission should be organized in the following folder structure and packed as azip file:/workload1/srcbuildfileread.me/workload2/srcbuildfileread.me/report<uniKey>-report.pdfPython submission should be organized in the following folder structure and packagedas a zip file:/workload1xxx.py (multiple files)run.sh/workload2xxx.py (multiple files)run.sh/report<uniKey>-report.pdfThe submitted zip file should be called <labCode>-<uniKey>-<firstNae>-<lastName>.zip.There will be a demo in week 7 during tutorial time. The tutor will upload all submissionson AWS and run your code on EMR cluster during the demo. You are expected toanswer design and implementation related questions duing the demo.Submit a hard copy of your report together with signed cover sheet during the demo.The report must contain a computation graph for each workload, with very brief descriptions.A sample report will be uploaded as reference.WX:codehelp ...

June 28, 2021 · 6 min · jiezi

关于mysql:ISSS615-Data-Management

ISSS615 Data ManagementPHP_LAB1.doc page 1 of 4SMU Classification: RestrictedPHP Lab 1Objective:The objective is to help the students to get hands on writing PHP code. In this labexercise, you will create PHP pages based on the requirements specified.Pre-Requisites: WAMP Server is installed and the icon is ‘Green’ in colour.Submission:Please submit all your answers in a single lab1.zip file containing the following to eLearn(online) by the end of the classExercise1.php,Exercise2.php,ex1form.html and ex1result.phpex3form.html and ex3result.phpISSS615 Data ManagementPHP_LAB1.doc page 2 of 4SMU Classification: RestrictedPART 1: Write basic PHP syntax codesExercise 1Using php WHILE construct and IF-ELSE statement, write a program to display the countof lowercase letter 'a' appearing in the text string "Data Management". Also display totalnumber of letters that are not 'a' in the same text string.Save the file as Exercise1.phpNote: You could make use of the functions strlen and substr for this exercise.Exercise 2Write php program to calculate the cumulative sum of numbers from 1 to 10.Display the result in a table format. Save the file as Exercise2.phpNote: Example of a Table html script that produces a table with 2 rows, a header row anda content / data row<html> <body> ...

June 27, 2021 · 3 min · jiezi

关于mysql:SQL-性能优化梳理

前言本文次要针对的是关系型数据数据库MySql。键值类数据库能够参考: https://www.jianshu.com/p/098a870d83e4先简略梳理下Mysql的基本概念,而后分创立时和查问时这两个阶段的优化开展。 1 基本概念简述1.1 逻辑架构 第一层:客户端通过连贯服务,将要执行的sql指令传输过去第二层:服务器解析并优化sql,生成最终的执行打算并执行第三层:存储引擎,负责数据的贮存和提取1.2 锁数据库通过锁机制来解决并发场景-共享锁(读锁)和排他锁(写锁)。读锁是不阻塞的,多个客户端能够在同一时刻读取同一个资源。写锁是排他的,并且会阻塞其余的读锁和写锁。简略提下乐观锁和乐观锁。 乐观锁,通常用于数据竞争不强烈的场景,多读少写,通过版本号和工夫戳实现。乐观锁,通常用于数据竞争强烈的场景,每次操作都会锁定数据。要锁定数据须要肯定的锁策略来配合。 表锁,锁定整张表,开销最小,然而会加剧锁竞争。行锁,锁定行级别,开销最大,然而能够最大水平的反对并发。然而MySql的存储引擎的实在实现不是简略的行级锁,个别都是实现了多版本并发管制(MVCC)。MVCC是行级锁的变种,少数状况下防止了加锁操作,开销更低。MVCC是通过保留数据的某个工夫点快照实现的。 1.3 事务事务保障一组原子性的操作,要么全副胜利,要么全副失败。一旦失败,回滚之前的所有操作。MySql采纳主动提交,如果不是显式的开启一个事务,则每个查问都作为一个事务。 隔离级别管制了一个事务中的批改,哪些在事务内和事务间是可见的。四种常见的隔离级别: 未提交读(Read UnCommitted),事务中的批改,即便没提交对其余事务也是可见的。事务可能读取未提交的数据,造成脏读。提交读(Read Committed),一个事务开始时,只能看见已提交的事务所做的批改。事务未提交之前,所做的批改对其余事务是不可见的。也叫不可反复读,同一个事务屡次读取同样记录可能不同。可反复读(RepeatTable Read),同一个事务中屡次读取同样的记录后果时后果雷同。可串行化(Serializable),最高隔离级别,强制事务串行执行。1.4 存储引擎InnoDB引擎,最重要,应用最宽泛的存储引擎。被用来设计解决大量短期事务,具备高性能和主动解体复原的个性。MyISAM引擎,不反对事务和行级锁,解体后无奈平安复原。 2 创立时优化2.1 Schema和数据类型优化整数 TinyInt,SmallInt,MediumInt,Int,BigInt 应用的存储8,16,24,32,64位存储空间。应用Unsigned示意不容许正数,能够使负数的上线进步一倍。 实数 Float,Double , 反对近似的浮点运算。Decimal,用于存储准确的小数。字符串 VarChar,存储变长的字符串。须要1或2个额定的字节记录字符串的长度。Char,定长,适宜存储固定长度的字符串,如MD5值。Blob,Text 为了存储很大的数据而设计的。别离采纳二进制和字符的形式。工夫类型 DateTime,保留大范畴的值,占8个字节。TimeStamp,举荐,与UNIX工夫戳雷同,占4个字节。优化倡议点 尽量应用对应的数据类型。比方,不要用字符串类型保留工夫,用整型保留IP。抉择更小的数据类型。能用TinyInt不必Int。标识列(identifier column),倡议应用整型,不举荐字符串类型,占用更多空间,而且计算速度比整型慢。不举荐ORM零碎主动生成的Schema,通常具备不重视数据类型,应用很大的VarChar类型,索引利用不合理等问题。实在场景混用范式和反范式。冗余高查问效率高,插入更新效率低;冗余低插入更新效率高,查问效率低。创立齐全的独立的汇总表\缓存表,定时生成数据,用于用户耗时工夫长的操作。对于精确度要求高的汇总操作,能够采纳 历史后果+最新记录的后果 来达到疾速查问的目标。数据迁徙,表降级的过程中能够应用影子表的形式,通过批改原表的表名,达到保留历史数据,同时不影响新表应用的目标。2.2 索引索引蕴含一个或多个列的值。MySql只能高效的利用索引的最左前缀列。索引的劣势: 缩小查问扫描的数据量防止排序和零时表将随机IO变为程序IO (程序IO的效率高于随机IO)B-Tree 应用最多的索引类型。采纳B-Tree数据结构来存储数据(每个叶子节点都蕴含指向下一个叶子节点的指针,从而不便叶子节点的遍历)。B-Tree索引实用于全键值,键值范畴,键前缀查找,反对排序。 B-Tree索引限度: 如果不是依照索引的最左列开始查问,则无奈应用索引。不能跳过索引中的列。如果应用第一列和第三列索引,则只能应用第一列索引。如果查问中有个范畴查问,则其左边的所有列都无奈应用索引优化查问。哈希索引 只有准确匹配索引的所有列,查问才无效。存储引擎会对所有的索引列计算一个哈希码,哈希索引将所有的哈希码存储在索引中,并保留指向每个数据行的指针。 哈希索引限度: 无奈用于排序不反对局部匹配只反对等值查问如=,IN(),不反对 < >优化倡议点 留神每种索引的适用范围和实用限度。索引的列如果是表达式的一部分或者是函数的参数,则生效。针对特地长的字符串,能够应用前缀索引,依据索引的选择性抉择适合的前缀长度。应用多列索引的时候,能够通过 AND 和 OR 语法连贯。反复索引没必要,如(A,B)和(A)反复。索引在where条件查问和group by语法查问的时候特地无效。将范畴查问放在条件查问的最初,避免范畴查问导致的左边索引生效的问题。索引最好不要抉择过长的字符串,而且索引列也不宜为null。3 查问时优化3.1 查问品质的三个重要指标响应工夫 (服务工夫,排队工夫)扫描的行返回的行3.2 查问优化点防止查问无关的列,如应用Select * 返回所有的列。防止查问无关的行切分查问。将一个对服务器压力较大的工作,合成到一个较长的工夫中,并分屡次执行。如要删除一万条数据,能够分10次执行,每次执行实现后暂停一段时间,再继续执行。过程中能够开释服务器资源给其余工作。合成关联查问。将多表关联查问的一次查问,分解成对单表的屡次查问。能够缩小锁竞争,查问自身的查问效率也比拟高。因为MySql的连贯和断开都是轻量级的操作,不会因为查问拆分为屡次,造成效率问题。留神count的操作只能统计不为null的列,所以统计总的行数应用count(*)。group by 依照标识列分组效率高,分组后果不宜出行分组列之外的列。关联查问提早关联,能够依据查问条件先放大各自要查问的范畴,再关联。Limit分页优化。能够依据索引笼罩扫描,再依据索引列关联本身查问其余列。如 SELECT id, NAME, ageWHERE student s1INNER JOIN ( SELECT id FROM student ORDER BY age LIMIT 50,5) AS s2 ON s1.id = s2.idUnion查问默认去重,如果不是业务必须,倡议应用效率更高的Union All补充内容来自大神-小宝1.条件中的字段类型和表构造类型不统一,mysql会主动加转换函数,导致索引作为函数中的参数生效。 ...

June 27, 2021 · 1 min · jiezi

关于mysql:mysql安装教程

1.mysql下载①进入mysql官方网站:https://www.mysql.com/ 点击进入DOWNLOADS下载页面 ②进入下载页面后,找到mysql社区版本MySQL Community (GPL) Downloads点击进入 ③进入社区版页面后,进行如下点击 ④进入后,点击mysql版本归档页面 ⑤进入mysql版本归档页面后抉择你所须要的mysql版本、操作系统及零碎版本,而后点击download即可下载 2.mysql装置标准 MySQL装置形式:举荐应用二进制装置(其余装置形式:源码编译装置、yum、rpm) MySQL运行用户:mysql:mysql留神该用户是虚构用户,只是用于mysql过程运行应用,不容许登录、不创立家目录 MySQL目录标准: 下载目录/server/tools 系统目录/opt/mysql/mysql-xx.xx 软连贯ln-s/opt/mysql/mysql-xx.xx /usr/local/mysql 数据目录/data/mysql/mysql+port/{data,logs} 配置文件/data/mysql/mysql+port/my+port.cnf 3.二进制装置MySQL5.7.26(该装置形式应用于MySQL5.7和MySQL8.0的各个小版本) 。创立MySQL虚构用户 useradd -s /sbin/nologin -M mysql #创立用户命令 id mysql #查看是否创立胜利 。创立目录 mkdir -p /server/tools mkdir -p /opt/mysql mkdir -p /data/mysql/mysql3306/{data,logs} cd /server/tools #进入到该目录 。将下载的文件上传 rz yum install -y lrzsz #如没有rz命令,可通过yum装置 。解压二进制包 tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz 。将软件局部挪动到指定目录 mv mysql-5.7.26-linux-glibc2.12-x86_64 /opt/mysql/mysql-5.7.26 。创立软连贯 ln -s /opt/mysql/mysql-5.7.26/ /usr/local/mysql 。删除mariadb(防止与MySQL抵触) rpm -e --nodeps mariadb-libs 。配置文件整顿(该配置参数只用于测试环境,不可在生产中应用。配置参数影响着MySQL数据库的性能及平安,谨慎!!!) vim /data/mysql/mysql3306/my3306.cnf [mysqld] user=mysql basedir=/usr/local/mysql datadir=/data/mysql/mysql3306/data socket = /data/mysql/mysql3306/mysql.sock server_id = 1 port = 3306 log_error=/data/mysql/mysql3306/logs/error.log log_bin=/data/mysql/mysql3306/logs/mysql-bin binlog_format=row gtid_mode=on enforce_gtid_consistency=true log_slave_updates=1 max_connections=1024 wait_timeout=60 sort_buffer_size=2M max_allowed_packet=32M join_buffer_size=2M innodb_buffer_pool_size=128M innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=32M innodb_log_file_size=128M innodb_log_files_in_group=2 binlog_cache_size=2M max_binlog_cache_size=8M max_binlog_size=512M expire_logs_days=7 slow_query_log=on slow_query_log_file=/data/mysql/mysql3306/logs/slow.log long_query_time=0.5 log_queries_not_using_indexes=1 。装置MySQL依赖包 yum install libaio-devel -y yum install numactl -y 。更改MySQL相干目录的用户组 chown -R mysql:mysql /data/* 。初始化数据库 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data (MySQL8.0 、MySQL5.7都是通过mysqld进行初始化数据) 。退出环境变量 vim /etc/profile export PATH="/usr/local/mysql/bin:$PATH" source /etc/profile 。启动MySQL mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf & 。查看是否启动胜利 netstat -lntup |grep mysql 。连贯mysql mysql -S /data/mysql/mysql3306/mysql.sock ...

June 26, 2021 · 1 min · jiezi

关于mysql:MySQL安装配置教程

1.mysql下载①进入mysql官方网站:https://www.mysql.com/ 点击进入DOWNLOADS下载页面 ②进入下载页面后,找到mysql社区版本MySQL Community (GPL) Downloads点击进入 ③进入社区版页面后,进行如下点击 ④进入后,点击mysql版本归档页面 ⑤进入mysql版本归档页面后抉择你所须要的mysql版本、操作系统及零碎版本,而后点击download即可下载 2.mysql装置标准 MySQL装置形式:举荐应用二进制装置(其余装置形式:源码编译装置、yum、rpm) MySQL运行用户:mysql:mysql留神该用户是虚构用户,只是用于mysql过程运行应用,不容许登录、不创立家目录 MySQL目录标准: 下载目录/server/tools 系统目录/opt/mysql/mysql-xx.xx 软连贯ln-s/opt/mysql/mysql-xx.xx /usr/local/mysql 数据目录/data/mysql/mysql+port/{data,logs} 配置文件/data/mysql/mysql+port/my+port.cnf 3.二进制装置MySQL5.7.26(该装置形式应用于MySQL5.7和MySQL8.0的各个小版本) 。创立MySQL虚构用户 useradd -s /sbin/nologin -M mysql #创立用户命令 id mysql #查看是否创立胜利 。创立目录 mkdir -p /server/tools mkdir -p /opt/mysql mkdir -p /data/mysql/mysql3306/{data,logs} cd /server/tools #进入到该目录 。将下载的文件上传 rz yum install -y lrzsz #如没有rz命令,可通过yum装置 。解压二进制包 tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz 。将软件局部挪动到指定目录 mv mysql-5.7.26-linux-glibc2.12-x86_64 /opt/mysql/mysql-5.7.26 。创立软连贯 ln -s /opt/mysql/mysql-5.7.26/ /usr/local/mysql 。删除mariadb(防止与MySQL抵触) rpm -e --nodeps mariadb-libs 。配置文件整顿(该配置参数只用于测试环境,不可在生产中应用。配置参数影响着MySQL数据库的性能及平安,谨慎!!!) vim /data/mysql/mysql3306/my3306.cnf [mysqld] user=mysql basedir=/usr/local/mysql datadir=/data/mysql/mysql3306/data socket = /data/mysql/mysql3306/mysql.sock server_id = 1 port = 3306 log_error=/data/mysql/mysql3306/logs/error.log log_bin=/data/mysql/mysql3306/logs/mysql-bin binlog_format=row gtid_mode=on enforce_gtid_consistency=true log_slave_updates=1 max_connections=1024 wait_timeout=60 sort_buffer_size=2M max_allowed_packet=32M join_buffer_size=2M innodb_buffer_pool_size=128M innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=32M innodb_log_file_size=128M innodb_log_files_in_group=2 binlog_cache_size=2M max_binlog_cache_size=8M max_binlog_size=512M expire_logs_days=7 slow_query_log=on slow_query_log_file=/data/mysql/mysql3306/logs/slow.log long_query_time=0.5 log_queries_not_using_indexes=1 。装置MySQL依赖包 yum install libaio-devel -y yum install numactl -y 。更改MySQL相干目录的用户组 chown -R mysql:mysql /data/* 。初始化数据库 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data (MySQL8.0 、MySQL5.7都是通过mysqld进行初始化数据) 。退出环境变量 vim /etc/profile export PATH="/usr/local/mysql/bin:$PATH" source /etc/profile 。启动MySQL mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf & 。查看是否启动胜利 netstat -lntup |grep mysql 。连贯mysql mysql -S /data/mysql/mysql3306/mysql.sock ...

June 26, 2021 · 1 min · jiezi

关于mysql:MySQL-主从复制加密以及binlog的加密实现

1 概述本文次要讲述了如何在主从复制的过程中应用SSL进行加密,还有binlog加密(MySQL 8.0.14+)的实现。 2 环境MySQL 8.0.25Docker一主一从3 筹备容器先拉取镜像并启动,主库3306,从库3307,还须要加上--ssl参数,以开启SSL加密连贯的性能: docker pull mysqldocker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master mysql --ssldocker run -itd -p 3307:3306 -p 33061:33060 -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave mysql --ssl启动容器之后进入容器并装置vim和net-tools: apt install vim net-tools同时进入MySQL筹备好数据源: create database test;use test;create table user( id int primary key auto_increment, name varchar(30) not null, age int not null);4 SSL连贯筹备4.1 确保SSL开启首先能够进入MySQL确保SSL性能开启: show variables like '%ssl%'; 4.2 生成CA和私钥默认状况下,在/var/lib/mysql下曾经有生成的证书和私钥文件,如果不想用默认的,能够从新生成: sudo mkdir /mysqlsudo chown mysql:mysql /mysqlmysql_ssl_rsa_setup --datadir=/mysql ...

June 26, 2021 · 2 min · jiezi

关于mysql:MySQL80创建用户和权限控制

一. 创立用户CREATE USER 'username'@'host' IDENTIFIED BY 'password';username:你将创立的用户名host:指定该用户在哪个主机上能够登陆,从本地登录填localhost,任意主机登陆填通配符%password:登陆密码,明码能够为空,如果为空则该用户能够不须要明码也可登陆例如: CREATE USER 'one'@'localhost' IDENTIFIED BY '123456';CREATE USER 'one'@'192.168.1.101' IDENDIFIED BY '123456';CREATE USER 'one'@'%' IDENTIFIED BY '123456';CREATE USER 'one'@'%' IDENTIFIED BY '';CREATE USER 'one'@'%';二. 受权:GRANT privileges ON databasename.tablename TO 'username'@'host'阐明: privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则应用ALLdatabasename:数据库名,如果授予整个数据库权限填databasename.*tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*示意,如*.*例子: GRANT SELECT, INSERT ON test.user TO 'one'@'%';GRANT SELECT, INSERT ON test.*TO 'one'@'%';GRANT ALL ON *.* TO 'one'@'%';用以上命令受权的用户不能给其它用户受权,如果想让该用户能够受权,用以下命令: GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;三.设置与更改用户明码SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');如果是以后登陆用户用: SET PASSWORD = PASSWORD("newpassword");例子: ...

June 25, 2021 · 2 min · jiezi

关于mysql:mysql索引教程

 1.什么是索引 索引是一种数据结构,会对增加索引的字段的值进行排序寄存,进步查问效率;一张表中能够增加多个索引;innodb存储引擎默认应用的是b+tree索引构造,也反对哈希、全文索引。 2.索引的优缺点 2.1索引的长处 ①进步数据库查问效率 ②缩小锁期待和死锁的产生(行锁是基于索引创立的) ③缩小主从复制从库的延迟时间(sql thread回放sql时会利用索引) 2.2索引的毛病 ①索引保护老本高(可通过insert buffer,change buffer晋升DML语句效率) ②占用更多的存储空间(磁盘和内存) ③索引过多会造成优化器累赘 3.b+tree数据结构 3.1 b+tree数据结构概括:b+tree是均衡多叉树的数据结构,是基于页进行治理数据; 3.2b+tree高度:2 (个别为2-4层); 影响索引树高度因素: 。索引长度 。记录数 索引树高度不同耗费工夫不同: 如sata磁盘(ssd固态硬盘同样计算):300iops,0.0033 /io 2层:0.0033*2 单位是秒 3层:0.0033*3 单位是秒 3.3非叶子节点 保留键值(增加索引的字段的值)和指针 3.4指针 指针与数据页是一种映射的关系,通过指针就能够找到对应的数据页 3.5叶子节点 用于保留数据,保留所有记录的值,并通过排序 3.6双向指针(双向链表) 用于保留相邻页的指针,晋升范畴查问效率 4.b+tree治理 4.1 b+tree插入操作:(页旋转操作) 状况一:b+tree插入数据时,叶子节点没有满 直接插入到对应的数据页 状况二:b+tree插入数据时,叶子节点已满(产生页决裂 split) 先取出两头值,寄存到上一层非叶子节点中; 状况三:b+tree插入数据时,叶子节点和上一层的非叶子节点都已满(产生两次页决裂操作) 4.2 b+tree删除操作 当叶子节点小于填充因子50%,就会产生页合并操作 5.相辅相成的汇集索引和辅助索引 5.1 b+tree索引:索引的实质就是b+tree在数据库中的实现 5.2 索引的分类:从物理存储角度分类 汇集索引和辅助索引 5.3 汇集索引的抉择: ①优先选择显示创立的主键索引来作为汇集索引 ②如没有主键索引就会抉择第一个创立的非空的惟一索引作为汇集索引 ③零碎主动创立一个实例级rowid作为汇集索引(6字节) 5.4 汇集索引的特点: ①叶子节点寄存的是整行数据 ②一张表只能有一个汇集索引,因为理论的数据页只能按一颗b+tree进行排序 ③汇集索引的程序决定表数据行的物理程序 5.5 汇集索引的劣势: ①不必回表查问就能够间接找到数据,节俭更多的查问工夫 ②范畴查问性能失去晋升 where 4<o_orderkey<10 ③排序性能晋升 5.6 辅助索引:外部也是b+tree ①辅助索引寄存的是键值和主键值 ②每张表中能够寄存多个辅助索引 6.笼罩索引与回表查问 6.1 回表查问 指回到汇集索引构建的b+tree去搜寻的过程,就称为回表;回表查问要多经验几次io,耗费工夫更多,性能绝对较差 6.2 笼罩索引 在一个查问语句中,应用到的b+tree下面的数据就笼罩我要查问需要,称为笼罩索引;能够缩小对b+tree的搜寻次数(缩小io的耗费,不必回表查问) 7.创立高性能的主键索引 7.1 主键索引创立的准则 ①应用自增列作为主键 id int/bigint auto_increment primary key; ②主键与业务不相干,不受业务变动影响 ③主键尽量不要批改、删除 7.2 主键索引的特点 ①值不能为空,也不能反复 ②一张表只能有一个主键 ③创立辅助索引时,会隐式的将主键值保留,(name,pk)5.7自动识别外面的主键 where name=? and pk=? where name=? order by pk 7.3 为什么倡议应用自增列作为主键 ①读;显示创立的主键会被作为汇集索引,在数据页上存整行数据,无论读记录任何的列,咱们都不必回表查问,间接在主键构建的b+tree就能够找到。 ②写;写性能十分高,程序获取页;离散获取页;insert buffer , change buffer ③节俭更多的内存 8.惟一索引与一般索引的性能差距 8.1 惟一索引特点: - 值不能反复,能够为空 - 一张表能够创立多个惟一索引 - 如果表中已有数据,增加惟一索引时,该字段的值,不能反复,如果有反复的,就会报错 select count(b) from t; select count(distinct b) from t; 8.2 一般索引特点 - 值能够反复,能够为空 - 一张表能够创立多个一般索引 8.3 惟一索引与一般索引的性能差距 - 读性能差距: 惟一索引:因为唯一性束缚,查找到第一个满足条件的记录后,就会进行持续匹配 一般索引:值不是惟一,可能会有反复值,须要持续查找 总结:在读性能上,惟一索引的性能高于一般索引,性能差距十分小 - 写性能差距: 惟一索引:在进行写操作时要判断这个操作是否违反了唯一性束缚。这个判断必须是在将页加载到内存后,能力进行判断,无奈应用change buffer 一般索引:在进行写操作时,如果数据页不在内存中,会将写操作放到change buffer 总结:一般索引的写性能高于惟一索引 9.前缀索引带来的性能影响 9.1 前缀索引作用: - 索引长度影响b+tree高度,索引长度越短越好 - 节俭磁盘空和内存空间 - 建前缀索引时,如果正当的定义前缀索引的长度,会对查问性能带来好的影响 9.2 前缀索引长度创立不合理会带来哪些不好的影响? - 不合理的长度,会带来更多回表查问 总结:建前缀索引时,最重要的就是指定正当的长度 9.3 正当长度判断: select count(distinct a) from t;去除反复的值,总共有多少条记录 select count(distinct left(a, 3)) from t; 80%-90%就是正当的 9.4 前缀索引毛病: - 无奈应用笼罩索引 - 无奈进行order by和group by,会产生额定排序和产生长期表 10.生产中索引的治理 ①建表时创立索引 主键索引 create table t1(id int auto_increment primary key); create table t2( id int auto_increment, primary key(id) ); 惟一索引 create table t1(name varchar(10) not null unique); create table t2( name varchar(10) not null, unique key i_name(name) ); 前缀索引 create table t1( name varchar(10) not null, key i_name(name(5)) ); 联结索引 create table t2( name varchar(10) not null, o_date datetime, key i_name_date(name,o_date) ); 一般索引 create table t1( name varchar(10) not null, key i_name(name) ); ②建表后创立索引 create table t1( id int , name varchar(10) not null, o_date datetime, title varchar(30) not null ); 建表后创立索引 主键索引 alter table t1 add primary key(id); 惟一索引 alter table t1 add unique index i_name(name); 前缀索引 alter table t1 add index i_title(title(10)); 联结索引 alter table t1 add index i_name_date(name, o_date); 一般索引 alter table t1 add index i_o_date(o_date); 删除索引: alter table t1 drop index 索引名称 查看索引: show create table t1; show index from t1; 11.SQL语句无奈应用索引的状况 ①where条件: 列进行计算: explain select * from orders where o_custkey=o_custkey+1; 列应用函数: explain select * from orders where o_custkey=ceil(o_custkey); 列进行隐式转换: explain select * from emp where ename=007; ②联结索引:用到范畴查问,只能用到局部索引 ③联表查问: 关联条件字符集不同,不走索引 关联条件的列类型不同,不走索引 ④其余状况: 。select * from emp; 。查问后果集大于数据量的30%,不走索引 explain select * from emp where empno > 7000; 。索引自身生效 。like '%s' explain select * from emp where ename like '%s'; 。not in(111,9999) 一般索引,如果是主键索引,会被优化为范畴查问,能够利用索引 explain select * from emp where empno not in(111, 9999); 。!= explain select * from emp where empno != 9999; ...

June 24, 2021 · 2 min · jiezi

关于mysql:容器化-在-Kubernetes-上部署-RadonDB-MySQL-集群

作者:程润科 数据库研发工程师 目前从事 RadonDB MySQL Kubernetes 研发,热衷于钻研数据库内核、K8s 相干技术。 RadonDB MySQL 是一款基于 MySQL 的开源、高可用、云原生集群解决方案。反对一主多从高可用架构,并具备平安、主动备份、监控告警、主动扩容等全套治理性能。目前曾经在生产环境中大规模的应用,蕴含银行、保险、传统大企业等。 RadonDB MySQL Kubernetes 反对在 Kubernetes 上装置部署和治理,主动执行与运行 RadonDB MySQL 集群无关的工作。 本教程次要演示如何应用 Git 和 Repo 命令行两种形式在 Kubernetes 上部署 RadonDB MySQL 集群。 部署筹备已筹备可用 Kubernetes 集群。 形式一:通过 Git 部署执行如下命令,将 RadonDB MySQL Chart 克隆到 Kubernetes 中。 $ git clone https://github.com/radondb/radondb-mysql-kubernetes.git在 radondb-mysql-kubernetes 目录门路下,抉择如下形式,部署 release 实例。 release 是运行在 Kubernetes 集群中的 Chart 的实例。通过命令形式部署,需指定 release 名称。以下命令指定 release 名为demo,将创立一个名为demo-radondb-mysql的有状态正本集。 默认部署形式 <For Helm v3> cd charts/helm helm install demo .指定参数部署形式在helm install时应用--set key=value[,key=value],可指定参数部署。 ...

June 23, 2021 · 3 min · jiezi

关于mysql:使用Spring-Data-JPA-访问-Mysql-数据库配置项

jpa操作数据库留神:数据库采纳的是本机数据库,上面是建表语句及初始化数据:SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `dpt_id` bigint(0) NULL DEFAULT NULL COMMENT '部门id', `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名', `age` int(0) NULL DEFAULT NULL COMMENT '年龄', `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', `head_img` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像', PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户类' ROW_FORMAT = Dynamic;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES (1, 1, 'Jone', 18, 'test1@baomidou.com', 'e');INSERT INTO `user` VALUES (2, 1, 'Jack', 20, 'test2@baomidou.com', 'd');INSERT INTO `user` VALUES (3, 1, 'Tom', 28, 'test3@baomidou.com', 'c');INSERT INTO `user` VALUES (4, 1, 'Sandy', 21, 'test4@baomidou.com', 'b');INSERT INTO `user` VALUES (5, 1, 'Billie', 24, 'test5@baomidou.com', 'a');SET FOREIGN_KEY_CHECKS = 1;在idea中配置数据源:idea-->view-->tool windows-->database ...

June 23, 2021 · 2 min · jiezi

关于mysql:高可用-Xenon后-MHA-时代的选择

MySQL 高可用的抉择在 MySQL(5.5 及以下)传统复制的时代,MHA(Master High Availability)在 MySQL 高可用利用中十分成熟。在 MySQL(5.6)及 GTID 时代开启当前,MHA 却没有与新的 MySQL 一起适应时潮。 MHA 由日本 DeNA 公司 youshimaton 开发,他认为在 GTID 环境下 MHA 存在的价值不大,MHA 最近一次发版是 2018 年。现如今应用 MySQL 已离不开 GTID ,无论是从性能、性能角度,还是从保护角度,GTID 能具备更优异的体现,针对数据业务要求不高场景,常应用GTID+ROW+Semi-Sync 计划。 (图为 MHA 活跃度) 基于 MHA 和 GTID 倒退现状,为适应 MySQL 版本更新的高可用业务场景,上面介绍一款可代替 MHA 的高可用计划:MySQL + Xenon 什么是 Xenon?Xenon [zinn] (https://github.com/radondb/xe... 是一款由 RadonDB 开发团队研发并开源的新一代 MySQL 集群高可用工具。基于 Raft 协定进行无中心化选主,实现主从秒级切换;基于 Semi-Sync 机制,保障数据不失落,实现数据强一致性。并联合 MySQL(5.7 及以上版本)并行复制个性,实现 Binlog 并行回放,大大降低从库提早。 Xenon 架构主动选主 基于 Raft(依赖于 GTID)主动选主,数据一致性依赖于加强半同步 Semi-Sync。 ...

June 23, 2021 · 1 min · jiezi

关于mysql:H64RFLP-–-RF-Microelectronics

H64RFL/P – RF Microelectronics (with Project) – Coursework 20191Coursework AssignmentThe coursework assignment is for ALL students taking H64RFL and H64RFP. The courseworkelement of H64RFL and H64RFP carries a weighting of 4 credits. Thus, it contributes 40% of thefinal module mark for students taking H64RFL and 20% of the final module mark for studentstaking H64RFP.OverviewThe coursework requires you to explore (using the ADS software) the circuit for a narrowbandamplifier that has been designed to meet a target specification. Assessment will be via a shortreport where you explain (and recreate some of) the design stages and carry out a series ofinvestigations on the amplifier performance.DeadlineThe deadline for submission of the final report and design files is 23:55 on Wednesday 3rdApril 2019. Specific details of what you must submit are described below.Beyond the deadline given above, standard University late penalties will apply. I will take thedate/time of submission on Moodle when calculating late penalties, so take care not to resubmitafter the deadline has passed.Design ExerciseThe aim of this coursework is to use ADS to explore the circuit for a 12GHz rf amplifier that hasalready been designed. The amplifier uses a low noise transistor – the Avago ATF-36163 pHEMT– and has been designed to have a gain > 8.8dB, noise figure < 1.2 and S22 < -15dB. In thedesign, you should find that these specifications are all met over the frequency range 11.9GHzto 12.1GHz. The input and output characteristic impedances are 50?.ResourcesYou should visit the “Coursework for H64RFL & H64RFP” section of the Moodle page to findresources for this work.You are strongly advised to look at the Report Template and Coursework Markscheme beforestarting.You will, of course, also need to download the ADS design file (H64RFL_CourseWork.7zads). Afew instructions on getting started with this file are given below.The ADS file can be unarchived in ADS. Start ADS, use the File menu and select Unarchive. Thedesign file will be unarchived to a workspace called H64RFL_CourseWork_empty_wrk.Within the ADS file manager, choose Folder View and then select the schematic in the foldercalled DCBiasing. This screen gives you lots of information about the various components usedin the design, but there is nothing specific to do on this screen. In the top right corner, there isa link telling you which schematic to move to next. Once you have selected the box, you needto use the button ‘Push Into Hierarchy’ on the toolbar. (The button next to it ‘Pop Out’ allowsyou to return in the opposite direction.) The same process is used to move through the designprocess (the stages, and their order, are described in the report template document).On each screen, try to identify all of the elements and their purpose. Try running any simulationthat has been set up and study the results. Follow the guidance in the Report Template, whichgives information on what exactly you should attempt to do and poses questions for you toconsider.H64RFL/P – RF Microelectronics (with Project) – Coursework 20192Assessment RequirementsAssessment will be by way of a short report. A template (CourseworkReportTemplate.docx) canbe downloaded from Moodle. The template is divided into sections with details of what you needto include – the template also gives significant guidance on what you should be doing / lookingfor. As described in the template you need to include plots etc. demonstrating that you haveaccomplished the required tasks / simulations. If these are not included or it is difficult to judgeclearly that you have carried out the required tasks specified in the report template, you will notbe awarded the corresponding marks (I will not check ADS files to find this information).One you have finished your work with ADS, you should make an Archive of your workspace asyou will be asked to upload this to Moodle. (The archiving process will leave you with a singlefile containing all your ADS work.)You MUST submit 2 files via Moodle as follows: ...

June 20, 2021 · 4 min · jiezi

关于mysql:谁说不能使用select

导读咱们先来回顾一下交友平台用户表的表构造: CREATE TABLE `user` ( `id` int(11) NOT NULL, `user_id` int(8) DEFAULT NULL COMMENT '用户id', `user_name` varchar(29) DEFAULT NULL COMMENT '用户名', `user_introduction` varchar(498) DEFAULT NULL COMMENT '用户介绍', `sex` tinyint(1) DEFAULT NULL COMMENT '性别', `age` int(3) DEFAULT NULL COMMENT '年龄', `birthday` date DEFAULT NULL COMMENT '生日', PRIMARY KEY (`id`), KEY `index_un_age_sex` (`user_name`,`age`,`sex`), KEY `index_age_sex` (`age`,`sex`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;其中,user_introduction字段:用户介绍,外面容许用户填写十分长的内容,所以,我将这个字段的设为varchar(498),加上其余字段,单条记录的长度可能就会比拟大了,这时,如果执行上面这条SQL: select user_id, user_name, user_introduction from user where age > 20 and age < 50假如用户表中曾经存储300w条记录,执行下面的SQL,会产生什么状况呢? ...

June 19, 2021 · 2 min · jiezi

关于mysql:MySQL-中的反斜杠-真是太坑了

在MySQL中有很多特殊符号都是相当恶心的,比方字符串中有单引号(')、双引号(")、反斜杠(\)等等,同学们能够先脑补一下可能会呈现啥问题? 在咱们平时操作SQL中,一不注意这些符号就会给你背上一口锅。 你还别不信,听叔一句劝,这里的水很深,有些货色,你把握不住…《潘嘎之交》好了,明天咱们就一起针对最膈应人的反斜杠(\),来看看都有哪些坑。 一、INSERT语句中有反斜杠(\) 1、理论测试 咱们用上面这些SQL来测试一下反斜杠(\)在INSERT语句中会是啥样? INSERT INTO `demo0526` (`id`, `text`) VALUES (null, 'D:\陈哈哈\加班');INSERT INTO `demo0526` (`id`, `text`) VALUES (null, 'D:\\陈哈哈\\加班');INSERT INTO `demo0526` (`id`, `text`) VALUES (null, 'D:\\\陈哈哈\\\加班');INSERT INTO `demo0526` (`id`, `text`) VALUES (null, 'D:\\\\陈哈哈\\\\加班');INSERT INTO `demo0526` (`id`, `text`) VALUES (null, 'D:\\\\\陈哈哈\\\\\加班');插入后的后果: mysql> select * from demo0526;+----+-----------------------+| id | text |+----+-----------------------+| 1 | D:陈哈哈加班 || 2 | D:\陈哈哈\加班 || 3 | D:\陈哈哈\加班 || 4 | D:\\陈哈哈\\加班 || 5 | D:\\陈哈哈\\加班 |+----+-----------------------+5 rows in set (0.00 sec)咱们发现后果如下: ...

June 18, 2021 · 2 min · jiezi

关于mysql:MySQL间隙锁nextkey锁

间隙锁间隙锁是对索引记录之间的间隙的锁,或者是对第一个索引记录之前或最初一个索引记录之后的间隙的锁。例如,SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;阻止其余事务将 的值插入15到列中t.c1,无论列 中是否曾经存在任何此类值,因为该范畴内所有现有值之间的间隙被锁定。 间隙锁的目标是为了避免幻读,其次要通过两个方面实现这个目标:(1)避免间隙内有新数据被插入(2)避免已存在的数据,更新成间隙内的数据 间隙是怎么划分的id(主键)nameage(一般索引)1name1155lucy1811南风2220洛神赋28这个表依据age列(间隙锁作用在索引上,必须要有索引),间隙能够划分为 (-∞, 15),(15,18),(18,22),(22,28),(28,+∞) 间隙锁锁定的区域依据检索条件向左寻找最靠近检索条件的记录值A,作为左区间,向右寻找最靠近检索条件的记录值B作为右区间,即锁定的间隙为(A,B)。 间隙锁作用范畴1、间隙锁只能作用在RR隔离级别 2、能作用在索引上 补充: 1、应用惟一索引锁定行以搜寻惟一行的语句不须要间隙锁定。(这不包含搜寻条件仅蕴含多列惟一索引的某些列的状况;在这种状况下,的确会产生间隙锁定。) 2、不同的事务能够在间隙上持有抵触的锁。例如,事务 A 能够在间隙上持有共享间隙锁(间隙 S 锁),而事务 B 在同一间隙上持有排他间隙锁(间隙 X 锁)。容许抵触间隙锁的起因是,如果从索引中革除记录,则必须合并不同事务在记录上持有的间隙锁。 3、能够明确禁用间隙锁定。将事务隔离级别更改为READ COMMITTED即可 筹备数据:创立表: CREATE TABLE `user` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NULL DEFAULT '0' COLLATE 'utf8_general_ci', `age` INT(10) NULL DEFAULT '0', PRIMARY KEY (`id`) USING BTREE, INDEX `age` (`age`) USING BTREE)COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=11;表数据: id(主键)nameage(一般索引)1name1155lucy1811南风2220洛神赋28一般索引的间隙锁在一般索引列上,不论是何种查问,只有加锁,都会产生间隙锁,这跟惟一索引不一样;在一般索引跟惟一索引中,数据间隙的剖析,数据行是优先依据一般索引排序,再依据惟一索引排序。 案例1(检索单个值)开启两个会话,设置会话隔离级别为RR,设置主动提交为0,开启事物测试: ##############session 1SET autocommit=0;SET session transaction isolation level REPEATABLE READ;START TRANSACTION;SELECT * FROM USER WHERE age=22 FOR UPDATE ############session 2SET autocommit=0;SET session transaction isolation level REPEATABLE read;START TRANSACTION;INSERT INTO user VALUE(3, 'gap lock', 18) #胜利INSERT INTO user VALUE(6, 'gap lock', 18) #阻塞INSERT INTO user VALUE(3, 'gap lock', 20) #阻塞INSERT INTO user VALUE(10, 'gap lock', 22) #阻塞INSERT INTO user VALUE(14, 'gap lock', 28) #阻塞INSERT INTO user VALUE(21, 'gap lock', 28) #胜利会话1执行sql: age=18 会锁定间隙[15,18)(18,22), 会话2中 age=[15,22)之间的插入都会失败。2、同样插入age=22,id=10的时候能够胜利,id=14的时候就会失败,这阐明当索引程序雷同时,会依据主键来排序。对age=18同理 ...

June 18, 2021 · 2 min · jiezi

关于mysql:如何使用frm和ibd文件恢复mysql数据库

一.首先从数据库data目录下将对应数据库文件夹下的frm文件提取表构造创立sql语句通过工具mysqlfrm提取。装置如下:顺次执行以下命令cd /usr/local/src/wget https://downloads.mysql.com/a...tar -zxvf mysql-utilities-1.6.5.tar.gz 查看python版本,须要2.6以上python -Vcd mysql-utilities-1.6.5编译装置python ./setup.py buildpython ./setup.py install 将一个目录下的全副.frm文件生成建表语句mysqlfrm --diagnostic /usr/local/mysql/data/data1/ >createtable.sql 二.创立数据库,并执行sql语句创立表三.解除所有表的表空间绑定 语句如下:ALTER TABLE test DISCARD TABLESPACE; 四.将对应的ibd文件放到新建的数据库data目录下 五.绑定表空间,语句如下ALTER TABLE test IMPORT TABLESPACE; 两头可能会有因为mysql版本不同呈现的问题,对建表语句做对应调整

June 18, 2021 · 1 min · jiezi

关于mysql:maxallowedpacket引起MySQL迁移丢失数据的问题

起因最近迁徙了服务器,运维同学给导了数据库,数据库也跟着一起迁徙到了新机房。明天,有用户发现自己创立的一条记录不见了,我去新库查问的确没有,去旧库查问到了这条记录,确定了是数据失落。 排查过程起初,狐疑迁徙到新库曾经有几天了,是否是这几天用户手动删除了这条记录?还好对用户的改变做了记录,通过查问发现,用户并没有删除动作。 所以,大概率是数据库迁徙引起的数据库失落,具体是哪个环节出错,还要持续排查。 运维同学给出了过后从老库里导出的sql,发现是存在失落的这条记录的,这证实了从老库导出没有问题,问题呈现在往新库导入的时候。 找到了这条失落记录的导入sql,因为有一个字段用了 longtext 类型,这个字段内存入了大量的json数据,将这条sql保留成txt后,居然有1.7M大小。把这条语句通过命令行独自导入,报错 MySQL server has gone away。 问题通过下面的排查,基本上能够确定是因为sql语句过大,导致插入失败,引起迁徙时数据失落的问题。 解决MySQL 中有一个 max_allowed_packet 参数,用来管制一次插入语句的大小,像Blob、longtext类型的字段很容易导致sql语句过长,而达到 max_allowed_packet 的限度。 max_allowed_packet 以后大小是 1048576 (1024 X 1024 X 1),也就是 1M 大小,而我那条语句居然达到了1.7M ,显然超过了下限。 mysql> show global variables like 'max_allowed_packet';+--------------------+---------+| Variable_name | Value |+--------------------+---------+| max_allowed_packet | 1048576 |+--------------------+---------+1 row in set (0.01 sec)调大 max_allowed_packet 值 mysql> set global max_allowed_packet=1024*1024*16;Query OK, 0 rows affected (0.00 sec)比照新老两库后,发现了总共失落了两条记录,在调大 max_allowed_packet 值后,别离从新插入,复原了失落的数据。 反思经验了这次事件后的几个小反思: 1. Text 字段是个坑。 Text对数据库性能就曾经有显著影响了。更何况了是LongText。LongText 最大能存 (2^32 -1)个字节,即 4GiB。应用LongText字段便是给本人和运维同学留下了一个坑。因为这个字段存储的是大文本 json ,日后能够思考将此字段放入 MongoDB 。 ...

June 18, 2021 · 1 min · jiezi

关于mysql:MySQL-nextkey-lock-加锁范围总结

前言三篇文章别离通过实际操作,介绍了主键、非主键惟一索引、一般索引、一般字段四个方面介绍了加锁的范畴。 本篇文章再做一个总结。 data_locksselect * from performance_schema.data_locks;LOCK_MODELOCK_DATA锁范畴X,REC_NOT_GAP1515 那条数据的行锁X,GAP1515 那条数据之前的间隙,不蕴含 15X1515 那条数据的间隙,蕴含 15LOCK_MODE = X 是前开后闭区间;X,GAP 是前开后开区间(间隙锁);X,REC_NOT_GAP 行锁。这个独自介绍,是心愿我了解的没有谬误,如果大佬看到了,谬误之处肯定要帮忙斧正进去。 主键索引加锁时,会先给表增加意向锁,IX 或 IS;加锁是如果是多个范畴,是离开加了多个锁,每个范畴都有锁;(这个能够实际下 id < 20 的状况)主键等值查问,数据存在时,会对该主键索引的值加行锁 X,REC_NOT_GAP;主键等值查问,数据不存在时,会对查问条件主键值所在的间隙增加间隙锁 X,GAP;主键等值查问,范畴查问时状况则比较复杂: 8.0.17 版本是前开后闭,而 8.0.18 版本及当前,批改为了前开后开区间;临界 <= 查问时,8.0.17 会锁住下一个 next-key 的前开后闭区间,而 8.0.18 及当前版本,修复了这个 bug。非主键惟一索引非主键惟一索引等值查问,数据存在,for update 是会在主键加锁的,而 for share 只有在走笼罩索引的状况下,会仅在本人索引上加锁;非主键索引等值查问,数据不存在,无论是否索引笼罩,相当于一个范畴查问,仅仅会在非主键索引上加锁,加的还是间隙锁,前开后开区间;在非主键惟一索引范畴查问时,不是笼罩索引的时候,会对相应的范畴加前开后闭区间,并且如果存在数据,会对对应的主键加行锁;在非主键惟一索引范畴查问时,如果是笼罩索引时,会对所有的后闭区间对应的主键,加行锁;在非主键惟一索引加锁时,还是存在 next-key 锁住下一个区间的 bug。一般索引一般索引等值查问,因为不能确定唯一性,所以即便定位到记录,也是会向后查问,直到查问到不为该值的记录,从而锁定该值的区间;一般索引的锁也是加载该索引上的,如果波及到存在的记录,会对该主键加行锁;一般索引的范畴查问,同样呈现 next-key 查问下一个区间的 bug。一般字段一般字段查问,会查问全表,这里锁的话就会锁住主键的所有区间。 总结通过实际操作,最大的感触就是不能眼高手低,看书也好,看文章也罢,肯定要实际操作。 纸上得来终觉浅。 相干文章https://mp.weixin.qq.com/s/JS2gJHb1qS618TQISxMAAw看来,MySQL next-key lock 的 bug 并没有被修复!MySQL 加锁范畴三——一般索引和一般字段

June 17, 2021 · 1 min · jiezi

关于mysql:容器化-MySQL-on-K8s-开源开放的高可用容器编排方案

作者:高日耀 资深 MySQL 内核研发 本文源于作者在 KubeSphere & Friends 2021 上海站的演讲内容《MySQL on K8s:开源凋谢的 MySQL 高可用容器编排计划》。 MySQL 是世界上最风行的开源数据库,在容器及 K8s 技术进去之前,就曾经在各行各业中宽泛的利用。本文将为大家分享 MySQL 容器化方面的一些实际。 | MySQL 运维有哪些挑战? 传统的物理部署形式,即把数据库部署在物理机上。对运维人员而言,会遇到图 1 中四个维度的挑战。 1、老本自建 MySQL 数据库集群,须要的硬件设施包含:服务器、网络交换机、内存、CPU、硬盘等 硬件设施。 硬件设施老本包含:选型、购买、保护、降级、损坏、数据失落等。 2、传统部署每新增一套集群,都要进行操作系统装置、环境配置、MySQL 数据库装置、调试、性能优化、调参,后续还有系统升级,数据库降级... 3、运维针对不同对场景,比方一源一副本,一源两正本,多源多正本(MGR)等,须要编写对应的运维脚本。 在集群规模不大,MySQL 实例不多的状况下,运维人员尚且能应酬,然而当集群一直减少,MySQL 实例达到成千上万个的时候,会极大的减少运维人员的累赘,效率也会变得低下。 规模越大,呈现误操作的概率会越高,重大的甚至要 “从删库跑路”。误删除要害数据,对于个别企业而言,应答能力较弱,危害很可能是致命的。 4、资源弹性传统物理机部署不具备秒级弹性的能力,来针对 MySQL 在顶峰或低谷时资源的主动弹性伸缩。例如,在业务顶峰扩大 CPU、内存等资源,在低峰期发出闲置资源。 如果设计一次电商秒杀的场景持续时间是 30 分钟,那么咱们能够在 30 分钟内,将网络、CPU、内存、磁盘等资源晋升到最大。在秒杀完结之后,开释这些资源,极大节省成本。 支流解决方案针对如上挑战,支流的解决方案有两种: 物理机 + 治理平台 通过数据库治理平台,对数据库的对立治理,加重数据库运维老本,进步数据库整体的可用性。 上云 将数据库部署到一个虚构计算环境中,也就是常说的数据库上云。市面上各大云厂商都提供了 RDS 服务。 数据库上云能够实现按需付费、按需扩大、高可用性以及存储整合等劣势。大大降低运维人员大规模部署和运维数据库的难度。 那么,还有没有其它计划来解决这些挑战呢?接下来为大家介绍数据库容器化。 | 为什么要做数据库容器化?据 CNCF 云原生产业联盟公布的《中国云原生用户调查报告2020年》[1] 显示,60% 以上的中国企业已在生产环境中利用容器技术,其中 43% 的企业已将容器技术用于外围生产业务。 容器技术 ...

June 17, 2021 · 2 min · jiezi

关于mysql:开发环境数据库访问很慢

1.问题形容咱们的开发环境服务都是部署在同一台虚拟机下面,开发了一段时间,发现数据库拜访十分慢,有时候会达到几十秒级别。 2.问题所在虚拟机的盘有两块,系统盘只有30G,数据盘有500G,所有数据都应用到系统盘了,数据盘没有应用 系统盘的io使用率达到100%了 3.解决办法将服务日志改为sdb盘下来,其余服务有工夫改再改

June 16, 2021 · 1 min · jiezi

关于mysql:MySQL中的pid与socket是什么

前言: 不晓得你有没有留神过,MySQL 启动时须要配置 pid 及 socket 文件门路。偶然还会呈现因 pid 文件找不到而启动失败的景象,那么 pid 与 socket 文件到底是干什么用的呢?咱们一起来看下本篇文章。 1.pid-file介绍MySQL 中的 pid 文件记录的是以后 mysqld 过程的 pid ,pid 亦即 Process ID 。能够通过 pid-file 参数来配置 pid 文件门路及文件名,如果未指定此变量,则 pid 文件默认名为 host_name.pid ,寄存的门路默认放在 MySQL 的数据目录。 倡议指定 pid 文件名及门路,pid 目录权限要对 mysql 零碎用户放开,具体配置可参考如下: # my.cnf 配置文件[mysqld]pid-file = /data/mysql/tmp/mysqld.pid# 查看mysqld过程[root@localhost ~]# ps -ef|grep mysqldroot 8670 1 0 Jun09 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql/data --pid-file=/data/mysql/tmp/mysqld.pidmysql 9353 8670 0 Jun09 ? 00:01:23 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/logs/error.log --pid-file=/data/mysql/tmp/mysqld.pid --socket=/data/mysql/tmp/mysql.sock# 查看pid文件内容 [root@localhost ~]# cat /data/mysql/tmp/mysqld.pid9353能够看到 pid 文件内容只有一行,记录了 mysqld 过程的 ID 。mysqld 过程启动后会通过 create_pid_file 函数新建 pid 文件,通过 getpid() 获取以后过程号并将过程 ID 写入 pid 文件。 过程运行后会给 pid 文件加一个文件锁,只有取得 pid 文件写入权限的过程能力失常启动并把本身的 PID 写入该文件中,其它同一个程序的多余过程则主动退出。因而 pid 文件的作用是避免启动多个过程正本。 ...

June 16, 2021 · 2 min · jiezi

关于mysql:详解一条-SQL-的执行过程

前言天天和数据库打交道,一天能写上几十条 SQL 语句,但你晓得咱们的零碎是如何和数据库交互的吗?MySQL 如何帮咱们存储数据、又是如何帮咱们治理事务?....是不是感觉真的除了写几个 「select * from dual」外根本脑子一片空白?这篇文章就将带你走进 MySQL 的世界,让你彻底理解零碎到底是如何和 MySQL 交互的,MySQL 在承受到咱们发送的 SQL 语句时又别离做了哪些事件。 MySQL 驱动咱们的零碎在和 MySQL 数据库进行通信的时候,总不可能是平白无故的就能接管和发送申请,就算是你没有做什么操作,那总该是有其余的“人”帮咱们做了一些事件,基本上应用过 MySQL 数据库的程序员多多少少都会晓得 MySQL 驱动这个概念的。就是这个 MySQL 驱动在底层帮咱们做了对数据库的连贯,只有建设了连贯了,才可能有前面的交互。这样的话,在零碎和 MySQL 进行交互之前,MySQL 驱动会帮咱们建设好连贯,而后咱们只须要发送 SQL 语句就能够执行 CRUD 了。一次 SQL 申请就会建设一个连贯,多个申请就会建设多个连贯,那么问题来了,咱们零碎必定不是一个人在应用的,换句话说必定是存在多个申请同时去争抢连贯的状况。咱们的 web 零碎个别都是部署在 tomcat 容器中的,而 tomcat 是能够并发解决多个申请的,这就会导致多个申请会去建设多个连贯,而后应用完再都去敞开,这样会有什么问题呢?ava 零碎在通过 MySQL 驱动和 MySQL 数据库连贯的时候是基于 TCP/IP 协定的,所以如果每个申请都是新建连贯和销毁连贯,那这样势必会造成不必要的节约和性能的降落,也就说下面的多线程申请的时候频繁的创立和销毁连贯显然是不合理的。必然会大大降低咱们零碎的性能,然而如果给你提供一些固定的用来连贯的线程,这样是不是不须要重复的创立和销毁连贯了呢?置信懂行的敌人会会心一笑,没错,说的就是数据库连接池。 数据库连接池:保护肯定的连接数,不便零碎获取连贯,应用就去池子中获取,用完放回去就能够了,咱们不须要关怀连贯的创立与销毁,也不须要关怀线程池是怎么去保护这些连贯的。 常见的数据库连接池有 Druid、C3P0、DBCP,连接池实现原理在这里就不深刻探讨了,采纳连接池大大节俭了一直创立与销毁线程的开销,这就是有名的「池化」思维,不论是线程池还是 HTTP 连接池,都能看到它的身影。 数据库连接池到这里,咱们曾经晓得的是咱们的零碎在拜访 MySQL 数据库的时候,建设的连贯并不是每次申请都会去创立的,而是从数据库连接池中去获取,这样就解决了因为重复的创立和销毁连贯而带来的性能损耗问题了。不过这里有个小问题,业务零碎是并发的,而 MySQL 承受申请的线程呢,只有一个? 其实 MySQL 的架构体系中也曾经提供了这样的一个池子,也是数据库连池。单方都是通过数据库连接池来治理各个连贯的,这样一方面线程之前不须要是争抢连贯,更重要的是不须要重复的创立的销毁连贯。 至此零碎和 MySQL 数据库之间的连贯问题曾经阐明分明了。那么 MySQL 数据库中的这些连贯是怎么来解决的,又是谁来解决呢? 网络连接必须由线程来解决对计算根底略微有一点理解的的同学都是晓得的,网络中的连贯都是由线程来解决的,所谓网络连接说白了就是一次申请,每次申请都会有相应的线程去解决的。也就是说对于 SQL 语句的申请在 MySQL 中是由一个个的线程去解决的。 ...

June 15, 2021 · 3 min · jiezi

关于mysql:问题定位-XtraBackup-80-数据重建避坑事件始末

作者:卢文双 资深数据库研发工程师 目前负责青云云数据库的研发工作,热衷于钻研支流数据库架构、源码,对关系型数据库 MySQL/PostgreSQL 及分布式数据库有深入研究。前言在为 Xenon[1] 适配新版 Percona XtraBackup 8.0[2](原有代码适配于 2.4 版本)时遇到的一些问题,在定位过程中比照了 XtraBackup 2.4 和 8.0 的异同。 版本信息[3]: Percona-Server 8.0.19-10Percona-Xtrabackup 8.0.13问题形容问题 1MySQL 8.0 + Semi-Sync + 继续写入数据期间执行重建后, change master to && start slave 报错: Last_Error: Could not execute Write_rows event on table db1.t1; Duplicate entry '28646' for key 't1.PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000052, end_log_pos 437问题 2MySQL 8.0 + Group Replication + 继续写入数据期间执行重建后,change master to && start group_replication 报错: ...

June 15, 2021 · 5 min · jiezi

关于mysql:Mysql普通索引和唯一索引

一般索引 一般索引页记录的是一般索引以及主键值,故查问非主键字段的时候,须要回表. 一般索引数据页外部通过二分法来定位记录. 一般索引在查问时须要额定多查问一次下一条记录,而惟一索引查到则不会持续往下查 change bufferchange buffer在内存中有拷贝,也会被写入磁盘在更新数据时,如果数据间接在内存中就间接写入内存,如果不在内存中须要从磁盘中读取这个数据页,下次查问须要拜访这个数据页时,先读入数据页,再执行changebuffer中的相干页操作即merge操作 什么时候触发merge? 拜访这个数据页,后盾线程会定期 merge。数据库失常敞开什么条件下应用change buffer?惟一索引在执行更新操作时须要判断是否违反唯一性束缚,必须先读取数据,所以惟一索引无奈应用change buffer所以只有一般索引才能够应用 change buffer多少大小?change buffer 用的是 buffer pool 里的内存,通过参数 innodb_change_buffer_max_size来设置,当值为50时,示意最多只占用buffer pool 的 50%,设置为0时,示意敞开change buffer 什么时候应用change buffer呢?merge 的时候是真正进行数据更新的时刻,而 change buffer 的次要目标就是将记录的变更动作缓存下来,所以在一个数据页做 merge 之前,change buffer 记录的变更越多(也就是这个页面上要更新的次数越多),收益就越大。对于写多读少的业务,页面在写完后不会被立马拜访到时应用成果最好,如账单类、日志类的零碎change buffer 对于机械硬盘,成果十分显著,当相似历史数据的库,应尽量应用一般索引,而后把change buffer尽量开大. redo log和change buffer的区别 page1在内存中,间接更新内存;page2不在内存,就在这change buffer 区域记录下“我要往 Page 2 插入一行”这个信息将上述两个动作记入 redo log 中(图中 3 和 4)虚线箭头为后盾执行操作,不影响更新工夫综上所述,整个过程仅程序写了两处内存,写了一处磁盘redo log次要节俭的是随机写磁盘的IO耗费,而change buffer次要节俭的是随机读磁盘的耗费

June 13, 2021 · 1 min · jiezi

关于mysql:mysql面试DML

增加数据语法insert into 表名(列名1,列名2,...列名n)values(值1,值2,...值n);留神1.列名要一一对应2.如果表名后不定义列名,则默认给所有的列增加值3.除了数字类型其余类型须要引号(单双)引起来删除数据语法delete from 表名 [where 条件];留神1.如果不增加条件则删除表中所有数据2.如果要删除所有的记录1.delete from 表名;-- 不举荐应用。有多少条记录就会执行多少次删除操作2.TRUNCATE TABLE 表名;-- 先删除表,而后在创立一张截然不同的表。批改数据语法update 表名 set 列名1 = 值1,列名2 = 值2,... [where 条件];留神1.如果不加任何条件,则会将会将表中的所有记录全副批改。

June 11, 2021 · 1 min · jiezi

关于mysql:mysql面试子查询

子查问1.概念:查问中嵌套查问,称为子查问。 -- 查问工资最高的员工信息-- 1.查问最高员工的工资是多少 SELECT MAX(salary) FROM emp;-- 2.查问员工信息,并且工资等于9000的SELECT * FROM emp WHERE emp.`salary`= 9000;-- 一条sql就实现这个操作SELECT * FROM emp WHERE emp.`salary`= (SELECT MAX(salary) FROM emp);a+b=5c+a+bc+ (a+b)2.子查问的不同状况1.子查问的后果是单行单列的 -- 查问员工工资小于平均工资的人SELECT * FROM emp WHERE emp.`salary` < (SELECT AVG(salary) FROM emp);2.多行单列 -- 查问‘财务’和'市场'部的所有的员工信息SELECT id FROM dept WHERE NAME='财务部' OR NAME = '市场部';SELECT * FROM emp WHERE dept_id=3 OR dept_id=2;-- 子查问SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME='财务部' OR NAME = '市场部');3.多行多列 ...

June 11, 2021 · 1 min · jiezi

关于mysql:mysql面试外连接查询

左外连贯:* 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;例:SELECT t1.*,t2.`NAME`FROM emp t1 LEFT JOIN dept t2ON t1.`dept_id` = t2.`id`;-- 用右边表的记录去匹配左边表的记录,如果符合条件的则显示;否则,显示 NULL能够了解为:在内连贯的根底上保障左表的数据全副显示(左表是部门,右表员工)右外连贯:select 字段列表 from 表1 right [outer] join 表2 on 条件;SELECT t1.*,t2.`NAME`FROM emp t1 RIGHT JOIN dept t2ON t1.`dept_id` = t2.`id`;

June 11, 2021 · 1 min · jiezi

关于mysql:mysql面试内连接

显式内连贯* 语法 select 字段列表 from 表名1 [inner] join 表名2 on 条件* []示意可选* 例如SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`; -- inner可不写内连贯查问1.从那些表中查问数据2.条件是什么3.查问那些字段

June 11, 2021 · 1 min · jiezi

关于mysql:mysql设置更改root密码mysql服务器的连接mysql常用命令的图解

1、设置更改root明码 查看mysql 启动与否,若没启动就运行:/usr/local/mysql56/bin/mysql ps aux |grep mysql 或 netstat -tulnp |grep 3306 运行mysql 命令,会呈现: -bash: mysql: command not found 就把mysql 增加到环境变量: 长期增加:PAHT=$PATH:/usr/local/mysql56/bin 永恒增加:echo "export PATH=$PATH:/usr/local/mysql56/bin" >>/etc/profile 再运行soucre /etc/profile 或 . /etc/profile mysql明码的设置,给root用户设置明码 mysql -uroot password 'new_password' 或用上面的形式 如何批改明码: mysqladmin -uroot -p 'old_password' password 'new_password' 或用上面的形式 遗记明码了如何批改: 首先,得批改配制文件:vim /etc/my.cnf 在[mysqld]模块下退出skip-grant ,而后重启mysql服务:sed -i '/3306/a\skip-grant' /etc/my.cnf 重启:/etc/init.d/mysqld restart 而后,切换数据库:use mysql; 而后,再在数据库外面批改root明码:update user set password=password('new_password') where user='root'; 这样就把明码给改回来了 从新测试,就把my.cnf给改回来: 2、mysql的连贯 mysql -uroot -p'password'mysql -h127.0.0.1 -uroot -p'password'mysql -S/tmp/mysql.sock -uroot -p'password'mysql -uroot -p -e "show databases"3、mysql常用命令 ...

June 11, 2021 · 1 min · jiezi

关于mysql:统计在线时长

------表构造------CREATE TABLE usr_online_log (id int NOT NULL AUTO_INCREMENT COMMENT '自增id',usr_id int NOT NULL COMMENT '用户id',is_online tinyint DEFAULT '1' COMMENT '0-下线,1-上线',creat_time datetime DEFAULT NULL COMMENT '创立工夫', PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户登录在线记录表'; -----sql语句--------SELECT usr_id, DATE_FORMAT(DATE_ADD( '1900-01-01 00:00:00', interval sum(interrval_time) second ),'%T') AS total_interval, creat_time dateFROM ( SELECT t1.usr_id, LEFT (t1.creat_time, 10) AS creat_time, TIMESTAMPDIFF(SECOND,t1.creat_time,t2.creat_time) AS interrval_time FROM usr_online_log t1 INNER JOIN usr_online_log t2 ON t1.usr_id = t2.usr_id AND t1.is_online = 1 AND t2.is_online = 0 AND t1.creat_time < t2.creat_time AND t2.id = ( SELECT min(id) FROM usr_online_log WHERE usr_id = t1.usr_id AND is_online = 0 AND id > t1.id ) ) aGROUP BY usr_id, creat_time ...

June 10, 2021 · 1 min · jiezi

关于mysql:用-CloudQuery-管理和操作数据更高效更安全

导语:用 CloudQuery 治理和操作数据,更高效更平安工欲善其事,必先利其器,优良的工具在数据管理和数据操作中有着极为重要的作用。市面上现曾经有如 navicat、PL/SQL developer、DBeaver 等优良工具,然而依据目前国内数据库与运维行业的现状来看,他们并不是最适宜的工具,为什么? 起因有四: 一是不反对国产数据库。例如它们均不反对如 达梦数据库、TiDB、GuassDB、GBase、OceanBase 等国产数据库,在国内企业寻求数据库转型的状况下,它们显然并不适合。第二、对立平安入口。国内企业的数据环境较为简单,对于 DBA 而言,想要对立治理企业中的所有数据并不是件容易的事件。第三、数据权限管控不到位。对于操作人员的操作权限管控不到位及数据泄露问题,对很多企业来说都是老大难问题,甚至有的企业基本没有器重。第四、操作后的审计剖析。当开发测试人员在操作完数据后,运维人员较难立刻审计到他们的操作行为和执行语句,一旦呈现问题,必将会呈现权责不清、审计不明、难以追踪的问题,这样的事件咱们已见过太多...... 那么有没有一个更高效更适宜咱们的工具,来帮忙咱们解决上述的问题呢?这里跟大家分享一款国内自研的对立数据库管理工具 CloudQuery 来治理和操作企业中的数据库,集体和团队都能够完全免费应用。接下来咱们以 CloudQuery 的 5 个性能点来看看它到底如何解决这些问题的。 Web 端对立数据入口,连贯泛滥数据库CloudQuery 是一个基于 Web 的数据库管理工具,仅须要一个浏览器便能够登录;反对泛滥数据库,如 Oracle、PostgreSQL、达梦数据库、Hive、MySQL 等,并将所有的数据库纳管到同一入口,对立治理数据库使用者。既免去了运维人员以往需针对不同数据库关上不同工具的麻烦,也完结了开发者应用数据库时横七竖八的场面。 对开发人员更高效便捷的数据操作更适宜国内的开发人员的应用习惯:清晰精确的操作指向,更好看晦涩的数据操作逻辑,每次操作就如同点击网页个别简略。 反对 Oracle PL/SQL 编辑器:对于常常习惯应用 PL/SQL 编辑器的敌人无需放心,CloudQuery 已反对 PL/SQL 编辑器,置信你上手后会有不同的体验。 后果集筛选排序和五种格局的导出 闪回性能和关上终端命令 细粒度的权限管控,把数据泄露危险降到最低CloudQuery 零碎权限管制 数据操作权限管制,可具体到某个连贯的某个库的某张表的具体操作。 数据导出管制权限,查问和导出拆散。 审计剖析核心,用户所有行为及操作均有据可循审计剖析总览,重要审计信息和盘托出。 语句明细审计,但凡在编辑区操作过的语句均可立即找到。 用户具体操作明细剖析,用户的在 CloudQuery 上的操作均有明确记录。 可间接用到生产环境中的组织架构和备份复原性能组织架构中的用户治理性能 零碎数据备份和复原性能 不仅如此,CloudQuery 还领有泛滥令人惊喜的彩蛋性能,例如集体文件夹、集体执行历史、利用剖析等等,心愿你也能找到它们。 总结以上只是我列举出的 CloudQuery 的几大性能点,心愿它也会帮到屏幕前的你和你的团队。

June 9, 2021 · 1 min · jiezi

关于mysql:HTAP-MySQL-到-ClickHouse-的高速公路

作者:TCeason 青云科技数据库研发工程师2000 年至今,MySQL[1] 始终是寰球最受欢迎的 OLTP(联机事务处理)数据库,ClickHouse[2] 则是近年来受到高度关注的 OLAP(联机剖析解决)数据库。那么二者之间是否会碰撞出什么火花呢? 本文将率领大家 突破异构数据库壁垒,将 MySQL 数据同步至 ClickHouse。 背景1、MySQL 复制的倒退历程 图 1-1 具体列举了 MySQL 复制的倒退历程。 2001 年的 MySQL 3.23 版本就曾经反对了同构数据库 异步复制;因为是异步复制,根本无法在理论生产中大批量应用。 2013 年 MySQL 5.7.2 版本反对 加强半同步复制 能力,才勉强算得上是企业级可用的数据同步计划。 2016 年 MySQL 5.7.17 反对了 MGR,并一直地倒退成熟,变成了一个金融级别可用的数据同步计划。 而对于同构的 MySQL 数据同步,接下来要做的就是一直地优化体验,晋升同步时效性,解决网络异样下的各类问题。 基于此,各大厂商也开始做本人的高可用同步组件。例如由 QingCloud 数据库研发团队研发并开源的 Xenon,就具备了真正的强一致性和高可用能力。 2、MySQL + Xenon 图 1-2 中的 Xenon 是由类 Raft 算法来实现的高可用组件,用来治理 MySQL 选举和探活,并勘误数据准确性。MySQL 数据同步则仍然应用 Semi-Sync Replication 或者 MGR,从而达到数据强一致性、无中心化主动选主且主从秒级切换,以及依靠于云的跨区容灾能力。 ClickHouse 同步 MySQL 数据为了减速 OLAP 查问,QingCloud MySQL Plus[3](MySQL + Xenon) 借用 ClickHouse 来同步 MySQL 数据。 ...

June 9, 2021 · 3 min · jiezi

关于mysql:35-张图带你-MySQL-调优

这是 MySQL 根底系列的第四篇文章,之前的三篇文章见如下链接 138 张图带你 MySQL 入门 47 张图带你 MySQL 进阶!!! 炸裂!MySQL 82 张图带你飞 个别传统互联网公司很少接触到 SQL 优化问题,其起因是数据量小,大部分厂商的数据库性能可能满足日常的业务需要,所以不须要进行 SQL 优化,然而随着应用程序的一直变大,数据量的激增,数据库本身的性能跟不上了,此时就须要从 SQL 本身角度来进行优化,这也是咱们这篇文章所探讨的。 SQL 优化步骤当面对一个须要优化的 SQL 时,咱们有哪几种排查思路呢? 通过 show status 命令 理解 SQL 执行次数首先,咱们能够应用 show status 命令查看服务器状态信息。show status 命令会显示每个服务器变量 variable_name 和 value,状态变量是只读的。如果应用 SQL 命令,能够应用 like 或者 where 条件来限度后果。like 能够对变量名做规范模式匹配。 图我没有截全,上面还有很多变量,读者能够本人尝试一下。也能够在操作系统上应用 mysqladmin extended-status 命令来获取这些音讯。 然而我执行 mysqladmin extended-status 后,呈现这个谬误。 应该是我没有输出明码的起因,应用 mysqladmin -P3306 -uroot -p -h127.0.0.1 -r -i 1 extended-status 后,问题解决。 这里须要留神一下 show status 命令中能够增加统计后果的级别,这个级别有两个 ...

June 9, 2021 · 4 min · jiezi

关于mysql:MySQL中的join查询

前言Mysql的join是什么,join这个单词的意思是退出、加入、连贯,而在数据库中,也是连贯的意思,将两个表连接起来查问出咱们想要的数据。在数据库中,join的用法次要分成三种,别离是左连贯、右连贯和内连贯,然而理论使用中,两个表之间的操作,是一共有七种,那咱们明天就开始认识一下这七种用法吧 上面所有的椭圆都代表两个不同的表,假设右边为test1表,左边的为test2表,上面是两个表的状况 test1表有uid、名字和地区三个字段 test2表有uid、姓名、性别和年龄四个字段 1.全连贯如图,将这两张表全连贯查问,假如A表有M条记录,B表有N条记录,全连贯的时候就是用笛卡尔积来计算的,所以查问进去的是是M×N条记录 而test1和test2两张表全连贯的sql语句和查问的后果如下 SELECT * FROM test1 LEFT JOIN test2 ON test1.uid = test2.uid UNION SELECT * FROM test1 RIGHT JOIN test2 ON test1.uid = test2.uid; 查问到两个表所有的数据,如果没有数据就为空 总结:查问到的内容是两个表的所有内容 2.去交加如图,将这两张表去交加连贯查问,两个表的全连贯去掉两头的交加的局部就是去交加 而test1和test2两张表去交加连贯的sql语句和后果如下 SELECT * FROM test1 LEFT JOIN test2 ON test1.uid = test2.uid WHERE test2.uid IS NULL UNION SELECT * FROM test1 RIGHT JOIN test2 ON test1.uid = test2.uid WHERE test1.uid IS NULL查问进去的信息,去掉了101~107的公共局部,查问进去两个表独有的局部——test1的108、109,test2的100 总结:查问到的内容是两个表的没有公共局部的内容 ...

June 9, 2021 · 1 min · jiezi

关于mysql:面试官如何给字符串设计索引

01 前言哈喽,好久没更新啦。因为最近在面试。用了两周工夫筹备,在 3 天之内拿了 5 个 offer,最初抉择了广州某互联网行业独角兽 offer,昨天刚入职。这几天刚好整顿下在面试中被问到有意思的问题,也借此机会跟大家分享下。 这家企业的面试官有点意思,一面是个同龄小哥,一起聊了两个小时(聊到我嘴都干了)。二面是个从阿里进去的架构师,他问了个场景题: 数据库有个字符串类型的字段,存的是 URL 怎么设计索引?过后我给出拆分字段:url 的前半部分必定区分度低,到了后半局部才高;我把区分度高和低的别离拆分为两个字段存储,并在区分度高的字段建设索引的具体答案,并提出了尽量进步区分度的思路。 面试官也认可了我的方向,然而问我还有没其余计划。过后没答出来,回去之后我本人查了下材料,这里也给大家分享下具体的设计方案。 国际惯例,先上思维导图: 02 整个字段加索引先亮出表设计: CREATE TABLE IF NOT EXISTS `t`( `id` INT(11) NOT NULL AUTO_INCREMENT, `url` VARCHAR(100) NOT NULL, PRIMARY KEY ( `id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;表数据: 其实这个问题 = 字符串怎么设计索引?,你可能会说间接执行上面的语句不就得了? alter table t add index index_url(url);我随便画了张图,在 MySQL index_url 的构造是这样的: 的确,这样是能够的。执行上面的查问语句只须要一次扫描操作即可。 select id,url from t where url='javafish/nhjj/mybatis';但它还有个问题就是节约存储空间,这种状况只适宜存储数据较短且区分度足够高(这点是必须的,要不然咱们也不会在区分度很低的字段建索引)的状况。你想想整个字段这么长,必定贼费空间了。 那有没有不那么费空间的办法呢?咱们天然就想到了 MySQL 的前缀索引。 03 前缀索引针对下面的表数据,加下前缀索引,没必要整个字段加索引,因而能够这样建索引: alter table t add index index_url(url(8));此时,index_url 的构造是这样的: ...

June 8, 2021 · 2 min · jiezi

关于mysql:新特性解读-MySQL-8023-新特性不可见字段

作者:王福祥 爱可生 DBA 团队成员,负责客户的数据库故障解决以及调优。善于故障排查及性能优化。对数据库相干技术有浓重的趣味,喜爱剖析各种逻辑。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 在 MySQL 8.0.23 版本中新增加了一个性能:能够给字段附加不可见属性。对于非指定字段的查问语句默认暗藏不可见字段的内容。该性能可实用于须要给表增加字段并须要对已有的业务零碎暗藏时应用以及给表增加主键字段或索引字段时应用。 个性形容MySQL 从 8.0.23 版本之前,所有表的字段均为可见字段,在 8.0.23 版本之后,能够给字段增加不可见属性。默认对 select * 等操作暗藏,只有当 sql 语句中指定该字段值时才会显示官网连贯:https://dev.mysql.com/doc/ref... 个性展现1、新建一张表,给当中字段赋予不可见属性(INVISIBLE) mysql> CREATE TABLE t1 (id INT, name varchar(10) ,age INT INVISIBLE);Query OK, 0 rows affected (0.02 sec)2、建表语句以及表构造中均能够查看到不可见字段的字段信息 | t1 | CREATE TABLE `t1` ( `id` int DEFAULT NULL, `name` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL, `age` int DEFAULT NULL /*!80023 INVISIBLE */) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |+-------+-------------+------+-----+---------+-----------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-----------+| id | int | YES | | NULL | || name | varchar(10) | YES | | NULL | || age | int | YES | | NULL | INVISIBLE |+-------+-------------+------+-----+---------+-----------+3、在零碎表 INFORMATION_SCHEMA.COLUMNS 中的 EXTRA 字段值中也能够查看到表字段值的不可见属性。 ...

June 8, 2021 · 3 min · jiezi

关于mysql:MySQL普通索引的加锁

前言后面曾经介绍了主键索引的加锁范畴和非主键惟一索引的加锁范畴。 主键索引: 加锁时,会先给表增加意向锁,IX 或 IS;加锁是如果是多个范畴,是离开加了多个锁,每个范畴都有锁;(这个能够实际下 id < 20 的状况)主键等值查问,数据存在时,会对该主键索引的值加行锁 X,REC_NOT_GAP;主键等值查问,数据不存在时,会对查问条件主键值所在的间隙增加间隙锁 X,GAP;主键等值查问,范畴查问时状况则比较复杂: 8.0.17 版本是前开后闭,而 8.0.18 版本及当前,批改为了前开后开区间;临界 <= 查问时,8.0.17 会锁住下一个 next-key 的前开后闭区间,而 8.0.18 及当前版本,修复了这个 bug。非主键惟一索引: 非主键惟一索引等值查问,数据存在,for update 是会在主键加锁的,而 for share 只有在走笼罩索引的状况下,会仅在本人索引上加锁;非主键索引等值查问,数据不存在,无论是否索引笼罩,相当于一个范畴查问,仅仅会在非主键索引上加锁,加的还是间隙锁,前开后开区间;在非主键惟一索引范畴查问时,不是笼罩索引的时候,会对相应的范畴加前开后闭区间,并且如果存在数据,会对对应的主键加行锁;在非主键惟一索引范畴查问时,如果是笼罩索引时,会对所有的后闭区间对应的主键,加行锁;在非主键惟一索引加锁时,还是存在 next-key 锁住下一个区间的 bug。这篇文章来一起看一下一般索引和一般字段的加锁范畴是什么? 数据库表数据CREATE TABLE `t` ( `id` int NOT NULL COMMENT '主键', `a` int DEFAULT NULL COMMENT '惟一索引', `c` int DEFAULT NULL COMMENT '一般索引', `d` int DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniq_a` (`a`), KEY `idx_c` (`c`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci数据库数据如下: ...

June 8, 2021 · 1 min · jiezi

关于mysql:MySQL面试小抄查询缓存机制终面

《MySQL面试小抄》查问缓存机制终面我是肥哥,一名不业余的面试官! 我是囧囧,一名踊跃找工作的小菜鸟! 囧囧示意:小白面试最怕的就是面试官问的知识点太抽象,本人无奈疾速定位到关键问题点!!!本期次要面试考点 面试官考点之简述一下什么是查问缓存机制?面试官考点之查问如何命中缓存?面试官考点之什么场景下SQL和后果集不会被缓存?面试官考点之什么场景下会导致MySQL缓存生效?面试官考点之查问缓存是如何进行内存治理的?面试官考点之MySQL是一次性调配所有的内存空间吗?面试官考点之缓存中的内存碎片无奈防止,那么有什么方法优化吗?面试官考点之MySQL4.0提出了查问缓存,它设计进去是为了减速哪些查问场景?面试官考点之MySQL5.6中默认禁用,8.0当前齐全移除,造成这个扭转的起因是什么?面试官考点之生产环境要不要开启MySQL缓存? 面试官考点之简述一下什么是查问缓存机制?MySQL服务器高负载状况下,咱们须要采取一种措施给服务器加重压力,一个简单的查问是十分耗费性能的, 其中磁盘IO又占据次要资源,缓存是对系统性能优化的一种重要伎俩。 查问缓存机制设计是为了从根本上缩小磁盘IO次数,MySQL开启缓存后,将SQL和后果集以键值对KV的模式存储在内存中。 当雷同的SQL再次进入,MySQL辨认是雷同查问喉,会间接返回缓存在内存中的后果集。 防止再次进行一系列简单的解析优化和磁盘IO过程。 面试官考点之查问如何命中缓存?select id from user;select id FROM user;下面语句能命中缓存吗?MySQL缓存命中机制有严格刻薄的要求,在判断命中前,MySQL不会对SQL做任何的解析解决。 SQL上的任何字符的不同,如大小写、空格、正文等都会导致缓存不命中所以下面查问时无奈命中缓存的。 面试官考点之什么场景下SQL和后果集不会被缓存?或者说缓存规定是什么? 第一种状况:查问语句中蕴含不确定数据例如查问语句中蕴含不确定函数:NOW()、CURRENT_DATE()等。因为每次执行这类带了不确定数据的查问所返回后果可能是不同的。第二种状况:超过了query_cache_limit预设阈值超出了缓存内存能接受的范畴,将放弃缓存!面试官考点之什么场景下会导致MySQL缓存生效?任何对于表构造或者表数据的更新操作,肯定会造成查问缓存中的数据生效,同时查问缓存值的相干条目也会被清空。 MySQL断定有更新操作,就会设置所有的查问缓存生效。 面试官考点之查问缓存是如何进行内存治理的?MySQL服务启动,缓存机制会在内存中开拓一块内存, 其中会划分出一块区域专用来治理保护缓存数据的元数据。 例如空间内存、数据表和查问后果的映射,SQL和查问后果的映射 MySQL缓存机制将残余的闲暇空间分为一个个小数据块,用来存储缓存后果。 每个小块中存储本身的类型,大小和查问后果数据,还有指向前后内存块的指针面试官考点之MySQL是一次性调配所有的内存空间吗?MySQL因为无奈预知查问后果大小,所以无奈为每个查问后果准确调配大小恰好匹配的缓存空间。 MySQL缓存机制采纳的是边查边存,动静的去申请缓存内存。 一条SQL查问缓存分配内存过程是怎么样的?当有查问后果须要缓存的时候,MySQL缓存机制会在SQL查问开始(还未失去后果)时就去申请一块内存空间(小数据块),在一直查问中,如果发现不够则持续申请,如果存储完时有空余则开释多余的内存空间。 如果余下的须要回收的空间很小,小于query_cache_min_res_unit,不能再次被应用,可能会造成内存碎片,影响查问性能。 面试官考点之缓存中的内存碎片无奈防止,那么有什么方法优化吗?没有什么方法可能完全避免内存碎片,然而抉择适合的 query_cache_min_res_unit能够缩小由碎片导致的内存空间节约。 值太小,则节约的空间更少,然而会导致频繁的内存块申请操作如果设置得太大,那么碎片会很多调整适合的值其实是在均衡内存节约和CPU耗费 那么我如何确定这个均衡值?能够通过内存理论耗费,计算单个查问的均匀缓存大小 (query_cache_size - Qcache_free_memory)/ Qcache_queries_in_cahce通过查看闲置内存块数量(Qcahce_free_blocks)来察看碎片。 如果产生的碎片过多,通过什么办法能够整顿碎片?通过FLUSH_QUERY_CAHCE清理碎片这个命令将所有的查问缓存从新排序,并将所有的闲暇空间都聚焦到查问缓存的一块区域上。面试官考点之MySQL4.0提出了查问缓存,它设计进去是为了减速哪些查问场景?1、并发性和查问QPS不高2、被拜访的底层数据实质上是动态或半动态的3、查问密集型利用,更新频率非常低而只读查问频率十分高的场景面试官考点之MySQL5.6中默认禁用,8.0当前齐全移除,造成这个扭转的起因是什么?现实状况下,上述查问场景非常适合应用查问缓存,然而理论的业务零碎都是有CRUD操作的。 在MySQL里QC是由一个全局锁在管制,每次更新QC的内存块都须要进行锁定,数据更新频繁,就会一直的生效缓存操作,同时缓存生效会造成大量的查问缓存碎片化,还会导致服务器的负载升高,影响数据库的稳定性。 所以MySQL官网通过抉择,果决移除了查问缓存模块。 面试官考点之生产环境要不要开启MySQL缓存?倡议不开启 依据MySQL官网的测试,如果对一个表执行简略的查问,设置每次查问都不一样,关上QC后,性能反而降落了13%左右当然理论业务中,不会都是这种不同的申请,因而理论影响应该比这个小一些。 MySQL查问缓存的目标是为了晋升查问性能,但它自身也是有性能开销的。须要在适合的业务场景下(读写压力模型)应用 不适合的业务场景岂但不能晋升查问性能,查问缓存反而会变成MySQL的瓶颈。对写密集型的利用场景来说,禁用缓存反而进步性能。随缘更新,整顿不易,欢送分割小白探讨,大神巴巴请绕路! 更多精彩内容,欢送关注微信公众号:囧么肥事 (或搜寻:jiongmefeishi)

June 7, 2021 · 1 min · jiezi

关于mysql:高可用-Xenon后-MHA-时代的选择

原创:知数堂| MySQL 高可用的抉择在 MySQL(5.5 及以下)传统复制的时代,MHA(Master High Availability)在 MySQL 高可用利用中十分成熟。在 MySQL(5.6)及 GTID 时代开启当前,MHA 却没有与新的 MySQL 一起适应时潮。 MHA 由日本 DeNA 公司 youshimaton 开发,他认为在 GTID 环境下 MHA 存在的价值不大,MHA 最近一次发版是 2018 年。现如今应用 MySQL 已离不开 GTID ,无论是从性能、性能角度,还是从保护角度,GTID 能具备更优异的体现,针对数据业务要求不高场景,常应用 GTID+ROW+Semi-Sync 计划。 基于 MHA 和 GTID 倒退现状,为适应 MySQL 版本更新的高可用业务场景,上面介绍一款可代替 MHA 的高可用计划:MySQL + Xenon | 什么是 Xenon?Xenon [zinn] (https://github.com/radondb/xe... 是一款由 RadonDB 开发团队研发并开源的新一代 MySQL 集群高可用工具。基于 Raft 协定进行无中心化选主,实现主从秒级切换;基于 Semi-Sync 机制,保障数据不失落,实现数据强一致性。并联合 MySQL(5.7 及以上版本)并行复制个性,实现 Binlog 并行回放,大大降低从库提早。 | Xenon 架构 主动选主基于 Raft(依赖于 GTID)主动选主,数据一致性依赖于加强半同步 Semi-Sync。 ...

June 7, 2021 · 2 min · jiezi

关于mysql:MySQL不区分大小写设置

前言: 个别在数据库应用标准中,咱们都会看到这么一条:库名及表名一律应用小写英文。你有没有思考过,为什么举荐应用小写呢?库表名是否应该辨别大小写呢?带着这些疑难,咱们一起来看下本篇文章。 1.决定大小写是否敏感的参数在 MySQL 中,数据库与 data 目录中的目录绝对应。数据库中的每个表都对应于数据库目录中的至多一个文件(可能是多个文件,具体取决于存储引擎)。因而,操作系统的大小写是否敏感决定了数据库大小写是否敏感,而 Windows 零碎是对大小写不敏感的,Linux 系统对大小写敏感。 默认状况下,库表名在 Windows 零碎下是不辨别大小写的,而在 Linux 零碎下是辨别大小写的。列名,索引名,存储过程、函数及事件名称在任何操作系统下都不辨别大小写,列别名也不辨别大小写。 除此之外,MySQL 还提供了 lower_case_table_names 零碎变量,该参数会影响表和数据库名称在磁盘上的存储形式以及在 MySQL 中的应用形式,在 Linux 零碎,该参数默认为 0 ,在 Windows 零碎,默认值为 1 ,在 macOS 零碎,默认值为 2 。上面再来看下各个值的具体含意: ValueMeaning0库表名以创立语句中指定的字母大小写存储在磁盘上,名称比拟辨别大小写。1库表名以小写模式存储在磁盘上,名称比拟不辨别大小写。 MySQL 在存储和查找时将所有表名转换为小写。此行为也实用于数据库名称和表别名。2库表名以创立语句中指定的字母大小写存储在磁盘上,然而 MySQL 在查找时将它们转换为小写。名称比拟不辨别大小写。个别很少将 lower_case_table_names 参数设置为 2 ,上面仅探讨设为 0 或 1 的状况。Linux 零碎下默认为 0 即辨别大小写,咱们来看下 lower_case_table_names 为 0 时数据库的具体表现: # 查看参数设置mysql> show variables like 'lower_case_table_names';+------------------------+-------+| Variable_name | Value |+------------------------+-------+| lower_case_table_names | 0 |+------------------------+-------+# 创立数据库mysql> create database TestDb;Query OK, 1 row affected (0.01 sec)mysql> create database testdb;Query OK, 1 row affected (0.02 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || TestDb || mysql || performance_schema || sys || testdb |+--------------------+mysql> use testdb;Database changedmysql> use TestDb;Database changedmysql> use TESTDB;ERROR 1049 (42000): Unknown database 'TESTDB'# 创立表mysql> CREATE TABLE if not exists `test_tb` ( -> `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键', -> `stu_id` int(11) NOT NULL COMMENT '学号', -> `stu_name` varchar(20) DEFAULT NULL COMMENT '学生姓名', -> PRIMARY KEY (`increment_id`), -> UNIQUE KEY `uk_stu_id` (`stu_id`) USING BTREE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test_tb';Query OK, 0 rows affected (0.06 sec)mysql> CREATE TABLE if not exists `Student_Info` ( -> `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键', -> `Stu_id` int(11) NOT NULL COMMENT '学号', -> `Stu_name` varchar(20) DEFAULT NULL COMMENT '学生姓名', -> PRIMARY KEY (`increment_id`), -> UNIQUE KEY `uk_stu_id` (`Stu_id`) USING BTREE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Student_Info';Query OK, 0 rows affected (0.06 sec)mysql> show tables;+------------------+| Tables_in_testdb |+------------------+| Student_Info || test_tb |+------------------+# 查问表mysql> select Stu_id,Stu_name from test_tb limit 1;+--------+----------+| Stu_id | Stu_name |+--------+----------+| 1001 | from1 |+--------+----------+1 row in set (0.00 sec)mysql> select stu_id,stu_name from test_tb limit 1;+--------+----------+| stu_id | stu_name |+--------+----------+| 1001 | from1 |+--------+----------+mysql> select stu_id,stu_name from Test_tb;ERROR 1146 (42S02): Table 'testdb.Test_tb' doesn't existmysql> select Stu_id,Stu_name from test_tb as A where A.Stu_id = 1001; +--------+----------+| Stu_id | Stu_name |+--------+----------+| 1001 | from1 |+--------+----------+1 row in set (0.00 sec)mysql> select Stu_id,Stu_name from test_tb as A where a.Stu_id = 1001;ERROR 1054 (42S22): Unknown column 'a.Stu_id' in 'where clause'# 查看磁盘上的目录及文件[root@localhost ~]#:/var/lib/mysql# ls -lhtotal 616Mdrwxr-x--- 2 mysql mysql 20 Jun 3 14:25 TestDb...drwxr-x--- 2 mysql mysql 144 Jun 3 14:40 testdb[root@localhost ~]#:/var/lib/mysql# cd testdb/[root@localhost ~]#:/var/lib/mysql/testdb# ls -lhtotal 376K-rw-r----- 1 mysql mysql 8.6K Jun 3 14:33 Student_Info.frm-rw-r----- 1 mysql mysql 112K Jun 3 14:33 Student_Info.ibd-rw-r----- 1 mysql mysql 8.6K Jun 3 14:40 TEST_TB.frm-rw-r----- 1 mysql mysql 112K Jun 3 14:40 TEST_TB.ibd-rw-r----- 1 mysql mysql 67 Jun 3 14:25 db.opt-rw-r----- 1 mysql mysql 8.6K Jun 3 14:30 test_tb.frm-rw-r----- 1 mysql mysql 112K Jun 3 14:30 test_tb.ibd通过以上试验咱们发现 lower_case_table_names 参数设为 0 时,MySQL 库表名是严格辨别大小写的,而且表别名同样辨别大小写但列名不辨别大小写,查问时也须要严格依照大小写来书写。同时咱们留神到,容许创立名称同样但大小写不一样的库表名(比方容许 TestDb 和 testdb 库共存)。 ...

June 7, 2021 · 4 min · jiezi

关于mysql:看来MySQL-nextkey-lock-的-bug-并没有被修复

前言在上一篇文章《MySQL next-key lock 加锁范畴是什么?》中曾经介绍了主键索引的加锁范畴,当初来回顾一下: 加锁时,会先给表增加意向锁,IX 或 IS;加锁是如果是多个范畴,是离开加了多个锁,每个范畴都有锁;(这个能够实际下 id < 20 的状况)主键等值查问,数据存在时,会对该主键索引的值加行锁 X,REC_NOT_GAP;主键等值查问,数据不存在时,会对查问条件主键值所在的间隙增加间隙锁 X,GAP;主键等值查问,范畴查问时状况则比较复杂: 8.0.17 版本是前开后闭,而 8.0.18 版本及当前,批改为了前开后开区间;临界 <= 查问时,8.0.17 会锁住下一个 next-key 的前开后闭区间,而 8.0.18 及当前版本,修复了这个 bug。这篇文章会对非主键惟一索引进行操作实际。 数据库表数据CREATE TABLE `t` ( `id` int NOT NULL COMMENT '主键', `a` int DEFAULT NULL COMMENT '惟一索引', `c` int DEFAULT NULL COMMENT '一般索引', `d` int DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniq_a` (`a`), KEY `idx_c` (`c`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci数据库数据如下: 数据库的字段 a 是惟一索引。 ...

June 6, 2021 · 2 min · jiezi

关于mysql:MySQL-nextkey-lock-加锁范围是什么

前言某天,忽然被问到 MySQL 的 next-key lock,我霎时的反馈就是: 这都是啥啥啥??? 这一个截图我啥也看不出来呀? 认真一看,如同似曾相识,这不是《MySQL 45 讲》外面的内容么? 什么是 next-key lockA next-key lock is a combination of a record lock on the index record and a gap lock on the gap before the index record.官网的解释大略意思就是:next-key 锁是索引记录上的记录锁和索引记录之前的间隙上的间隙锁的组合。 先给本人来一串小问号??? 在主键、惟一索引、一般索引以及一般字段上加锁,是锁住了哪些索引?不同的查问条件,别离锁住了哪些范畴的数据?for share 和 for update 等值查问和范畴查问的锁范畴?当查问的等值不存在时,锁范畴是什么?当查问条件别离是主键、惟一索引、一般索引时有什么区别? 既然啥都不懂,那只好从头开始操作实际一把了! 先看看看 《MySQL 45 讲》中丁奇老师的论断: 看了这论断,应该能够解答一大部分问题,不过有一句十分十分重点的话须要关注:MySQL 前面的版本可能会扭转加锁策略,所以这个规定只限于截止到当初的最新版本,即 5.x 系列<=5.7.24,8.0 系列 <=8.0.13 所以,以上的规定,对当初的版本并不一定实用,上面我以 MySQL 8.0.25 版本为例,进行多角度验证 next-key lock 加锁范畴。 环境筹备MySQL 版本:8.0.25 隔离级别:可反复读(RR) ...

June 6, 2021 · 3 min · jiezi

关于mysql:使用-Docker-安装并连接-MySQL

前言作为开发,在本机捣鼓一下 Docker 还是很有必要的,本篇文章介绍如何应用 Docker 装置 MySQL,并在终端(iTerm2)应用命令连贯 MySQL。 装置 MySQL外围命令如下: # 用 8.0.17 版本举例docker pull mysql:8.0.17# 运行 mysqldocker run -itd --name mysql8.0.17 -p 23306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:8.0.17docker ps 登录 MySQL# 进入容器docker exec -it mysql8.0.17 bash# 登录 mysqlmysql -u root -p

June 6, 2021 · 1 min · jiezi

关于mysql:初识MySQL以及如何安装

JavaEE:企业级java开发 Web前端(页面:展现,数据!)后端(连接点:连贯数据库JDBC,连贯前端(管制,管制试图跳转,和给前端传递数据))数据库:存取数据 1、什么是数据库数据库(DB,DataBase)概念:数据仓库,软件,装置在操作系统(windows,linux,mac...),SQL,能够存储大量的数据。500万!作用:存储数据,治理数据 1.2、数据库分类1关系型数据库:MySQL、Oracle、SqlServer、DB2、SQLlite通过表和表之间,行和列之间的关系进行数据的存储,学员信息表,考勤表等2非关系型数据库:(NoSQL)Not OnlyRedis,MongDB非关系型数据库,对象存储,通过对象的本身的属性来决定。DBMS(数据库管理系统)数据库的管理软件,迷信无效的治理咱们的数据。保护和获取数据MySQL,数据库管理系统 1.3、MySQL简介MySQL是一个关系型数据库管理系统前身:由瑞典MySQL AB 公司开发当初:被Oracle收买,称为Oracle旗下产品MySQL所应用的 SQL 语言是用于拜访数据库的最罕用标准化语言。因为其体积小、速度快、总体领有成本低,尤其是开放源码这一特点,个别中小型网站的开发都抉择 MySQL 作为网站数据库。官网:https://www.mysql.com/ 装置倡议:1、尽量不要应用exe,注册表2、尽可能应用压缩包装置~ 1.4、装置MySQL1.解压2.把这个包放到本人的电脑环境目录下 1.5、操作步骤1.下载后失去zip压缩包2.解压到本人想要装置到的目录,比方我装置到了D:\Data\mysql-8.0.25-winx643.增加环境变量1)我的电脑->属性->高级->环境变量2)抉择path在前面增加:你的mysql安装文件上面的bin目录D:\Data\mysql-8.0.25-winx64\bin3)在压缩包下新建my.ini文件(留神:mysql 5.0版本创立此文件,8.0版本不必创立了)4.编辑my.ini文件,留神替换门路地位(8.0版本不必操作) [mysqld]basedir=D:\Data\mysql-8.0.25-winx64\datadir=D:\Data\mysql-8.0.25-winx64\data\port=3306skip-grant-tables5.启动管理员模式下的cmd,并将门路切换至mysql下的bin目录,而后输出mysqld-install(装置mysql) 6.再输出mysqld --initialize-insecure --user=mysql初始化数据文件7.而后输出net start mysql启动mysql,而后用命令mysql -uroot -p进入mysql治理界面8.进入界面后更改root明码update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';如果是8.0输出ALTER user 'root'@'localhost' IDENTIFIED BY '123456';(最初输出flush privileges;刷新权限)9.批改my.ini文件删除最初一句skip-grant-tables(如果是8.0不必操作这一步)10.批改my.ini文件删除最初一句skip-grant-tables(8.0版本不必操作)11.重启mysql即可失常应用exit或者ctrl+C退出net stop mysql敞开mysql服务net start mysql启动mysql服务12.而后输出mysql -uroot -p123456即可

June 6, 2021 · 1 min · jiezi

关于mysql:Ubantu-安装80以上设置密码改变

之前命令装置了mysql,却怎么也改不了root用户的明码,查阅许多材料才发现,其实不难。这个装置其实非常简单,只须要几行命令,首先获取管理员权限 sudo su 1而后装置mysql, apt install mysql-server 1这里装置实现后主动初始化数据文件,本人开启服务,无需手动操作。而后登录mysql,输出‘mysql’间接就能够登录, mysql 1而后输出sql语句,批改root明码’123456’ use mysql;alter user 'root'@'localhost' identified with mysql_native_password by '123456'; 12功败垂成,当初就能够应用mysql的root账号登录了退出管理员权限,而后登陆mysql mysql -u root -p————————————————版权申明:本文为CSDN博主「爱 不会绝迹」的原创文章,遵循CC 4.0 BY-SA版权协定,转载请附上原文出处链接及本申明。原文链接:https://blog.csdn.net/weixin_...

June 4, 2021 · 1 min · jiezi

关于mysql:mysql数据库-sqlmodeonlyfullgroupby-模式引发的惨案

我的项目启动报了一个错: which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 翻译过去就是:mysql中group by 前面的字段必须在后面的查问中 用到 因为mysql 5.7.28的版本 默认是开启 only_full_group_by 此时须要做的是:use mysql; (抉择mysql数据库)select @@sql_mode; 查问sql模式如果有only_full_group_by则删除之: set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 再从新查问一次:select @@sql_mode; 此时会发现only_full_group_by字段曾经被删除了 重启利用删除缓存 会发现之前的谬误依然如故了 mysql 貌似不能重启 重启会从新初始化貌似 大家试试

June 3, 2021 · 1 min · jiezi

关于mysql:你向-MySQL-数据库插入-100w-条数据用了多久

多线程插入(单表) 问:为何对同一个表的插入多线程会比单线程快?同一时间对一个表的写操作不应该是独占的吗? 答:在数据里做插入操作的时候,整体工夫的调配是这样的: 链接耗时 (30%)发送query到服务器 (20%)解析query (20%)插入操作 (10% * 词条数目)插入index (10% * Index的数目)敞开链接 (10%)从这里能够看进去,真正耗时的不是操作,而是链接,解析的过程。 MySQL插入数据在写阶段是独占的,然而插入一条数据依然须要解析、计算、最初才进行写解决,比方要给每一条记录调配自增id,校验主键惟一键属性,或者其余一些逻辑解决,都是须要计算的,所以说多线程可能提高效率。 多线程插入(多表) 分辨别表后应用多线程插入。 预处理SQL 一般SQL,即应用Statement接口执行SQL预处理SQL,即应用PreparedStatement接口执行SQL应用PreparedStatement接口容许数据库预编译SQL语句,当前只需传入参数,防止了数据库每次都编译SQL语句,因而性能更好。 String sql = "insert into testdb.tuser (name, remark, createtime, updatetime) values (?, ?, ?, ?)";for (int i = 0; i < m; i++) { //从池中获取连贯 Connection conn = myBroker.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql); for (int k = 0; k < n; k++) { pstmt.setString(1, RandomToolkit.generateString(12)); pstmt.setString(2, RandomToolkit.generateString(24)); pstmt.setDate(3, new Date(System.currentTimeMillis())); pstmt.setDate(4, new Date(System.currentTimeMillis())); //退出批处理 pstmt.addBatch(); } pstmt.executeBatch(); //执行批处理 pstmt.close(); myBroker.freeConnection(conn); //连贯归池}多值插入SQL ...

June 3, 2021 · 1 min · jiezi

关于mysql:最新最全的-MySQL-面试题整理吊打面试官完全没问题了建议收藏

数据库基础知识为什么要应用数据库数据保留在内存 长处: 存取速度快毛病: 数据不能永恒保留数据保留在文件 长处: 数据永恒保留毛病:1)速度比内存操作慢,频繁的IO操作。2)查问数据不不便数据保留在数据库 数据永恒保留应用SQL语句,查问不便效率高。治理数据不便什么是SQL?结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言(12800字!SQL 语法速成手册)。 作用:用于存取数据、查问、更新和治理关系数据库系统。 什么是MySQL?MySQL是一个关系型数据库管理系统,由瑞典MySQL) AB 公司开发,属于 Oracle 旗下产品。MySQL 是最风行的关系型数据库管理系统之一,在 WEB 利用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。在Java企业级开发中十分罕用,因为 MySQL 是开源收费的,并且不便扩大。 数据库三大范式是什么第一范式:每个列都不能够再拆分。第二范式:在第一范式的根底上,非主键列齐全依赖于主键,而不能是依赖于主键的一部分。第三范式:在第二范式的根底上,非主键列只依赖于主键,不依赖于其余非主键。在设计数据库构造的时候,要尽量恪守三范式,如果不恪守,必须有足够的理由。比方性能。事实上咱们常常会为了性能而斗争数据库的设计。 mysql无关权限的表都有哪几个MySQL服务器通过权限表来管制用户对数据库的拜访,权限表寄存在mysql数据库里,由mysql_install_db脚本初始化。这些权限表别离user,db,table_priv,columns_priv和host。上面别离介绍一下这些表的构造和内容: user权限表:记录容许连贯到服务器的用户帐号信息,外面的权限是全局级的。db权限表:记录各个帐号在各个数据库上的操作权限。table_priv权限表:记录数据表级的操作权限。columns_priv权限表:记录数据列级的操作权限。host权限表:配合db权限表对给定主机上数据库级操作权限作更粗疏的管制。这个权限表不受GRANT和REVOKE语句的影响。 MySQL的binlog有有几种录入格局?别离有什么区别?有三种格局,statement,row和mixed。ROW 还是 STATEMENT?线上 MySQL Binlog 怎么选? statement模式下,每一条会批改数据的sql都会记录在binlog中。不须要记录每一行的变动,缩小了binlog日志量,节约了IO,进步性能。因为sql的执行是有上下文的,因而在保留的时候须要保留相干的信息,同时还有一些应用了函数之类的语句无奈被记录复制。row级别下,不记录sql语句上下文相干信息,仅保留哪条记录被批改。记录单元为每一行的改变,根本是能够全部记下来然而因为很多操作,会导致大量行的改变(比方alter table),因而这种模式的文件保留的信息太多,日志量太大。mixed,一种折中的计划,一般操作应用statement记录,当无奈应用statement的时候应用row。此外,新版的MySQL中对row级别也做了一些优化,当表构造发生变化的时候,会记录语句而不是逐行记录。赞!7000 字学习笔记,MySQL 从入门到放弃 数据类型mysql有哪些数据类型 整数类型 包含TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,别离示意1字节、2字节、3字节、4字节、8字节整数。任何整数类型都能够加上UNSIGNED属性,示意数据是无符号的,即非负整数。长度:整数类型能够被指定长度,例如:INT(11)示意长度为11的INT类型。长度在大多数场景是没有意义的,它不会限度值的非法范畴,只会影响显示字符的个数,而且须要和UNSIGNED ZEROFILL属性配合应用才有意义。例子,假设类型设定为INT(5),属性为UNSIGNED ZEROFILL,如果用户插入的数据为12的话,那么数据库理论存储数据为00012。实数类型 包含FLOAT、DOUBLE、DECIMAL。DECIMAL能够用于存储比BIGINT还大的整型,能存储准确的小数。而FLOAT和DOUBLE是有取值范畴的,并反对应用规范的浮点进行近似计算。计算时FLOAT和DOUBLE相比DECIMAL效率更高一些,DECIMAL你能够了解成是用字符串进行解决。字符串类型 包含VARCHAR、CHAR、TEXT、BLOBVARCHAR用于存储可变长字符串,它比定长类型更节俭空间。VARCHAR应用额定1或2个字节存储字符串长度。列长度小于255字节时,应用1字节示意,否则应用2字节示意。VARCHAR存储的内容超出设置的长度时,内容会被截断。CHAR是定长的,依据定义的字符串长度调配足够的空间。CHAR会依据须要应用空格进行填充不便比拟。CHAR适宜存储很短的字符串,或者所有值都靠近同一个长度。CHAR存储的内容超出设置的长度时,内容同样会被截断。应用策略:对于常常变更的数据来说,CHAR比VARCHAR更好,因为CHAR不容易产生碎片。对于十分短的列,CHAR比VARCHAR在存储空间上更有效率。应用时要留神只调配须要的空间,更长的列排序时会耗费更多内存。尽量避免应用TEXT/BLOB类型,查问时会应用长期表,导致重大的性能开销。枚举类型(ENUM),把不反复的数据存储为一个预约义的汇合。 有时能够应用ENUM代替罕用的字符串类型。ENUM存储十分紧凑,会把列表值压缩到一个或两个字节。ENUM在外部存储时,其实存的是整数。尽量避免应用数字作为ENUM枚举的常量,因为容易凌乱。排序是依照外部存储的整数日期和工夫类型,尽量应用timestamp,空间效率高于datetime, 用整数保留工夫戳通常不不便解决。如果须要存储奥妙,能够应用bigint存储。引擎MySQL存储引擎MyISAM与InnoDB区别存储引擎Storage engine:MySQL中的数据、索引以及其余对象是如何存储的,是一套文件系统的实现。 罕用的存储引擎有以下:Innodb引擎:Innodb引擎提供了对数据库ACID事务的反对。并且还提供了行级锁和外键的束缚。它的设计的指标就是解决大数据容量的数据库系统。MyIASM引擎(本来Mysql的默认引擎):不提供事务的反对,也不反对行级锁和外键。MEMORY引擎:所有的数据都在内存中,数据的处理速度快,然而安全性不高。MyISAM与InnoDB区别 MyISAM索引与InnoDB索引的区别?InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。InnoDB的主键索引的叶子节点存储着行数据,因而主键索引十分高效。MyISAM索引的叶子节点存储的是行数据地址,须要再寻址一次能力失去数据。InnoDB非主键索引的叶子节点存储的是主键和其余带索引的列数据,因而查问时做到笼罩索引会十分高效。InnoDB引擎的4大个性插入缓冲(insert buffer)二次写(double write)自适应哈希索引(ahi)预读(read ahead)存储引擎抉择如果没有特地的需要,应用默认的Innodb即可。 MyISAM:以读写插入为主的应用程序,比方博客零碎、新闻门户网站。 Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,反对事务和外键。比方OA自动化办公零碎。 索引什么是索引?索引是一种非凡的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们蕴含着对数据表里所有记录的援用指针。 索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以帮助疾速查问、更新数据库表中数据。索引的实现通常应用B树及其变种B+树。 更艰深的说,索引就相当于目录。为了不便查找书中的内容,通过对内容建设索引造成目录。索引是一个文件,它是要占据物理空间的。 索引有哪些优缺点?索引的长处 能够大大放慢数据的检索速度,这也是创立索引的最次要的起因。通过应用索引,能够在查问的过程中,应用优化暗藏器,进步零碎的性能。索引的毛病 工夫方面:创立索引和保护索引要消耗工夫,具体地,当对表中的数据进行减少、删除和批改的时候,索引也要动静的保护,会升高增/改/删的执行效率;空间方面:索引须要占物理空间。索引应用场景(重点)where上图中,依据id查问记录,因为id字段仅建设了主键索引,因而此SQL执行可选的索引只有主键索引,如果有多个,最终会选一个较优的作为检索的根据。 -- 减少一个没有建设索引的字段alter table innodb1 add sex char(1);-- 按sex检索时可选的索引为nullEXPLAIN SELECT * from innodb1 where sex='男'; ...

June 3, 2021 · 7 min · jiezi

关于mysql:MySQL教程

MySQL凭借着它还不错的性能、还不错的稳定性长年稳居老二宝座,当然最大的劣势就是它不要钱,还开源,这让它成为大部分公司,尤其是互联网公司首选的数据库(近年来越来越多的大公司也在尝试将业务转移到这种不要钱的数据库上来)。 行业前景 甲骨文公司的两款数据库(Oracle+MySQL)共占据着全世界的数据库市场份额在60%以上,在中国(Oracle+MySQL)的应用更占到80%。寰球500强的公司90%都在应用Oracle,中国前100个大企业/国有企业有99个以上应用Oracle为主MySQL为辅,中国前100个互联网行业公司有95%以上应用MySQL为主Oracle/NoSQL为辅。 MySQL数据库在互联网行业90%以上的应用比例,最典型的就是BAT了, 近2年开始MySQL扩大到 金融、通信、生产制作、疾速消费品批发、物流运输、医疗、政府等行业;所以MySQL数据库工程师是互联网/互联网+的企业目前急需的技术人才之一,无论是运维人员还是开发人员,如果不懂数据库,最终将被淘汰。 课程目标: MySQL企业纯实战干货,带同学们学习mysql的应用技能,融入企业需要。 适用人群 (1)在校学生,心愿毕业后找份好工作及高薪水的。 (2)无工作教训,基础薄弱的应届及往届大学毕业生。 (3)当初有工作无倒退,工资偏低,从事IT相干行业,想往零碎和数据库方向倒退,渴望高薪的人。 (4)现从事Windows/Linux/Unix/主机/存储/开发,想往数据库方向倒退,寻求冲破,渴望高薪的人。 (5)现从事数据库相干工作,渴望技能失去晋升者。

June 3, 2021 · 1 min · jiezi

关于mysql:mysql定时任务

查看定时工作SELECT * FROM information_schema.events 敞开定时工作DROP event wlzx_cosignorData_bak_clean_event; 执行mysql语句 DO后是须要执行的sql每天凌晨0点执行CREATE EVENT IF NOT EXISTS wlzx_cosignorData_bak_clean_event ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 0 HOUR) ON COMPLETION PRESERVE ENABLE DO delete from liukl_wlzx_cosignorData_bak; 每隔一分钟执行CREATE event IF NOT EXISTS temp_event ON SCHEDULE EVERY 1 MINUTE ON COMPLETION PRESERVE DO update users set support=0 where support=1;

June 2, 2021 · 1 min · jiezi

关于mysql:MySQL-空间位置坐标-geometry-的使用

建表语句 CREATE TABLE `map` ( `id` int(11) NOT NULL, `location` geometry NOT NULL, PRIMARY KEY (`id`), SPATIAL KEY `idx_location` (`location`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='空间地位信息';插入数据 INSERT INTO map (id, location) VALUES (1, ST_GeomFromText('POINT(121.366961 31.190049)'));更新数据 UPDATE map SET location = ST_GeomFromText('POINT(121.366961 31.190049)') where id = 1;查问数据 SELECT id, ST_AsText(location) AS location FROM map;ST_AsText()函数是将geometry类型转化为字符串计算两点间隔 // 计算结果单位是米,POINT()里经纬度应用逗号分隔SELECT ST_Distance_Sphere(POINT(121.590347, 31.388094), location) AS distance FROM map;SELECT ST_Distance_Sphere((SELECT location FROM map WHERE id = 1), location) AS distance FROM map WHERE id = 2;查问指定间隔范畴内的数据 ...

June 1, 2021 · 1 min · jiezi

关于mysql:MySQL数据类型

整型利用细节: 。生产中应该抉择哪种类型 在满足业务所需数值范畴的状况下,抉择占用字节更少的类型。能够节俭内存空间 。int(11) 、tinyint(4)与 zerofill(0填充)的问题 只是显示属性,没有实际意义,只示意宽度,不会影响字段的值 alter table t1 modify a tinyint zerofill not null; a tinyint(3) unsigned zerofill NOT NULL 正数加zerofill是不被容许的 。int类型转换为bigint注意事项 如果该列是主键,则无奈应用onlineddl 如果不是主键,反对onlineddl onlineddl:执行ddl语句,能够反对dml语句,不会阻塞dml语句 。ipv4地址抉择什么类型寄存 倡议应用int类型存储。 inet_aton('ip') 将ip地址转为整型select inet_aton('255.255.255.255'); inet_ntoa('int') 将整型转为ip地址 select inet_ntoa('4294967295'); 浮点型利用细节: 。生产中浮点数如何抉择? 但凡波及到资金的,倡议抉择decimal。 。测试环境中插入随机字符? floor() :向下取整 select floor('1.23'); ceil():select ceil('1.23'); round():select round(0.54); select round(0.5354, 2); rand():取0-1随机值 select rand(); ...

May 31, 2021 · 1 min · jiezi

关于mysql:MySQL约束

束缚: 束缚对象:字段 如何束缚:与字段类型配合一起束缚字段,如不合乎字段类型和束缚的写操作,则会被回绝。 。unsigned/signed unsigned 无符号(<=0)必须与数值类型配合应用 signed 有符号(正数 0 负数)默认,必须与数值类型配合应用 。not null :非空束缚(不能为空) 为什么生产中倡议应用not null 容许为null的状况下,会有哪些不利的影响? ①.空值的字段增加索引,空值会寄存在b+tree最右边,造成索引性能降落 ②.造成磁盘和内存空间的节约。给空值字段增加索引,会多占用一个字节 ③.造成count(*) 和 count(name)统计后果不精确 在innodb存储引擎下select count(*)为什么慢 mvcc个性,innodb存储引擎只能全表扫描,累积计数 。default : 给字段指定默认值 。unique :唯一性束缚(字段值不能反复,然而能够为空) 在生产中,给已有数据增加unique,前提必须是已有数据不能有反复值 。auto_increment : 自增束缚,必须是与整型配合应用 auto_increment 5.7自增值回溯的问题 起因:5.7版本表的auto_increment是基于内存去存储的,不会长久化到磁盘上,咱们在重启数据库之后,内存中的数据被开释,会从新计算作为下一个自增值。 8.0版本解决了自增值回溯的问题。 。primary key :既不能为空也不能反复

May 31, 2021 · 1 min · jiezi

关于mysql:MySQL数据类型

a. 整型 整型占字节大小(单位byte)数值范畴(unsigned)数值范畴(signed) tinyint1(0,255)(-128,127) smallint2(0,65 535)(-32 768,32 767) mediumint3(0,16 777 215)(-8 388 608,8 388 607) int4(0,4 294 967 295)(-2 147 483 648,2 147 483 647) bigint8(0,18 446 744 073 709 551 615)(-9,223,372,036,854,775,808,9 223 372 036 854 775 807) 整型利用细节: 。生产中应该抉择哪种类型 在满足业务所需数值范畴的状况下,抉择占用字节更少的类型。能够节俭内存空间 。int(11) 、tinyint(4)与 zerofill(0填充)的问题 只是显示属性,没有实际意义,只示意宽度,不会影响字段的值 alter table t1 modify a tinyint zerofill not null; a tinyint(3) unsigned zerofill NOT NULL 正数加zerofill是不被容许的 ...

May 31, 2021 · 1 min · jiezi

关于mysql:MySQL子查询

什么是子查问:当一个查问是另一个查问的子局部时,咱们叫做子查问 子查问的分类: ①从对象间的关系分类 相干子查问:select * from t1 where a1=(select b from t2 where b=a1); 非相干子查问:select * from t1 where a1=(select b from t2 where b=2); ②从查问后果上分类 单列子查问 如何显示与SMITH同一部门的所有员工? select * from emp where deptno=(select deptno from emp where ename='smith') and ename !='smith'; 多列子查问 如何查问与smith的部门和岗位完全相同的所有雇员 select * from emp where (deptno,job) = (select deptno,job from emp where ename='smith'); 多行子查问 ...

May 31, 2021 · 1 min · jiezi

关于mysql:MySQL联表查询

显示所有员工名字(emp.ename),员工工资(emp.sal)及所在部门的名字(dept.dname) 笛卡尔积:emp_num*dept_num;联表查问时肯定要带上关联条件 select ename, sal, dname from emp,dept where emp.deptno = dept.deptno; select ename, sal, dname from emp inner join dept on emp.deptno = dept.deptno; select ename, sal, dname from emp join dept on emp.deptno = dept.deptno; 内连贯查问 语法: select 字段 from 表1 , 表2 where 连贯条件; select 字段 from 表1 inner join 表2 on 连贯条件; select 字段 from 表1 join 表2 on 连贯条件; ...

May 31, 2021 · 1 min · jiezi

关于mysql:MySQL-union合并查询

union和union all 区别:union将合并的后果去重;union all 不去重 select ename from emp where empno=7900 union select ename from emp where empno>=7900; select ename from emp where empno=7900 union all select ename from emp where empno>=7900;900;

May 31, 2021 · 1 min · jiezi

关于mysql:MySQL聚合函数

count():统计满足条件的记录数 sum():求和 avg():求平均值 max():取最大值 min():取最小值 。聚合函数查问案例 查问所有员工中最高工资和最低工资是多少 select max(sal), min(sal) from emp; 查问所有员工的平均工资和工资总和 select avg(sal), sum(sal) from emp; 计算共有多少员工 select count(*) from emp; 统计部门编号为10的平均工资 select avg(sal) from emp where deptno=10;

May 31, 2021 · 1 min · jiezi

关于mysql:MySQL-select查询教程

查问Syntax: SELECT[* | DISTINCT | col_name | col_name as new_name ]FROM tableWHERE conditionGROUP BY {col_name} HAVING where_conditionORDER BY {col_name } [ASC | DESC]LIMIT {[offset,] row_count | row_count OFFSET offset}查问列 。select * from .. select from emp; 会查问所有的记录行;生产中杜绝应用(select from emp;会做全表扫描) select * from emp where empno='7900'; 会取出所有的字段;生产中杜绝应用 起因1:占用更多的内存空间(缓冲池innodb buffer pool) 起因2:查问条件是一般索引,就会进行回表查问(随机io,查问性能升高) 。select col_name from .. select ename, job from emp where empno='7900'; 索引笼罩(using index) 。select col_name as new_col_name from .. ...

May 31, 2021 · 3 min · jiezi

关于mysql:如何搞懂-MySQL-InnoDB-索引与事务

一、Mysql 索引 索引的定义索引是对数据库表中一列或多列的值进行排序的一种构造,应用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜寻所有的行相比,索引有助于更快地获取信息。 索引的一个次要目标就是放慢检索表中数据,亦即能帮助信息搜寻者尽快的找到合乎限度条件的记录ID的辅助数据结构。 索引的类型1) primary key 主键索引 它是一种非凡的惟一索引,不容许有空值。一张表只能有一个主键 2) unique 惟一索引 惟一索引列的值必须惟一,但容许有空值。如果是组合索引,则列值的组合必须惟一。 3) index 一般索引 这是最根本的索引,它没有任何限度。 【文章福利】须要C/C++ Linux服务器架构师学习材料加群1106747042(材料包含C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等)4) fulltext 全文索引 全文索引(也称全文检索)是目前搜索引擎应用的一种关键技术。它可能利用分词技术等多种算法智能剖析出文本文字中关键字词的频率及重要性,而后依照肯定的算法规定智能地筛选出咱们想要的搜寻后果。 5) 组合索引 组合索引,即一个索引蕴含多个列。 索引的构造mysql中广泛应用B+Tree做索引,但在实现上又依据聚簇索引和非聚簇索引而不同,在这儿不做具体介绍,后续篇章中再开展具体阐明。 测试数据咱们当初有一个订单表,表构造如下: 最左前缀匹配准则十分重要的准则,mysql会从左向右匹配直到遇到范畴查问(>、<、between、like)就进行匹配。创立一个索引CREATE INDEX IDX_T_1 USING BTREE ON xa87_v2.t_xa87_order_info (store,delivery_msg,food_fee,delivery_fee);咱们执行一个sql explain select * from t_xa87_order_info where delivery_msg='高玥静,17836031' and food_fee>1000;+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+----------+-------------+| 1 | SIMPLE | t_xa87_order_info | NULL | ALL | NULL | NULL | NULL | NULL | 62017 | 3.33 | Using where |+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+----------+-------------+在where中并没有store这个字段,所以不会应用IDX_T_1这个索引。 ...

May 31, 2021 · 4 min · jiezi

关于mysql:SparkSQL执行update操作修改mysql数据

这是不须要改源码的形式 //user表样例类case class User1(id: Long, name: String, password: String, imgUrl: String, update_date: String)object SparkSQLUpdateMySQLOfJDBC { def main(args: Array[String]): Unit = { //SparkSession val spark: SparkSession = SparkSession.builder() .appName("SparkSqlToMysql") .master("local") .getOrCreate() //读取json/csv文件数据 val df = spark.read.json("data/user.json") df.show() val data: Array[Row] = df.collect() //创立数据库连贯 val connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm?characterEcoding=UTF-8", "root", "000000") //申明执行的SQL val statement = connection.prepareStatement("update user set name=?, password=?, imgUrl=?, update_date=? where id=?") //组装参数 val now: String = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now) data.foreach( u => { // statement.setObject(sql参数占位符的地位, 样例类的属性) statement.setObject(1, u.getString(2)) statement.setObject(2, u.getString(3)) statement.setObject(3, u.getString(4)) statement.setObject(4, now) statement.setObject(5, u.getLong(0)) statement.addBatch() //批量执行 } ) //执行SQL statement.executeBatch() spark.stop() }}写入中文后有呈现乱码'??'的状况, 有晓得的大佬指导一下 ...

May 31, 2021 · 1 min · jiezi

关于mysql:带你看懂MySQL执行计划

前言: 后面文章,咱们学习了 MySQL 慢日志相干内容,当咱们筛选失去具体的慢 SQL 后,就要想方法去优化啦。优化 SQL 的第一步应该是读懂 SQL 的执行打算。本篇文章,咱们一起来学习下 MySQL explain 执行打算相干常识。 1.执行打算简介执行打算是指一条 SQL 语句在通过 MySQL 查问优化器的优化会后,具体的执行形式。MySQL 为咱们提供了 EXPLAIN 语句,来获取执行打算的相干信息。须要留神的是,EXPLAIN 语句并不会真的去执行相干的语句,而是通过查问优化器对语句进行剖析,找出最优的查问计划,并显示对应的信息。 执行打算通常用于 SQL 性能剖析、优化等场景。通过 explain 的后果,能够理解到如数据表的查问程序、数据查问操作的操作类型、哪些索引能够被命中、哪些索引理论会命中、每个数据表有多少行记录被查问等信息。 explain 执行打算反对 SELECT、DELETE、INSERT、REPLACE 以及 UPDATE 语句。咱们个别多用于剖析 select 查问语句。 2.执行打算实战咱们简略来看下一条查问语句的执行打算: mysql> explain SELECT * FROM dept_emp WHERE emp_no IN (SELECT emp_no FROM dept_emp GROUP BY emp_no HAVING COUNT(emp_no)>1);+----+-------------+----------+------------+-------+-----------------+---------+---------+------+--------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+----------+------------+-------+-----------------+---------+---------+------+--------+----------+-------------+| 1 | PRIMARY | dept_emp | NULL | ALL | NULL | NULL | NULL | NULL | 331143 | 100.00 | Using where || 2 | SUBQUERY | dept_emp | NULL | index | PRIMARY,dept_no | PRIMARY | 16 | NULL | 331143 | 100.00 | Using index |+----+-------------+----------+------------+-------+-----------------+---------+---------+------+--------+----------+-------------+能够看到,执行打算后果中共有 12 列,各列代表的含意总结如下表: ...

May 31, 2021 · 2 min · jiezi

关于mysql:独家全新-MySQL-王者进阶套餐简直就是血赚

最近在温习一些MySQL数据库相干的笔记常识,忽然想问:为啥学Java肯定必须得学MySQL? 说白了,当初无论是哪种程序(比方:桌面程序、网页程序、app程序等等),服务端都是应用关系型数据库作为其存储数据的容器,也就是MySQL数据库。MySQL 是最风行的关系型数据库管理系统(RDBMS)之一。而数据库技术是每个开发人员必备的技能之一,不论学习任何语言都是如此。2021的除夕假就这么过来了,繁忙一年又开启了,最近我依据本人的温习总结,特意给大伙送福利,献上我的“独家全新”MySQL进阶套餐,刷到的相对就是血赚!不信来看! 申明:对于我整顿的这“MySQL进阶套餐”,看完后感兴趣的敌人若是想进一步的学习,可自行下载原件 请留神:戳此-获取码-MySQL!!!! 既是进阶套餐,那就必须得说说这本最佳pdf-《MySQL王者升级之路》分为:青铜、白银、黄金、铂金、钻石、星耀、王者等7个局部 第1局部倔强青铜篇(第1~8章):大抵包含以下内容 MySQL简介支流分支版本数据库装置/启动/敞开权限治理MySQL 数据库的内存池构造存储引擎线程作用刷新机制数据库文件表治理字符集统计信息与数据碎片整顿的办法索引的具体解读执行打算的剖析压力测试的展示事务的介绍隔离级别的深度解说,并联合锁一起开展 第2局部秩序白银篇(第9章):大抵包含以下内容 逻辑备份裸文件备份针对mysqldump、select...into outfile、mydumper和xtrabackup开展详解及实际演练 第3局部光荣黄金篇(第10~11章):大抵包含以下内容 主从复制的原理对复制参数进行具体解说对半同步复制、多源复制、GTID 复制进行全面解读与实际对复制数据一致性的校验和复制治理技巧进行介绍并解读主从复制中的各种报错故障 第4局部尊贵铂金篇(第12~15章):大抵包含以下内容 互联网支流的MySQL高可用集群架构对MHA/Keepalived/PXC原理的解析、保护治理与实际ProxySQL这个弱小的MySQL两头代理层的利用 第5局部永恒钻石篇(第16~17章):大抵包含以下内容 MySQL 5.7版本的新个性通过硬件、操作系统、数据库、程序设计这四个维度来全面介绍MySQL 数据库的优化 第6局部至尊星耀篇(第18~19章):大抵包含以下内容 学习部署Lepus监控MySQL与版本升级 第7局部最强王者篇(第20章):MySQL面试总结 谈到MySQL面试,我还特意去搜刮一份据说是阿里P8级的数据库面试问题这份P8级的面试总结,是从根底开始,到索引、锁、日志、调优以及一些开放式的问题,咱可一层一层来测试本人的常识度,不会的可看答案解析MySQL根底问题1.说一下 MySQL 执行一条查问语句的外部执行过程?2.MySQL 提醒“不存在此列”是执行到哪个节点报出的?3.MySQL 查问缓存的性能有何优缺点?4.如何敞开 MySQL 的查问缓存性能?5.MySQL 的罕用引擎都有哪些?6.MySQL 能够针对表级别设置数据库引擎吗?怎么设置?7.罕用的存储引擎 InnoDB 和 MyISAM 有什么区别?8.InnoDB 有哪些个性?9.一张自增表中有三条数据,删除了两条数据之后重启数据库,再新增一条数据,此时这条数据的 ID 是几?10.MySQL 中什么状况会导致自增主键不能间断?11.InnoDB 中自增主键能不能被长久化?12.什么是独立表空间和共享表空间?它们的区别是什么?13.如何设置独立表空间?14.如何进行表空间膨胀?15.说一下重建表的执行流程?16.表的构造信息存在哪里?17.什么是笼罩索引?18.如果把一个 InnoDB 表的主键删掉,是不是就没有主键,就没方法进行回表查问了?19.执行一个 update 语句当前,我再去执行 hexdump 命令间接查看 ibd 文件内容,为什么没有看到数据有扭转呢?20.内存表和长期表有什么区别?21.并发事务会带来哪些问题?22.什么是脏读和幻读?23.为什么会呈现幻读?幻读会带来什么问题?24.如何防止幻读?25.如何查看 MySQL 的闲暇连贯?26.MySQL 中的字符串类型都有哪些?27.VARCHAR 和 CHAR 的区别是什么?别离实用的场景有哪些?28.MySQL 存储金额应该应用哪种数据类型?为什么?29.limit 3,2 的含意是什么?30.now() 和 current_date() 有什么区别?31.如何去重计算总条数?32.lastinsertid() 函数性能是什么?有什么特点?33.删除表的数据有几种形式?它们有什么区别?34.MySQL 中反对几种含糊查问?它们有什么区别?35.MySQL 反对枚举吗?如何实现?它的用处是什么?36.count(column) 和 count(*) 有什么区别?37.以下对于 count 说法正确的是?38.为什么 InnoDB 不把总条数记录下来,查问的时候间接返回呢?39.是否应用 show table status 中的表行数作为表的总行数间接应用?为什么?40.以下哪个 SQL 的查问性能最高?41.InnoDB 和 MyISAM 执行 select count(*) from t,哪个效率更高?为什么?42.在 MySQL 中有对 count(*) 做优化吗?做了哪些优化?43.在 InnoDB 引擎中 count(*)、count(1)、count(主键)、count(字段) 哪个性能最高?44.MySQL 中内连贯、左连贯、右连贯有什么区别?45.什么是视图?如何创立视图?46.视图有哪些长处?47.MySQL 中“视图”的概念有几个?别离代表什么含意?48.应用 delete 误删数据怎么找回?49.Flashback 复原数据的原理是什么? ...

May 30, 2021 · 2 min · jiezi

关于mysql:一次事故我对MySQL时间戳存char10还是int10有了全新的认识

摘要:char类型字段想走索引的话,必须用引号括起来。如果是工夫戳等类型的纯数字,倡议还是存为int型吧。本文分享自华为云社区《一次事变,我对MySql工夫戳存char(10)还是int(10)有了全新的意识》,原文作者:奔四码农 。 美妙的周五周五的晚上,一切都是那么美妙。 然而,10点多的时候,经营小哥哥忽然通知我后盾打不开了,我怀着一颗“有什么大不了的,预计又是他不会连wifi”的情绪,自信的关上了网址,果然,真打不开了。 这是居心让我过不好周末呀! 抓住那只bug通过我周密的排查,发现是一个“获取明天之前登录的用户”接口调用重大超时: 这个接口其实调用的数据表不多,在MySQL只读取了1张表,表构造如下: 获取明天之前登录的用户列表的SQL如下: SELECT u.email, log.user_idFROM `user` uLEFT JOIN `log_user_active` log ON u.user_id = log.user_idWHERE log.`log_dtime` <1634567890LIMIT 0 , 30这只是一个简略的SQL查问,并没有什么高精尖、简单的查问为什么这么慢?因为log_user_active的数据量最大,所以猜测应该是log_user_active表出了问题,为了排查起因,我把SQL又简化了下,去掉了JOIN间接简化为: SELECT log.user_idFROM `log_user_active`WHERE `log_dtime` <1551784072LIMIT 0 , 30经执行,这个语句花了将近1秒。。。如果多人同时拜访,MySQL不解体才怪。 此时,应该确信是这个表出问题无疑了,然而字段log_dtime明明建设了索引,怎么还这么慢呢? 通过各种百度,终于发现问题所在:因为log_dtime设计的是char类型。如果想让它走索引,查问的时候,值必须要加引号,阐明这是个字符串,否则是不会走索引的。我的数据凑巧都是数字组成(工夫戳),查问的时候也没有刻意去加引号,导致查问的时候不走索引。 这就是问题所在了,于是进行如下尝试: 尝试1:SQL的值加上引号 如上图,果然极快。 然而这样的话,须要改好多代码,我想想还是尝试下办法2吧。 尝试2:果决将数据表构造log_dtime设计为INT型,如图: 再次执行SQL: SELECT log.user_idFROM `log_user_active`WHERE `log_dtime` <1551784072LIMIT 0 , 30相应后果晋升N倍: 至此,问题处理完毕。 总结char类型字段想走索引的话,必须用引号括起来。如果是工夫戳等类型的纯数字,倡议还是存为int型吧。 欢快的周末,又向我招手了。 点击关注,第一工夫理解华为云陈腐技术~

May 29, 2021 · 1 min · jiezi

关于mysql:CentOS7中Mysql的systemctl启动方式启动停止重启开机启动

指标:在CentOS7中配置mysql的systemctl启动形式(启动、进行、重启、开机启动) 科普:1.CentOS7的服务systemctl脚本寄存在:/usr/lib/systemd/,有零碎(system)和用户(user)之分: /usr/lib/systemd/system (零碎服务,开机不须要登录就能运行)/usr/lib/systemd/user (用户服务,须要登录后能力运行) 2./usr/lib/systemd/system 和 /etc/systemd/system的区别: 对于那些反对 Systemd(YUM/DNF/RPM/APT/etc) 的软件,装置的时候,会主动在 /usr/lib/systemd/system 目录增加一个配置文件。对于非软件包模式的长期软件装置,零碎操作员应将文件手动搁置在 /etc/systemd/system 留神: 设置开机自启动脚本能够在/etc/systemd/system或者/usr/lib/systemd/system目录下配置,当两个中央都配置了的状况下,/etc/systemd/system配置优先。3.每一个服务以.service结尾,个别会分为3局部:[Unit]、[Service]、[Install]:[Unit] 次要是对这个服务的阐明,内容包含Description和After,Description用于形容服务,After用于形容服务类别。[Service] 是服务的要害,是服务的一些具体运行参数的设置, Type=forking是后盾运行的模式PIDFile 为寄存PID的文件门路ExecStart 为服务的具体运行命令ExecReload 为重启命令ExecStop 为进行命令PrivateTmp=True 示意给服务调配独立的长期空间 留神:[Service] 局部的启动、重启、进行命令全副要求应用绝对路径,应用相对路径则会报错![Install] 是服务装置的相干设置,可设置为多用户的剖析:1.配置启动脚本mysql.service文件;2.设置脚本开机启动;3.测试。 操作流程:1.进入/lib/systemd/systemcd /lib/systemd/system2.创立mysql.servicevi /lib/systemd/system/mysql.service3.mysql.service中增加配置信息 [Unit]Description=nginxAfter=network.target[Service]Type=forkingExecStart=/usr/local/mysql/sbin/mysql #批改为本人零碎对应的门路ExecReload=/usr/local/mysql/sbin/mysql -s reload #批改为本人零碎对应的门路ExecStop=/usr/local/mysql/sbin/mysql -s quit #批改为本人零碎对应的门路PrivateTmp=true[Install]WantedBy=multi-user.target保留退出。 systemctl enable mysql.service (设置开机自启动)参数解释:Description:形容服务After:形容服务类别[Service]服务运行参数的设置Type=forking是后盾运行的模式ExecStart为服务的具体运行命令ExecReload为重启命令ExecStop为进行命令PrivateTmp=True示意给服务调配独立的长期空间留神:[Service]的启动、重启、进行命令全副要求应用绝对路径[Install]运行级别下服务装置的相干设置,可设置为多用户,即零碎运行级别为3.5.操作命令 systemctl status mysql.service (查看服务以后状态)systemctl start mysql.service (启动服务)systemctl stop mysql.service (进行服务)systemctl restart mysql.service (重新启动服务)systemctl reload mysql.service (从新加载配置)systemctl enable mysql.service (设置开机自启动)systemctl disable mysql.service (进行开机自启动)systemctl list-units --type=service (查看所有已启动的服务)例:查看服务启动状态(已启动状态)6.参考命令 systemctl start *.service #启动服务systemctl stop *.service #进行服务systemctl restart *.service #重启服务systemctl reload *.service #从新加载服务配置文件systemctl status *.service #查问服务运行状态systemctl enable *.service #开机运行服务systemctl disable *.service #勾销开机运行systemctl --failed #显示启动失败的服务systemctl is-enabled servicename.service #查问服务是否开机启动

May 28, 2021 · 1 min · jiezi

关于mysql:技术分享-MySQL-巡检

作者:王向 爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的解决。善于数据库故障解决。对数据库技术和 python 有着浓重的趣味。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 MySQL巡检 操作系统层面巡检嘛没啥特地的,就直奔主题把。 cpusar -u 10 3 内存 sar -r 10 3I/Osar -b 10 3磁盘df -h零碎根底信息当然,查看是否应用numa和swap,或是否频繁交互信息等。还有其余的监控我的项目,这里就不一一赘述了。 操作系统日志除此之外,还须要关注日志类信息,例如: tail 200 /var/log/messagesdmesg | tail 200MySQLMySQL重点参数的查看,及主从衰弱状态的巡检。 重点参数参数参考值innodb_buffer_pool_size零碎的50%-75%binlog_formatROWsync_binlog1innodb_flush_log_at_trx_commit1read_only从库ON,主库OFFsuper_read_only从库ON,主库OFFlog_slave_updates1innodb_io_capacitysata/sas硬盘这个值在200<br/>sas raid10: 2000<br/>ssd硬盘:8000<br/>fusion-io(闪存卡):25,000-50,000max_connections MySQL的状态\sshow full processlist;show engine innodb status\Gshow slave hosts;wait事件show global status like 'Innodb_buffer_pool_wait_free';show global status like 'Innodb_log_waits';锁#表锁show global status like 'Table_locks_waited';show global status like 'Table_locks_immediate';#行锁show global status like 'Innodb_row_lock_current_waits';以后期待锁的行锁数量show global status like 'Innodb_row_lock_time';申请行锁总耗时show global status like 'Innodb_row_lock_time_avg';申请行锁均匀耗时show global status like 'Innodb_row_lock_time_max';申请行锁最久耗时show global status like 'Innodb_row_lock_waits';行锁产生次数#还能够定时收集INFORMATION_SCHEMA外面的信息:SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;#长期表/临时文件show global status like 'Created_tmp_disk_tables';show global status like 'Created_tmp_files';#关上表/文件数show global status like 'Open_files';show global status like 'Open_table_definitions';show global status like 'Open_tables';#并发连接数show global status like 'Threads_running';show global status like 'Threads_created';show global status like 'Threads_cached';show global status like 'Aborted_clients'; #客户端没有正确敞开连贯导致客户端终止而中断的连接数show global status like 'Aborted_connects';Binlog# 应用长期二进制日志缓冲但超过 binlog_cache_size 值并应用临时文件show global status like 'Binlog_cache_disk_use'; # 应用长期二进制日志缓冲的事务数量show global status like 'Binlog_cache_use'; # 当非事务语句应用二进制日志缓存show global status like 'Binlog_stmt_cache_disk_use'; # 应用二进制日志缓冲非事务语句数量show global status like 'Binlog_cache_disk_use'; 链接数# 试图连贯到(不论成不胜利)mysql服务器的链接数show global status like 'Connection'; 长期表# 服务器执行语句时,在硬盘上主动创立的长期表的数量,是指在排序时,内存不够用(tmp_table_size小于须要排序的后果集),所以须要创立基于磁盘的长期表进行排序show global status like 'Created_tmp_disk_tables'; # 服务器执行语句时主动创立的内存中的长期表的数量show global status like 'Created_tmp_files';索引# 外部交语句show global status like 'Handler_commit'; # 外部 rollback语句数量show global status like 'Handler_rollback'; # 索引第一条记录被读的次数,如果高,则它表明服务器正执行大量全索引扫描show global status like 'Handler_read_first'; # 依据索引读一行的申请数,如果较高,阐明查问和表的索引正确show global status like 'Handler_read_key'; # 查问读索引最初一个索引键申请数show global status like 'Handler_read_last';# 依照索引程序读下一行的申请数show global status like 'Handler_read_next'; # 依照索引程序读前一行的申请数show global status like 'Handler_read_prev';# 依据固定地位读一行的申请数,如果值较高,阐明可能应用了大量须要mysql扫整个表的查问或没有正确应用索引show global status like 'Handler_read_rnd'; # 在数据文件中读下一行的申请数,如果你正进行大量的表扫,该值会较高show global status like 'Handler_read_rnd_next'; # 被缓存的.frm文件数量show global status like 'Open_table_definitions'; # 曾经关上的表的数量,如果较大,table_open_cache值可能太小show global status like 'Opened_tables';# 以后关上的表的数量show global status like 'Open_tables';# 曾经发送给服务器的查问个数show global status like 'Queries';# 没有应用索引的联接的数量,如果该值不为0,你应该仔细检查表的所有show global status like 'Select_full_join';# 对第一个表进行齐全扫的联接的数量show global status like 'Select_scan';# 查问工夫超过long_query_time秒的查问个数show global status like 'Slow_queries';# 排序算法曾经执行的合并的数量,如果值较大,减少sort_buffer_size大小show global status like 'Sort_merge_passes';线程# 线程缓存内的线程数量show global status like 'Threads_cached';# 以后关上的连贯数量show global status like 'Threads_connected';# 创立用来解决连贯的线程数show global status like 'Threads_created';# 激活的(非睡眠状态)线程数show global status like 'Threads_running';库表状况自增id应用状况SELECT table_schema, table_name, ENGINE, Auto_increment FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ( "INFORMATION_SCHEMA", "PERFORMANCE_SCHEMA", "MYSQL", "SYS") limit 30;表行数数据大小统计SELECT table_schema "Database name", sum( table_rows ) "No. of rows", sum( data_length ) / 1024 / 1024 "Size data (MB)", sum( index_length )/ 1024 / 1024 "Size index (MB)" FROM information_schema.TABLES GROUP BY table_schema;表行数 TOP 30SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_ROWSFROM `information_schema`.`tables` WHERE TABLE_SCHEMA not in('information_schema','sys','mysql','performance_schema')ORDER BY table_rows DESC LIMIT 30;存储引擎不是innodb的表SELECT TABLE_SCHEMA, TABLE_NAME,ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE != 'innodb' AND TABLE_SCHEMA NOT IN ( "INFORMATION_SCHEMA", "PERFORMANCE_SCHEMA", "MYSQL", "SYS" );表数据和碎片 TOP 30select TABLE_SCHEMA, TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH, DATA_FREEfrom information_schema.tables where DATA_FREE is not null ORDER BY DATA_FREE DESC LIMIT 30;无主键的表SELECT t1.table_schema, t1.table_name, t1.table_type FROM information_schema.TABLES t1 LEFT OUTER JOIN information_schema.TABLE_CONSTRAINTS t2 ON t1.table_schema = t2.TABLE_SCHEMA AND t1.table_name = t2.TABLE_NAME AND t2.CONSTRAINT_NAME IN ( 'PRIMARY' ) WHERE t2.table_name IS NULL AND t1.TABLE_SCHEMA NOT IN ( 'information_schema', 'performance_schema', 'test', 'mysql', 'sys' ) AND t1.table_type = "BASE TABLE";MySQL主从检测#主从状态show slave status\G#主从是否提早Master_Log_File == Relay_Master_Log_File && Read_Master_Log_Pos == Exec_Master_Log_Pos高可用层面MHA && keepalived ...

May 28, 2021 · 3 min · jiezi

关于mysql:安装msyql

1.下载mysql的yum源https://dev.mysql.com/downloads/repo/yum/ 2.装置yum源shell> sudo yum localinstall platform-and-version-specific-package-name.rpm3.抉择mysql版本shell> yum repolist all | grep mysqlshell> sudo yum-config-manager --disable mysql56-communityshell> sudo yum-config-manager --disable mysql80-communityshell> sudo yum-config-manager --enable mysql57-community4.查看mysql版本是否正确shell> yum repolist enabled | grep mysql5.装置mysqlshell> sudo yum install mysql-community-server6.启动mysqlshell> sudo service mysqld startStarting mysqld:[ OK ]

May 28, 2021 · 1 min · jiezi

关于mysql:sql教程

 导入测试库: 文档地址: https://dev.mysql.com/doc/emp... 下载地址: https://github.com/datacharme... 导入测试库: cd mysql -uroot -p -S < employees.sql 库操作 增:create database test character set utf8; 删:drop database test; 改:alter database test character set gbk; 查 :show databases; 查看以后有哪些数据库 :show create database test; 查看创立test库的sql语句 表操作 增:create table t1 (id int)engine=innodb charset=utf8; 删:drop table t2; 改 :alter table t1 rename to t2; 批改表名称 :alter table t2 add name varchar(10); 增加新字段 :alter table t2 drop name; 删除字段 :alter table t2 change name title varchar(10); 批改字段名称 :alter table t2 modify title varchar(30); 批改字段类型束缚 :alter table t2 convert to character set gbk; 批改字符集 :alter table t2 engine=myisam; 批改存储引擎 查 :show tables; 查看以后库下有哪些表 :show create table t1; 查看创立表的sql语句 :desc t1; 查看表构造 :show table status like 't1' \G; 查看表状态 数据操作 增 :insert into t1(id, name, gender) values(1, '张三', 'm'); :insert into t1(id, name, gender) values(null, '王五', 'm'),(null,'李四','m'); 删:delete from t1 where id=1; 改:update t1 set name='ergou' where id=1; 查 :select * from t1; :select name from t1; 文章起源:http://youhua.cuohei.com/ ...

May 27, 2021 · 1 min · jiezi

关于mysql:B树和B树

B树和B+树[TOC] 参考:B树、B+树详解前言B+ 树是一种存储构造,罕用在数据库建设索引。 筹备常识 m阶的树:树最大分叉有m个,即子节点数最大为m个; 根节点:没有父节点的节点; 叶节点:没有子节点的节点; 外部节点:不是根、叶节点的节点; 二叉搜寻树:左子树中的值要比根节点值 小,右子树中的值要比根节点值 大; 均衡二叉树:二叉搜寻树的非凡状况,左右子树高度一样; 一、B树B数是均衡多叉树,一个m阶的B树,有如下个性: 外部节点起码得有ceil(m/2)个子节点;根节点不是叶节点时,至多得有2个子节点,即2阶;m阶的节点中蕴含m-1个数据;所有叶子节点高度一致; 二、B+树B+树是B树变体,对其规定做了些扭转。扭转如下: 叶子结点由一个有序数组和指向其左边一个叶子结点的指针组成;非叶子节点由一个有序数组组成,然而数组元素由一个索引值一个指针组成; 指针:指向一个叶子节点;索引值:指向的那个叶子节点中最小的索引值;非叶节点,是工具节点,用于疾速找到指定叶节点,只有叶节点才存储真正的数据(一行数据);叶子节点们相似一个有序链表;m阶的节点中蕴含m个数据; 2.1 为什么B+树适宜数据库?B+树便于范畴查问,这是最次要的。只须要查找最右边范畴即可,查到后遍历往右遍历叶子结点,晓得碰到左边范畴完结,这样就筛出了所有范畴内数据。 B树的范畴查找用的是中序遍历,而B+树用的是在链表上遍历; B+树的磁盘读写代价更低。B+树的外部结点并没有指向关键字具体信息的指针。因而其外部结点绝对B 树更小。如果把所有同一外部结点的关键字寄存在同一盘块中,那么盘块所能包容的关键字数量也越多。一次性读入内存中的须要查找的关键字也就越多。相对来说IO读写次数也就升高了; B+树查问效率更加稳固因为非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查问的门路长度雷同,导致每一个数据的查问效率相当;

May 27, 2021 · 1 min · jiezi