9 MySQL 锁
类型引用引用 根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁顾名思义,全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。 全局锁的典型使用场景是,做全库逻辑备份。也就是把整库每个表都 select 出来存成文本或者整库备份 可能出现的问题: 如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆; 如果你在从库上备份,那么备份期间从库不能执行主库同步过来的 binlog,会导致主从延迟。 不加锁的话,备份系统备份的得到的库不是一个逻辑时间点,这个视图是逻辑不一致的。 说到视图,我们在前面讲事务隔离的时候,其实是有一个方法能够拿到一致性视图的,就是在可重复读隔离级别下开启一个事务。官方自带的逻辑备份工具是 mysqldump。当 mysqldump...
5 MySQL架构
大纲 mysql相关大多引用的极客时间林晓斌老师的课程MySQL实践45讲,有兴趣的可以购买课程系统性学习! 引用 架构mysql架构 Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。Server层主要负责连接和处理SQL 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。存储引擎层主要负责存储及索引 Server层连接器主要负责建立连接一个简单的连接命令mysql -h$ip -P$port -u$user -p 一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。 客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8...
7 MySQL事务
事务特性事务特性:ACID(Atomicity 即原子性、Consistency 一致性、Isolation 隔离性、Durability 持久性) 事务可能存在的问题可能出现的问题:脏读(dirty read)、幻读(phantom read)、不可重复读(non-repeatable read); 脏读:一个事务里出现了其他事务未提交的数据 不可重复读: 一个事务里两次读取的数据不一致(其他事务在两次读取数值之间提交了变更) 幻读: 不可重复读和幻读的区别:侧重点不同,不可重复读描述的侧重点是修改操作,而幻读描述的侧重点是添加和删除操作。 引用:保姆级教程,终于搞懂脏读、幻读和不可重复读了! 事务隔离级别隔离级别:读未提交(read uncommitted)、读已提交(read committed)、可重复读(repeatable...
6 MySQL日志系统
说明MySQL写数据的时候需要用到日志记录,它不会马上写数据到磁盘,而是在空闲的时候记录 redo log(重做日志)和 binlog(归档日志)。 引用 redologredolog 是引擎层日志,只有Innodb有 可以类比 酒馆赊酒、记账流程:先记录在粉板上,然后空闲或记录满的时候再记录在记录到账单中。 如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。为了解决这个问题,MySQL 采用了先写到日志中,再写磁盘。 具体来说,当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log(粉板)里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做,这就像打烊以后掌柜做的事。 为了解决redolog被写满的情况(粉板被写满了,则需要先记录在清空粉板),redolog 配置环形记录区,如下 write_pos 是当前写数据的位置checkpoint...
8 MySQL索引
索引类型索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,所以这里也就引入了索引模型的概念。可以用于提高读写效率的数据结构很多,这里我先给你介绍三种常见、也比较简单的数据结构,它们分别是哈希表、有序数组和搜索树。 哈希表哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的键即 key,就可以找到其对应的值即 Value不可避免地,多个 key 值经过哈希函数的换算,会出现同一个值的情况。处理这种情况的一种方法是,拉出一个链表。哈希表这种结构适用于只有等值查询的场景。比如 Memcached 及其他一些 NoSQL 引擎 有序数组而有序数组在等值查询和范围查询场景中的性能好有序数组索引只适用于静态存储引擎。比如你要保存的是 2017 年某个城市的所有人口信息,这类不会再修改的数据。 二叉搜索树 二叉搜索树的特点是:父节点左子树所有结点的值小于父节点的值,右子树所有结点的值大于父节点的值。这样如果你要查 ID_card_n2 的话,按照图中的搜索顺序就是按照 UserA -> UserC -> UserF -> User2...
Classloader加载外部jar
1. 问题项目中依赖一个Jar,同时有一个地方又依赖这个Jar的早期版本的某方法或者某类等,如果不依赖上这个早期版本的话可能造成代码错误,调用不到指定的方法;但是如果依赖了这个早期版本,两个版本都在项目中大概率会造成无法启动,冲突;为了解决这个问题,我们便需要将局部地方依赖的早期jar作为局部使用的依赖传入项目供使用这需要知道ClassLoader的工作原理并正确的加载 如我项目中调用一个早期版本的Test1类 123<groupId>com.kewen.demo</groupId><artifactId>D0-Simple</artifactId><version>1.0-SNAPSHOT</version> 123456public class Test1 { public void hello(String a1,String a2){ System.out.printf("a1+a2 = "+a1+a2); //处理逻辑 ...
阿里云免费证书申请配置
申请免费证书现在免费证书只能申请3个月了,以前是一年,过期了就要重新申请 进入阿里云控制面板,左上角菜单点开,在搜索框中搜索数字证书管理服务(SSL证书) 点击ssl证书 点击免费证书 点击立即购买(这里图片位置框错了,应该购买) 购买之后便有了20个证书了 创建证书 SSL证书页面选中免费证书,就可以创建证书了,我直接用的阿里云的域名,不知道其它的有没有进一步需要处理的 创建完成后收到一个提示等待(这里可别上了当,还需要执行下一步操作的,别等) 回到控制台,查看状态那里的感叹号,点击查看进度继续验证 到第2步的时候需要在域名解析处配置给定的TXT类型解析,如下图 域名解析处配置TXT解析,如下,文本内容则是第二步的值 正常的话完成验证后就收到短信了,成功
github访问不了解决办法
github访问不了遇到的问题是github页面可以访问,但是通过git方法无法访问,且不能ping通即使挂了代理也一样 解决办法 点击下面网址 https://sites.ipaddress.com 在右上角方框内输入github.com 此时出现一大堆没有用的东西,一直拉到 DNS Resource Records这里,查看A Record记录 将电脑中hosts记录增加 140.82.113.4 github.com我自己是用的火绒,很方便的就可以修改 试一下ping或者git clone
群晖docker安装vaultwarden
1. 拉取镜像vaultwarden/server 2. 配置容器 点击映像,运行vaultwarden/server 端口号映射3012和80端口(如果配置失败报端口已占用,那么还需要修改配置中的ROCEKT_PORT即web端口) 存储主要是映射/data目录,自己也映射了/config,目前貌似没用 可选环境配置 -e WEBSOCKET_ENABLED=true:启用WebSocket支持; -e SIGNUPS_ALLOWED=false:禁止用户自行注册新账户; -e WEB_VAULT_ENABLED=true: 启用web支持 -e DOMAIN=https://vault.moutai.com.cn:设置Vaultwarden的域名;可以不用 -e ADMIN_TOKEN=eMEt*W4ay7:设置管理员令牌(密码)不设置进不了管理员界面; -e DATABASE_URL=mysql://username:password@10.0.11.22:3306/vault:指定MySQL数据库的连接URL; 引用 网络改为host 3....
群晖套件源
第三方套件源矿神:https://spk7.imnks.com/