李维山
后端架构师
展开
-
【面试宝典】如何对MySQL进行优化?
一、数据库设计所有字段都设置默认值。 尽可能使用较小的整数类型。 尽可能定义字段为NOT NULL,除非该字段需要NULL。 尽可能使用固定大小的记录格式,如CHAR,除非变长字段用VARCHAR。二、数据库使用尽量使用长连接。 使用 EXPLAIN 查看复杂SQL执行方式,进行优化。 使用 LIMIT 语句尽量要跟 ORDER BY 或 DISTINCT 配合,避免一次FULL TABLE SCAN。 使用 TRUNCATE 清空表记录,而不是DELETE。 使用 UNSIGNED原创 2024-01-12 13:06:08 · 327 阅读 · 2 评论 -
【MySQL实战07】数据备份
MySQL数据库备份形式分为物理备份和逻辑备份。原创 2023-02-23 17:30:39 · 428 阅读 · 2 评论 -
【MySQL实战08】误删数据恢复
恢复数据前提条件:在MySQL配置文件my.cnf查看binlog是否开启:show variables like 'log_%';查看binlog保存位置:show variables like '%datadir%';查看当前正在使用的binlog:show master status;。原创 2023-02-24 15:47:49 · 500 阅读 · 0 评论 -
【MySQL实战06】MySQL配置半同步主从复制、读写分离(TP6)
MySQL复制默认是异步复制,Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Master Sever就自动返回数据给客户端,但并不知道Slave是否或何时已经接收且已处理,因此存在一定的概率备库与主库的数据是不对等的。在异步复制的机制的情况下,如果Master宕机,事务在Master上已提交,但很可能这些事务没有传到任何的Slave上。假设有Master->Salve故障转移的机制,此时Slave也可能会丢失事务。原创 2023-02-21 14:45:31 · 613 阅读 · 2 评论 -
【MySQL实战05】锁
MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。数据库锁设计的初衷是处理并发问题。全局锁命令:Flush tables with read lock (FTWRL),使整个库处于只读状态,可以在客户端断开的时候自动释放。使用场景:全库逻辑备份。官方自带的备份工具 mysqldump,使用参数–single-transaction 时,导数据之前会启动一个事务,来确保拿到一致性视图,但只适用于所有的表都使用事务引擎的库,对于 MyISAM 这种不支持事务的引擎,如果备份过程中有更新,原创 2022-04-12 18:37:40 · 1245 阅读 · 1 评论 -
【MySQL实战02】redo log和binlog
MySQL的更新操作涉及到两个重要的日志模块,redo log(重做日志)和 binlog(归档日志)。1、redo log(重做日志)InnoDB 引擎特有的日志模块,可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe。当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。i原创 2022-04-11 11:52:28 · 1027 阅读 · 0 评论 -
【MySQL实战04】索引
三种常见的数据结构:哈希表、有序数组、搜索树。哈希表:以键 - 值(key-value)存储数据,不适合范围查询,适用于只有等值查询的场景。 有序数组:递增顺序保存,支持范围查询,但只适用于静态存储引擎。 搜索树:二叉树搜索效率最高,实际需要根据数据块的大小使用“N 叉”树,减少磁盘访问次数。每一个数据库,底层存储核心都是基于数据模型,不同数据结构的数据库的拥有不同的适用场景。InnoDB 的索引模型B+ 树结构,每一个索引在 InnoDB 里面对应一棵 B+ 树。例如,一张表的..原创 2022-04-11 15:53:12 · 652 阅读 · 0 评论 -
【MySQL实战03】事务隔离
1、事务的特性:原子性、一致性、隔离性、持久性。2、事务间同时执行可能会出现的问题:脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)3、事务隔离级别:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)、串行化(serializable )。读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。 读提交是指,一个事务提交之后,它做的变更才会被原创 2022-04-11 12:16:14 · 243 阅读 · 0 评论 -
【MySQL实战01】 一条SQL查询语句是如何执行的
MySQL 可以分为 Server 层、存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。 .原创 2022-04-11 10:49:35 · 710 阅读 · 0 评论