首页
友情链接
精美壁纸
给我留言
更多
关于我
Search
1
uniapp Click点击事件冲突解决
4,558 阅读
2
【插件】UNI APP 实现商米打印机功能支持T1,T2,V2机型
3,871 阅读
3
【测试可用】个人码免签支付系统源码/免签支付系统/微信支付平台
1,974 阅读
4
Java Validation参数校验注解使用
1,230 阅读
5
windows10下docker:给已存在的容器添加端口映射的方法
1,219 阅读
Java
Spring Boot
Spring Mvc
Java基础
进阶知识
前端
uniapp
小程序/公众号
JavaScript
HTML/CSS
Vue
PHP
开源软件
商城
营销工具
开发工具
视频/教程
Discuz主题/插件
typecho主题/插件
SEO杂谈
数据库
MongoDB
MySQL
Redis
单片机
概念说明
电路相关
Python
devops
docker
k8s
linux
职场杂谈
登录
/
注册
Search
标签搜索
python
mysql
人人商城
php
java
docker
typecho
插件
微擎
seo
spring boot
discuz
队列
uni-app
phpcms
教程视频
开源系统
源码
工具
css
哈根达斯
累计撰写
100
篇文章
累计收到
154
条评论
首页
栏目
Java
Spring Boot
Spring Mvc
Java基础
进阶知识
前端
uniapp
小程序/公众号
JavaScript
HTML/CSS
Vue
PHP
开源软件
商城
营销工具
开发工具
视频/教程
Discuz主题/插件
typecho主题/插件
SEO杂谈
数据库
MongoDB
MySQL
Redis
单片机
概念说明
电路相关
Python
devops
docker
k8s
linux
职场杂谈
页面
友情链接
精美壁纸
给我留言
关于我
搜索到
8
篇与
mysql
的结果
2023-02-02
MySQL磁盘数据页的存储结构
在深入研究索引之前,先来看看磁盘上的数据文件中的数据页的物理存储结构,因为 后续研究索引的物理存储结构以及使用原理的时候,都是跟数据页的物理存储结构是有很大关联的。数据库最终所有的数据(包括建的各种表以及表里的数据)都是要存放在磁上的文件里的,然后在文件里存放的物理格式就是数据页,那么大量的数据页在磁盘文件里是怎么存储的呢?大量的数据页是按顺序一页一页存放的,然后两两相邻的数据页之间会采用 双向链表的格式互相引用,大致看起来如下图所示。这个图在磁盘文件里到底是怎么弄出来的啊? 其实一个数据页在磁盘文件里就是一段数据,可能是二进制或者别的特殊格式的数据,然后数据页里包 含两个指针,一个指针指向自己上一个数据页的物理地址,一个指针指向自己下一个数据页的物理地 址,大概可以认为类似下面这样。一个数据页内部会存储一行一行的数据,也就是平时在一个表里插入的一行一行的数据就会存 储在数据页里,然后数据页里的每一行数据都会按照主键大小进行排序存储,同时每一行数据都有指针 指向下一行数据的位置,组成单向链表,如下图。每个数据页里都会有一个页目录,里面根据数据行的主键存放了一个目录,同时数据行是被分散存 储到不同的槽位里去的,所以实际上每个数据页的目录里,就是这个页里每个主键跟所在槽位的映射关 系,如下图所示。Q:没有索引的时候,是如何查找数据的?A:假设根据主键查找一条数据,而且假设那个表总共就一个数据页,那么就太简单了!首先到数据页的页目录里根据主键进行二分查找,找到主键对应的槽位,然后去槽位里遍历槽位里每一行数据,就能快速找到那个主键对应的数据了。A:如果不跟据主键找的话,那就没办法使用主键的那种页目录来二分查找的,只能进入到数据页里,根据单向链 表依次遍历查找数据了,这就性能很差了。如果有很多个数据页的话,如果没有索引,无论是根据主键还是非主键查询都性能差因为如果第一个数据页里没有想要的数据,就得从第二个数据页里找,这似乎就是全表扫描了。而且数据页都是加载到buffer pool里了,占内存。最坏的情况下,得把所有数据页里的每条数据都得遍历一遍,才能找到需要的那条数据,那条数据在最后一个数据页的最后面存着,这就是全表扫描了!
2023年02月02日
120 阅读
0 评论
0 点赞
2022-12-30
Mysql数据表生成文档表结构,导出并生成word文档的方法
因为项目需要编写库表结构word文档,需要交付验收,下面给大家介绍一种我用的方式步骤一:使用sql生成表结构数据SELECT ORDINAL_POSITION 序号, COLUMN_NAME 列名, COLUMN_TYPE 数据类型, -- COLUMN_DEFAULT 默认值, (CASE IS_NULLABLE WHEN 'NO' THEN '否' WHEN 'YES' THEN '是' ELSE '' END) 允许为空, COLUMN_KEY 主键, COLUMN_COMMENT 注释 FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA='dbname' -- 库名 AND table_name='table_demo' -- 表明步骤二:使用Navicat Premium工具导出Excle我们将查询成功的数据导出Excel,并将内容复制到doc中即可有其它更好方式的可以推荐下哦,虽然这个方法步骤有点多,但是总比一个个复制要好些,写代码动手能力比较强的伙伴,可以考虑使用上面的sql查询代码来生成表格,然后用代码生成word文档,navicat premium破解版获取点击: navicat premium破解版下载
2022年12月30日
513 阅读
0 评论
0 点赞
2022-04-18
linux 定时任务备份至七牛
场景生产数据定时备份的意义大家应该都是知道的,很多人备份只是备份到了本地,但是也会存在一定的隐患,比如客户一直不用系统,我们也不去注意,哪天服务器到期了过了几个月客户突然要用方向数据没了。。。使用到的工具主要看大家的服务器的安装情况,如果是安装了宝塔面板这种,有定时任务工具直接使用,而且也有免费的七牛云插件,设置起来超级简单,如果安装宝塔的不懂设置可以评论区留言,实在是太简单了本文就不讲了,说实话是会点鼠标就可以弄了基于linux系统内备份大概的意思就是你的mysql是自己用命令安装的。七牛平台shell脚本linux定时任务需要七牛云账号,用户需要自己创建,或者其它用其它云盘原理都是一样的(一)下载qshell工具并安装设置1. 工具下载说明文档与下载地址: 七牛工具下载 工具是七牛官方提供的,下载工具后传到服务器,主要看自己服务器的架构,我的服务是linux x86的,根据自己服务器去下载,把文件上传至服务目录/home/backup/shell 目录。并赋予权限chomd +x qshell2. 登录设置七牛云账号注意需要在工具目录下执行,如果需要任何目录执行需要添加环境变量可查看官方文档说明,更多说明以官方最新文档为准# 参数说明可自己根据情况修改 #ak :官方获取 #sk: 官方平台获取 #name : 任意用户名,不是七牛的账户,比如 db-test qshell account <ak> <sk> <name> #完成命令参考(二) shell编辑脚本在目录/home/backup/shell 下新建脚本backup.sh#!/bin/sh # mysql data backup script # # use mysqldump --help,get more detail. # 需要设置环境变量,crond中默认读取不到我们的一些环境 PATH=$PATH:/home/backup/shell export PATH dbname=<dbname> #备份文件目录 bakDir=/home/backup/sql logFile=/home/backup/backup.log month=` date +%Y%m ` # 七牛的备份目录,当前按数据库为一级目录,月份为2级目录如:dbname/202004/****.gz.sql qiniuPath=typecho_joe_theme/$month # 七牛空间名 qiniuBucket=<bucketName> datetime=`date +%Y%m%d%H%M%S` keepDay=7 echo "-------------------------------------------" >> $logFile echo $(date +"%y-%m-%d %H:%M:%S") >> $logFile echo "--------------------------" >> $logFile cd $bakDir bakFile=$dbname.$datetime.sql.gz # yum,apt-get,源码编译安装释放 mysqldump -u$user -p$password $dbname | gzip > $bakFile #docker安装执行方式,需要修改<dbname>为自己的数据库 #docker exec mysql5.6 sh -c 'exec mysqldump <dbname> -uroot -p"$MYSQL_ROOT_PASSWORD"' | gzip > $bakDir/$bakFile echo "数据库 [$dbname] 备份完成" >> $logFile echo "$bakDir/$bakFile" >> $logFile echo "开始上传备份文件至七牛云存储" >> $logFile #七牛上传命令,分片上传适用大文件,当前使用低频储存,具体命令可以查看文档 qshell rput $qiniuBucket $qiniuPath/$bakFile $bakDir/$bakFile --storage 1 | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" >> $logFile 2>&1 echo "删除${keepDay}天前的备份文件" >> $logFile find $bakDir -ctime +$keepDay >> $logFile find $bakDir -ctime +$keepDay -exec rm -rf {} \; echo " " >> $logFile echo " " >> $logFile 参考文献:qshell命令说明rput 操作说明(二) 添加定时任务需要使用到cron命令,本文不展开讲这个,需要了解的可以参考以下文献文献一: crontab配置方法文献二: Linux系统crontab定时任务的配置概要与常见问题文献三: crontab 与 环境变量下面直说具体操作,执行器需要先检查crond的状态service crond status,如果是在运行中就没什么问题编辑定时任务#修改当前用户定时任务 crontab -e 添加任务脚本,操作和vi是一样的# 每天凌晨3点执行脚本, 0 3 * * * /home/backup/backup.sh # 如果是测试可以用以下的脚本,意思是没2分钟执行一次,看看有没有成本 */2 * * * * /home/backup/backup.sh查看定时任务#查看当前任务情况 crondtab -l(三) 完成设置完成以后最好要检查下是否成功,建议先设置按分钟执行备份看看,如果中间有什么问题要多百度,一般都可以搜得到
2022年04月18日
135 阅读
0 评论
0 点赞
2022-04-17
【MySql】Specified key was too long; max key length is 767 bytes的解决方案
问题背景由于业务需要,需要做数据库迁移,迁移由5.7版本得mysql到现有的mysql5.6版本,主要是因为更innodb_large_prefix 参数有关由于MySQL的InnoDB引擎表索引字段长度的限制为767字节,因此对于多字节字符集的大字段或者多字段组合,创建索引时会出现该问题。在5.6中innodb_large_prefix 默认关闭,在5.7中默认开启。在5.6中默认为 offSpecified key was too long; max key length is 767 bytes原来是主键的长度太长,最大长度仅支持767字节,注意,这里的是字节。那么,我定义一个主键是varchar(500)的字段,不管我使用utf8编码,那么500字符长度将占用5003的字节长度(utf8最多支持3个字节长度);或是我使用utf8mb4编码,那么500字符长度将占用5004的字节长度(utf8mb4最多支持4个字节长度),都大大超过了767字节。如何去解决呢?先检查一下是不是数据库被限制了索引的大小,查询innodb_large_prefix这个字段,这个字段限制了索引前缀的大小。关闭此限制后,索引前缀的大小将可以达到3072字节。方法1:修改全局变量修改全局变量 ,当mysql重启后将失效,建议直接修改配置文件SHOW variables like 'innodb_large_prefix';如果查询的值是OFF的话 执行下面命令SET GLOBAL INNODB_LARGE_PREFIX = ON;另外,innodb_large_prefix这个属性在5.6上是默认关闭的,而在5.7上是默认开启的。执行完了 之后 还得查看当前的innodb_file_format引擎格式类型是不是BARRACUDA执行SHOW variables like 'innodb_file_format';如果不是的话则需要修改SET GLOBAL innodb_file_format = BARRACUDA;方法二:修改配置[mysqld] innodb_large_prefix = on innodb_file_format = BARRACUDA最后,创建表的时候,还需要指定表的 row format 格式为 Dynamic 或者 Compressed,如下示例:CREATE TABLE test( name varchar(500) CHARACTER SET utf8 COLLATE utf8_bin, PRIMARY KEY (`name `) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;版权声明:本文为CSDN博主「SunAlwaysOnline」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。参考原文链接:https://blog.csdn.net/qq_33591903/article/details/103927547
2022年04月17日
353 阅读
0 评论
0 点赞
2021-07-22
mysql位置距离排序功能实现
再实际的开发中,我们经常需要使用地理经纬度信息来做排序,比如查找附近的门店,或查找离我最近的人的需求等。可直接套用下方mysql查询语句进行数据查询排序sql中latitude为数据库表中的纬度,longitude代表经度{latitude} 代表传入的纬度,{latitude} 代表传入的经度,主要为用户当前位置信息,查询获得结果 distance 单位为米SELECT *, (round(6367000 * 2 * asin(sqrt(pow(sin(((latitude * pi()) / 180 - (${latitude} * pi()) / 180) / 2), 2) + cos((${latitude} * pi()) / 180) * cos((latitude * pi()) / 180) * pow(sin(((longitude * pi()) / 180 - (${longitude} * pi()) / 180) / 2), 2))))) AS distance FROM ec_store WHERE is_show = 1 and is_del = 0 ORDER BY distance asc
2021年07月22日
270 阅读
0 评论
1 点赞
1
2