首页
关于
我的朋友们
Search
1
R探长 甲骨文云开机脚本
182 阅读
2
甲骨文云救砖流程
91 阅读
3
centos8更新yum源,其实很简单
69 阅读
4
Centos、Debia和Ubuntu防火墙设置相关
63 阅读
5
群晖系列文——总览
57 阅读
默认分类
登录
Search
Sky
累计撰写
10
篇文章
累计收到
1
条评论
首页
栏目
默认分类
页面
关于
我的朋友们
搜索到
10
篇与
的结果
2023-06-13
centos8更新yum源,其实很简单
用过Linux的朋友都知道,YUM安装软件时多么的便捷,常用软件有缺失的话,不管啥软件,都是固定的几条命令就能搞定,何其方便。YUM(全称为 Yellow dog Updater, Modified)是CentOS中的Shell前端软件包管理器。YUM是基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。大家还知道,Centos8于2021年年底停止了服务,而通过官方的ISO安装好的系统里面还是官方的YUM源。YUM源不可用,通过YUM安装软件已经不可行,不能说所有软件都通过下载包,编译参数,源码安装吧。不过官方虽然停止了服务,国内的源还是正常提供服务的,比方说网易源、中科大源、腾讯源、阿里源等等。相比较官方的源来说,国内网络更快。更改YUM源非常简单,不过为了自己工作的方便,同事也为了朋友们查找,本文就记录一下更改YUM源为阿里源,其实改成哪家的都是一样的操作。更改YUM源具体操作进入系统YUM源的目录,删除无用的源文件。cd /etc/yum.repos.d ll总用量 48-rw-r--r--. 1 root root 719 11月 10 2020 CentOS-Linux-AppStream.repo -rw-r--r--. 1 root root 704 11月 10 2020 CentOS-Linux-BaseOS.repo -rw-r--r--. 1 root root 1130 11月 10 2020 CentOS-Linux-ContinuousRelease.repo -rw-r--r--. 1 root root 318 11月 10 2020 CentOS-Linux-Debuginfo.repo -rw-r--r--. 1 root root 732 11月 10 2020 CentOS-Linux-Devel.repo -rw-r--r--. 1 root root 704 11月 10 2020 CentOS-Linux-Extras.repo -rw-r--r--. 1 root root 719 11月 10 2020 CentOS-Linux-FastTrack.repo -rw-r--r--. 1 root root 740 11月 10 2020 CentOS-Linux-HighAvailability.repo -rw-r--r--. 1 root root 693 11月 10 2020 CentOS-Linux-Media.repo -rw-r--r--. 1 root root 706 11月 10 2020 CentOS-Linux-Plus.repo -rw-r--r--. 1 root root 724 11月 10 2020 CentOS-Linux-PowerTools.repo -rw-r--r--. 1 root root 898 11月 10 2020 CentOS-Linux-Sources.repoYUM源的目录就是 /etc/yum.repos.d,里面是系统自带的YUM源文件。正常的教程是建议大家将这些文件做个备份,比方说在所有文件中加上.backup后缀呀什么的,我是直接将所有文件都删了,反正这些官方源已经没用了。就算后面要的话,随便哪台服务器上再找回来就可以了。下载新的YUM源文件到对应目录本文我们用的是阿里源,阿里源的网址是:https://mirrors.aliyun.com/repo/,下面的截屏可以看到各个版本源的文件名,直接使用wget下载就可以了。下载的命令编写为:wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo后面好直接复制使用。下载过程如下:wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo--2023-01-14 20:25:14-- https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo 正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 180.101.198.240, 180.101.198.241, 180.101.198.242, ... 正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|180.101.198.240|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:2495 (2.4K) [application/octet-stream] 正在保存至: “/etc/yum.repos.d/CentOS-Base.repo” /etc/yum.repos.d/Ce 100%[===================>] 2.44K --.-KB/s 用时 0s 2023-01-14 20:25:14 (67.4 MB/s) - 已保存 “/etc/yum.repos.d/CentOS-Base.repo” [2495/2495])ll 总用量 8-rw-r--r--. 1 root root 2495 8月 4 15:04 CentOS-Base.repo -rw-r--r--. 1 root root 318 11月 10 2020 CentOS-Linux-Debuginfo.repo更新cache,YUM源更新完成两条大家都熟悉的命令,更新一下YUM cache,搞定。yum clean all yum makecache运行结果如下:yum clean all0 文件已删除yum makecache CentOS-8.5.2111 - Base - mirrors.aliyun.com 2.6 MB/s | 4.6 MB 00:01 CentOS-8.5.2111 - Extras - mirrors.aliyun.com 87 kB/s | 10 kB 00:00 CentOS-8.5.2111 - AppStream - mirrors.aliyun.co 2.8 MB/s | 8.4 MB 00:03 元数据缓存已建立。测试安装软件使用yum -y install xxx命令测试安装一个软件,安装完成表示yum源安装成功
2023年06月13日
69 阅读
0 评论
0 点赞
2023-06-08
SQL性能优化的47个小技巧,果断收藏!
1、先了解MySQL的执行过程了解了MySQL的执行过程,我们才知道如何进行sql优化。客户端发送一条查询语句到服务器;服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据;未命中缓存后,MySQL通过关键字将SQL语句进行解析,并生成一颗对应的解析树,MySQL解析器将使用MySQL语法进行验证和解析。例如,验证是否使用了错误的关键字,或者关键字的使用是否正确;预处理是根据一些MySQL规则检查解析树是否合理,比如检查表和列是否存在,还会解析名字和别名,然后预处理器会验证权限;根据执行计划查询执行引擎,调用API接口调用存储引擎来查询数据;将结果返回客户端,并进行缓存;图片2、数据库常见规范所有数据库对象名称必须使用小写字母并用下划线分割;所有数据库对象名称禁止使用mysql保留关键字;数据库对象的命名要能做到见名识意,并且最后不要超过32个字符;临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀;所有存储相同数据的列名和列类型必须一致;3、所有表必须使用Innodb存储引擎没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)。Innodb 支持事务,支持行级锁,更好的恢复性,高并发下性能更好。4、每个Innodb表必须有个主键Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种。Innodb是按照主键索引的顺序来组织表的不要使用更新频繁的列作为主键,不适用多列主键;不要使用UUID、MD5、HASH、字符串列作为主键(无法保证数据的顺序增长);主键建议使用自增ID值;5、数据库和表的字符集统一使用UTF8兼容性更好,统一字符集可以避免由于字符集转换产生的乱码,不同的字符集进行比较前需要进行转换会造成索引失效,如果数据库中有存储emoji表情的需要,字符集需要采用utf8mb4字符集。6、查询SQL尽量不要使用select *,而是具体字段select *的弊端:增加很多不必要的消耗,比如CPU、IO、内存、网络带宽;增加了使用覆盖索引的可能性;增加了回表的可能性;当表结构发生变化时,前端也需要更改;查询效率低;7、避免在where子句中使用 or 来连接条件使用or可能会使索引失效,从而全表扫描;对于or没有索引的salary这种情况,假设它走了id的索引,但是走到salary查询条件时,它还得全表扫描;也就是说整个过程需要三步:全表扫描+索引扫描+合并。如果它一开始就走全表扫描,直接一遍扫描就搞定;虽然mysql是有优化器的,处于效率与成本考虑,遇到or条件,索引还是可能失效的;8、尽量使用数值替代字符串类型因为引擎在处理查询和连接时会逐个比较字符串中每一个字符;而对于数字型而言只需要比较一次就够了;字符会降低查询和连接的性能,并会增加存储开销;9、使用varchar代替charvarchar变长字段按数据内容实际长度存储,存储空间小,可以节省存储空间;char按声明大小存储,不足补空格;其次对于查询来说,在一个相对较小的字段内搜索,效率更高;10、财务、银行相关的金额字段必须使用decimal类型非精准浮点:float,double精准浮点:decimalDecimal类型为精准浮点数,在计算时不会丢失精度;占用空间由定义的宽度决定,每4个字节可以存储9位数字,并且小数点要占用一个字节;可用于存储比bigint更大的整型数据;11、避免使用ENUM类型修改ENUM值需要使用ALTER语句;ENUM类型的ORDER BY操作效率低,需要额外操作;禁止使用数值作为ENUM的枚举值;12、去重distinct过滤字段要少带distinct的语句占用cpu时间高于不带distinct的语句当查询很多字段时,如果使用distinct,数据库引擎就会对数据进行比较,过滤掉重复数据然而这个比较、过滤的过程会占用系统资源,如cpu时间13、where中使用默认值代替null并不是说使用了is null或者 is not null就会不走索引了,这个跟mysql版本以及查询成本都有关;如果mysql优化器发现,走索引比不走索引成本还要高,就会放弃索引,这些条件 !=,<>,is null,is not null经常被认为让索引失效;其实是因为一般情况下,查询的成本高,优化器自动放弃索引的;如果把null值,换成默认值,很多时候让走索引成为可能,同时,表达意思也相对清晰一点;14、避免在where子句中使用!=或<>操作符使用!=和<>很可能会让索引失效应尽量避免在where子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描实现业务优先,实在没办法,就只能使用,并不是不能使用15、inner join 、left join、right join,优先使用inner join三种连接如果结果相同,优先使用inner join,如果使用left join左边表尽量小。inner join 内连接,只保留两张表中完全匹配的结果集;left join会返回左表所有的行,即使在右表中没有匹配的记录;right join会返回右表所有的行,即使在左表中没有匹配的记录;为什么?如果inner join是等值连接,返回的行数比较少,所以性能相对会好一点;使用了左连接,左边表数据结果尽量小,条件尽量放到左边处理,意味着返回的行数可能比较少;这是mysql优化原则,就是小表驱动大表,小的数据集驱动大的数据集,从而让性能更优;16、提高group by语句的效率1、反例先分组,再过滤 select job, avg(salary) from employee group by job having job ='develop' or job = 'test';2、正例先过滤,后分组select job,avg(salary) from employee where job ='develop' or job = 'test' group by job;3、理由可以在执行到该语句前,把不需要的记录过滤掉17、清空表时优先使用truncatetruncate table在功能上与不带 where子句的 delete语句相同:二者均删除表中的全部行。但 truncate table比 delete速度快,且使用的系统和事务日志资源少。delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。truncate table删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 drop table语句。对于由 foreign key约束引用的表,不能使用 truncate table,而应使用不带 where子句的 DELETE 语句。由于 truncate table不记录在日志中,所以它不能激活触发器。truncate table不能用于参与了索引视图的表。18、操作delete或者update语句,加个limit或者循环分批次删除(1)降低写错SQL的代价清空表数据可不是小事情,一个手抖全没了,删库跑路?如果加limit,删错也只是丢失部分数据,可以通过binlog日志快速恢复的。(2)SQL效率很可能更高SQL中加了limit 1,如果第一条就命中目标return, 没有limit的话,还会继续执行扫描表。(3)避免长事务delete执行时,如果age加了索引,MySQL会将所有相关的行加写锁和间隙锁,所有执行相关行会被锁住,如果删除数量大,会直接影响相关业务无法使用。(4)数据量大的话,容易把CPU打满如果你删除数据量很大时,不加 limit限制一下记录数,容易把cpu打满,导致越删越慢。(5)锁表一次性删除太多数据,可能造成锁表,会有lock wait timeout exceed的错误,所以建议分批操作。19、UNION操作符UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:select username,tel from user union select departmentname from department这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。推荐方案:采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。20、SQL语句中IN包含的字段不宜过多MySQL的IN中的常量全部存储在一个数组中,这个数组是排序的。如果值过多,产生的消耗也是比较大的。如果是连续的数字,可以使用between代替,或者使用连接查询替换。另外,搜索公众号Linux就该这样学后台回复“猴子”,获取一份惊喜礼包。21、批量插入性能提升(1)多条提交INSERT INTO user (id,username) VALUES(1,'哪吒编程'); INSERT INTO user (id,username) VALUES(2,'妲己');(2)批量提交INSERT INTO user (id,username) VALUES(1,'哪吒编程'),(2,'妲己');默认新增SQL有事务控制,导致每条都需要事务开启和事务提交,而批量处理是一次事务开启和提交,效率提升明显,达到一定量级,效果显著,平时看不出来。22、表连接不宜太多,索引不宜太多,一般5个以内(1)表连接不宜太多,一般5个以内关联的表个数越多,编译的时间和开销也就越大每次关联内存中都生成一个临时表应该把连接表拆开成较小的几个执行,可读性更高如果一定需要连接很多表才能得到数据,那么意味着这是个糟糕的设计了阿里规范中,建议多表联查三张表以下(2)索引不宜太多,一般5个以内索引并不是越多越好,虽其提高了查询的效率,但却会降低插入和更新的效率;索引可以理解为一个就是一张表,其可以存储数据,其数据就要占空间;索引表的数据是排序的,排序也是要花时间的;insert或update时有可能会重建索引,如果数据量巨大,重建将进行记录的重新排序,所以建索引需要慎重考虑,视具体情况来定;一个表的索引数最好不要超过5个,若太多需要考虑一些索引是否有存在的必要;23、禁止给表中的每一列都建立单独的索引真有这么干的,我也是醉了。24、如何选择索引列的顺序建立索引的目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少的数据,则从磁盘中读入的数据也就越少。区分度最高的放在联合索引的最左侧(区分度=列中不同值的数量/列的总行数)。尽量把字段长度小的列放在联合索引的最左侧(因为字段长度越小,一页能存储的数据量越大,IO性能也就越好)。使用最频繁的列放到联合索引的左侧(这样可以比较少的建立一些索引)。25、对于频繁的查询优先考虑使用覆盖索引覆盖索引:就是包含了所有查询字段(where,select,ordery by,group by包含的字段)的索引。覆盖索引的好处:(1)避免Innodb表进行索引的二次查询Innodb是以聚集索引的顺序来存储的,对于Innodb来说,二级索引在叶子节点中所保存的是行的主键信息,如果是用二级索引查询数据的话,在查找到相应的键值后,还要通过主键进行二次查询才能获取我们真实所需要的数据。而在覆盖索引中,二级索引的键值中可以获取所有的数据,避免了对主键的二次查询 ,减少了IO操作,提升了查询效率。(2)可以把随机IO变成顺序IO加快查询效率由于覆盖索引是按键值的顺序存储的,对于IO密集型的范围查找来说,对比随机从磁盘读取每一行的数据IO要少的多,因此利用覆盖索引在访问时也可以把磁盘的随机读取的IO转变成索引查找的顺序IO。26、建议使用预编译语句进行数据库操作预编译语句可以重复使用这些计划,减少SQL编译所需要的时间,还可以解决动态SQL所带来的SQL注入的问题。只传参数,比传递SQL语句更高效。相同语句可以一次解析,多次使用,提高处理效率。27、避免产生大事务操作大批量修改数据,一定是在一个事务中进行的,这就会造成表中大批量数据进行锁定,从而导致大量的阻塞,阻塞会对MySQL的性能产生非常大的影响。特别是长时间的阻塞会占满所有数据库的可用连接,这会使生产环境中的其他应用无法连接到数据库,因此一定要注意大批量写操作要进行分批。28、避免在索引列上使用内置函数使用索引列上内置函数,索引失效。29、组合索引排序时应按照组合索引中各列的顺序进行排序,即使索引中只有一个列是要排序的,否则排序性能会比较差。create index IDX_USERNAME_TEL on user(deptid,position,createtime); select username,tel from user where deptid= 1 and position = 'java开发' order by deptid,position,createtime desc; 实际上只是查询出符合 deptid= 1 and position = 'java开发'条件的记录并按createtime降序排序,但写成order by createtime desc性能较差。30、复合索引最左特性(1)创建复合索引ALTER TABLE employee ADD INDEX idx_name_salary (name,salary)(2)满足复合索引的最左特性,哪怕只是部分,复合索引生效SELECT * FROM employee WHERE NAME='哪吒编程'(3)没有出现左边的字段,则不满足最左特性,索引失效SELECT * FROM employee WHERE salary=5000(4)复合索引全使用,按左侧顺序出现 name,salary,索引生效SELECT * FROM employee WHERE NAME='哪吒编程' AND salary=5000(5)虽然违背了最左特性,但MySQL执行SQL时会进行优化,底层进行颠倒优化SELECT * FROM employee WHERE salary=5000 AND NAME='哪吒编程'(6)理由复合索引也称为联合索引,当我们创建一个联合索引的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则。联合索引不满足最左原则,索引一般会失效。31、必要时可以使用force index来强制查询走某个索引有的时候MySQL优化器采取它认为合适的索引来检索SQL语句,但是可能它所采用的索引并不是我们想要的。这时就可以采用forceindex来强制优化器使用我们制定的索引。32、优化like语句模糊查询,程序员最喜欢的就是使用like,但是like很可能让你的索引失效。首先尽量避免模糊查询,如果必须使用,不采用全模糊查询,也应尽量采用右模糊查询, 即like ‘…%’,是会使用索引的;左模糊like ‘%...’无法直接使用索引,但可以利用reverse + function index的形式,变化成 like ‘…%’;全模糊查询是无法优化的,一定要使用的话建议使用搜索引擎。33、统一SQL语句的写法对于以下两句SQL语句, 程序员认为是相同的,数据库查询优化器认为是不同的。select * from user; select * From USER;这都是很常见的写法,也很少有人会注意,就是表名大小写不一样而已。然而,查询解析器认为这是两个不同的SQL语句,要解析两次,生成两个不同的执行计划,作为一名严谨的Java开发工程师,应该保证两个一样的SQL语句,不管在任何地方都是一样的。34、不要把SQL语句写得太复杂经常听到有人吹牛逼,我写了一个800行的SQL语句,逻辑感超强,我们还开会进行了SQL讲解,大家都投来了崇拜的目光。。。一般来说,嵌套子查询、或者是3张表关联查询还是比较常见的,但是,如果超过3层嵌套的话,查询优化器很容易给出错误的执行计划,影响SQL效率。SQL执行计划是可以被重用的,SQL越简单,被重用的概率越大,生成执行计划也是很耗时的。35、将大的DELETE,UPDATE、INSERT 查询变成多个小查询能写一个几十行、几百行的SQL语句是不是显得逼格很高?然而,为了达到更好的性能以及更好的数据控制,你可以将他们变成多个小查询。36、关于临时表避免频繁创建和删除临时表,以减少系统表资源的消耗;在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert;如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除。先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。37、使用explain分析你SQL执行计划(1)typesystem:表仅有一行,基本用不到;const:表最多一行数据配合,主键查询时触发较多;eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型;ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取;range:只检索给定范围的行,使用一个索引来选择行。当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range;index:该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小;all:全表扫描;性能排名:system > const > eq_ref > ref > range > index > all。实际sql优化中,最后达到ref或range级别。(2)Extra常用关键字Using index:只从索引树中获取信息,而不需要回表查询;Using where:WHERE子句用于限制哪一个行匹配下一个表或发送到客户。除非你专门从表中索取或检查所有行,如果Extra值不为Using where并且表联接类型为ALL或index,查询可能会有一些错误。需要回表查询。Using temporary:mysql常建一个临时表来容纳结果,典型情况如查询包含可以按不同情况列出列的GROUP BY和ORDER BY子句时;38、读写分离与分库分表当数据量达到一定的数量之后,限制数据库存储性能的就不再是数据库层面的优化就能够解决的;这个时候往往采用的是读写分离与分库分表同时也会结合缓存一起使用,而这个时候数据库层面的优化只是基础。读写分离适用于较小一些的数据量;分表适用于中等数据量;而分库与分表一般是结合着用,这就适用于大数据量的存储了,这也是现在大型互联网公司解决数据存储的方法之一。39、使用合理的分页方式以提高分页的效率select id,name from user limit 100000, 20使用上述SQL语句做分页的时候,随着表数据量的增加,直接使用limit语句会越来越慢。此时,可以通过取前一页的最大ID,以此为起点,再进行limit操作,效率提升显著。select id,name from user where id> 100000 limit 2040、尽量控制单表数据量的大小,建议控制在500万以内。500万并不是MySQL数据库的限制,过大会造成修改表结构,备份,恢复都会有很大的问题。可以用历史数据归档(应用于日志数据),分库分表(应用于业务数据)等手段来控制数据量大小。41、谨慎使用Mysql分区表分区表在物理上表现为多个文件,在逻辑上表现为一个表;谨慎选择分区键,跨分区查询效率可能更低;建议采用物理分表的方式管理大数据。42、尽量做到冷热数据分离,减小表的宽度Mysql限制每个表最多存储4096列,并且每一行数据的大小不能超过65535字节。减少磁盘IO,保证热数据的内存缓存命中率(表越宽,把表装载进内存缓冲池时所占用的内存也就越大,也会消耗更多的IO);更有效的利用缓存,避免读入无用的冷数据;经常一起使用的列放到一个表中(避免更多的关联操作)。43、禁止在表中建立预留字段预留字段的命名很难做到见名识义;预留字段无法确认存储的数据类型,所以无法选择合适的类型;对预留字段类型的修改,会对表进行锁定;44、禁止在数据库中存储图片,文件等大的二进制数据通常文件很大,会短时间内造成数据量快速增长,数据库进行数据库读取时,通常会进行大量的随机IO操作,文件很大时,IO操作很耗时。通常存储于文件服务器,数据库只存储文件地址信息。45、建议把BLOB或是TEXT列分离到单独的扩展表中Mysql内存临时表不支持TEXT、BLOB这样的大数据类型,如果查询中包含这样的数据,在排序等操作时,就不能使用内存临时表,必须使用磁盘临时表进行。而且对于这种数据,Mysql还是要进行二次查询,会使sql性能变得很差,但是不是说一定不能使用这样的数据类型。如果一定要使用,建议把BLOB或是TEXT列分离到单独的扩展表中,查询时一定不要使用select * 而只需要取出必要的列,不需要TEXT列的数据时不要对该列进行查询。46、TEXT或BLOB类型只能使用前缀索引因为MySQL对索引字段长度是有限制的,所以TEXT类型只能使用前缀索引,并且TEXT列上是不能有默认值的。MySql基础知识总结(SQL优化篇)47、一些其它优化方式(1)当只需要一条数据的时候,使用limit 1limit 1可以避免全表扫描,找到对应结果就不会再继续扫描了。(2)如果排序字段没有用到索引,就尽量少排序(3)所有表和字段都需要添加注释使用comment从句添加表和列的备注,从一开始就进行数据字典的维护。(4)SQL书写格式,关键字大小保持一致,使用缩进。(5)修改或删除重要数据前,要先备份。(6)很多时候用 exists 代替 in 是一个好的选择(7)where后面的字段,留意其数据类型的隐式转换。(8)尽量把所有列定义为NOT NULLNOT NULL列更节省空间,NULL列需要一个额外字节作为判断是否为 NULL的标志位。NULL列需要注意空指针问题,NULL列在计算和比较的时候,需要注意空指针问题。(9)伪删除设计(10)索引不适合建在有大量重复数据的字段上,比如性别,排序字段应创建索引(11)尽量避免使用游标因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
2023年06月08日
15 阅读
0 评论
0 点赞
2023-06-07
宝塔面板申请ssl证书报错 Invalid version. The only valid version for X509Req is 0
宝塔面板申请ssl证书报错 Invalid version. The only valid version for X509Req is 0.的原因是由于服务器端使用了不兼容的 OpenSSL 版本导致的,服务器端的X509Req 版本只支持 0,而宝塔这边默认的版本为2,目前有两种解决方案,当前为您采用的是第一种解决方案修复,目前已经可以成功申请证书,感谢您的理解与支持。1、修改/www/server/panel/class下面的acme_v2.py文件,搜索找到X509Req.set_version(2)代码段 ,将其改为X509Req.set_version(0) 2、服务器端升级对应的Openssl版本。(该方式升级前建议对服务器做一下快照备份)btpip install pyOpenSSL==22.1.0btpip install cffi==1.14然后重启面板服务(不用重启服务器,执行bt 1 重启面板服务加载新的配置即可)。
2023年06月07日
36 阅读
0 评论
0 点赞
2023-06-07
Linux VPS 全自动一键网络重装脚本AWS、甲骨文(一键DD脚本)
Linux VPS 一键自动DD安装Windows/CentOS/Debian本脚本支持 AWS服务器 甲骨文 DD系统之前写了一篇《萌咖一键DD纯净系统脚本(2021年8月最新版) CentOS/Debian/Ubuntu》,部分网友反馈,同样的情况下,有的人D成功了,有人却失败失联。诚然,萌咖的脚本在一些机型上确实存在不稳定的现象,但也存在一些网友命令写出错的情况。但不管怎么说萌咖脚本相对而言是比较好用的DD脚本。今天给大家再介绍个DD脚本,这个脚本也是基于萌咖脚本优化、开发的。但是DD过程基本上不需要自己编写,完全傻瓜式,可能更适合“小白”网友。更新说明:20220724:更新及增加大量系统镜像,41合1脚本,请注意看说明。20220703:新增自定义SSH端口(9-16)20220613:新版自定义密码支持特殊字符.!$@#&%20220428:修复MoeClub新版DD过程中卡住的BUG,修复Centos7下出现 Error! Not Found grub. 的错误提示,新增支持 xz 压缩格式的 DD 系统镜像包。20220406:CN系统镜像已失效,国内主机使用一键脚本1-25选项需要较长时间,推荐使用99的自定义系统镜像。20211120:更新MoeClub新版,依赖更少,支持原版自定义密码安装,体验版可能有Bug.20210909:支持debian11.20210511:发现很多人不知道怎么DD甲骨文,使用支持uefi的镜像包即可.脚本已添加3个甲骨文专用选项23-25.20210509:更新部分windows镜像,修正一处小问题.20210127:更换部分windows镜像.20210109:更新支持Ubuntu20.04安装,更新几个windows镜像.20200708:更新自动为CN主机使用国内镜像源.安装重装系统的前提组件:Debian/Ubuntu:apt-get install -y xz-utils openssl gawk file wget screen && screen -S os RedHat/CentOS:yum install -y xz openssl gawk file glibc-common wget screen && screen -S os 如果出现异常,请刷新Mirrors缓存或更换镜像源。RedHat/CentOS:yum makecache && yum update -y Debian/Ubuntu:apt update -y && apt dist-upgrade -y DD 命令: wget --no-check-certificate -O NewReinstall.sh https://git.io/newbetags && chmod a+x NewReinstall.sh && bash NewReinstall.sh 如为CN主机(部分主机商已不能使用),可能出现报错或不能下载脚本的问题,可执行以下命令开始安装.wget --no-check-certificate -O NewReinstall.sh https://cdn.jsdelivr.net/gh/fcurrk/reinstall@master/NewReinstall.sh && chmod a+x NewR 输入Y确认DD后主机自动获取IP,N则自行设置IP 输入N后会自动检测出主机现用IP,如果正确可以按Y确认使用,如不正确则按N自行按正确的输入。25合1的系统一键DD选择界面,输入99则使用自定义镜像。 以上系统密码不为默认密码的均为网络收集,如有疑虑使用自己的自定义镜像。41合1系统密码:1、CentOS 7.7 (已关闭防火墙及SELinux,默认密码Pwd@CentOS)2、CentOS 7 (默认密码cxthhhhh.com)3、CentOS 7 (支持ARM64、UEFI,默认密码cxthhhhh.com)4、CentOS 8 (默认密码cxthhhhh.com)5、Rocky 8 (默认密码cxthhhhh.com)6、Rocky 8 (支持UEFI,默认密码cxthhhhh.com)7、Rocky 8 (支持ARM64、UEFI,默认密码cxthhhhh.com)8、CentOS 9 (默认密码cxthhhhh.com)9、CentOS 6 (官方源原版,默认密码Minijer.com)10、Debian 11 (官方源原版,默认密码Minijer.com)11、Debian 10 (官方源原版,默认密码Minijer.com)12、Debian 9 (官方源原版,默认密码Minijer.com)13、Debian 8 (官方源原版,默认密码Minijer.com)14、Ubuntu 20.04 (官方源原版,默认密码Minijer.com)15、Ubuntu 18.04 (官方源原版,默认密码Minijer.com)16、Ubuntu 16.04 (官方源原版,默认密码Minijer.com)17、Windows Server 2022 (默认密码cxthhhhh.com)18、Windows Server 2022 (支持UEFI,默认密码cxthhhhh.com)19、Windows Server 2019 (默认密码cxthhhhh.com)20、Windows Server 2016 (默认密码cxthhhhh.com)21、Windows Server 2012 (默认密码cxthhhhh.com)22、Windows Server 2008 (默认密码cxthhhhh.com)23、Windows Server 2003 (默认密码cxthhhhh.com)24、Windows 10 LTSC (默认密码Teddysun.com)25、Windows 10 LTSC (支持UEFI,默认密码Teddysun.com)26、Windows 7 x86 Lite (默认密码nat.ee)27、Windows 7 x86 Lite (阿里云专用,默认密码nat.ee)28、Windows 7 x64 Lite (默认密码nat.ee)29、Windows 7 x64 Lite (支持UEFI,默认密码nat.ee)30、Windows 10 LTSC Lite (默认密码nat.ee)31、Windows 10 LTSC Lite (阿里云专用,默认密码nat.ee)32、Windows 10 LTSC Lite (支持UEFI,默认密码nat.ee)33、Windows Server 2003 Lite (C盘默认10G,默认密码WinSrv2003x86-Chinese)34、Windows Server 2008 Lite (默认密码nat.ee)35、Windows Server 2008 Lite (支持UEFI,默认密码nat.ee)36、Windows Server 2012 Lite (默认密码nat.ee)37、Windows Server 2012 Lite (支持UEFI,默认密码nat.ee)38、Windows Server 2016 Lite (默认密码nat.ee)39、Windows Server 2016 Lite (支持UEFI,默认密码nat.ee)40、Windows Server 2022 Lite (默认密码nat.ee)41、Windows Server 2022 Lite (支持UEFI,默认密码nat.ee)99、自定义镜像注意事项:系统名称后带Lite的均为精简版,没有的是完整版.[X64-Legacy-cxthhhhh]代表系统为AMD64位,支持传统BIOS启动,cxthhhhh定制的系统镜像.ARM64代表系统支持ARM64位UEFI代表系统支持最新的UEFI启动,如甲骨文全部都是这种aliyun代表阿里云专用系统镜像cxthhhhh、teddysun、nat.ee均为三位制作系统镜像的大佬代称系统密码会在选择相应序号后提示,请注意记录。经测试在谷歌云原版系统基础上DD会出现自动获取的子网掩码为255.255.255.255,如出现这种情况需要手工输入改正为正确的如255.255.255.0,否则会安装完成主机可能会离线。阿里云因使用了特殊的驱动,DD安装Windows系统选择阿里云专用版。Oracle Cloud(甲骨文云)可选择支持UEFI的镜像,注意基础系统最好选择Ubuntu,如原系统是CentOS可能无法成功,注意如是ARM机器注意选择同时支持ARM64和UEFI的镜像。9-16项安装原版系统,可自定义密码,密码要求8-16位,以英文字母或数字开头,可以是大小写英文字母、数字及7个特殊字符.!$@#&%的任意组合。
2023年06月07日
31 阅读
0 评论
0 点赞
2023-06-04
Centos、Debia和Ubuntu防火墙设置相关
1、Centos防火墙相关开启防火墙 systemctl start firewalld.service 放行指定端口 firewall-cmd --zone=public --add-port=端口号/tcp --permanent 重启防火墙 systemctl restart firewalld.service 查看所有端口号 firewall-cmd --list-ports 或 netstat -ntlp #此命令如果无法运行请先安装:yum install net-tools -y 查看指定端口是否被占用 lsof -i tcp:6666 #查看所有6666端口使用情况 或 netstat -ntulp |grep 6666 #查看所有6666端口使用情况,此命令也可以查出占用端口的进程 查看&关闭占用进程查看进程详细信息: ps 11111 #11111为进程的PID 杀掉进程: kill -9 11111 禁止开机启动 systemctl disable firewalld.service 开启开机启动 systemctl enable firewalld.service 查看防火墙状态 systemctl status firewalld.service 关闭防火墙临时停止防火墙: systemctl stop firewalld.service 永久关闭防火墙: systemctl disable firewalld.service 2、Debian&Ubuntu防火墙相关安装防火墙(有两种防火墙,可自由选择,当然在后面的命令中需要选择对应的命令方可执行,一般系统会自带方案二,方案一可能需要安装,自己可以先试)方案一: apt-get update apt-get install iptables-persistent 方案二: apt-get update apt-get install ufw 开启防火墙 service iptables start #方案一选择此命令 ufw enable #方案二选择此命令 放行指定端口iptables -A INPUT -p tcp --dport 端口号 -j ACCEPT 方案二选择以下:放行tcp或者udp端口: ufw allow 端口号/tcp 放行tcp与udp端口: ufw allow 端口号 删除指定端口: ufw delete allow 端口号 重启防火墙 service iptables restart #方案一选择此命令 ufw reload #方案二选择此命令 查看防火墙现有规则 iptables -L -n -v #方案一选择此命令 ufw status #方案二选择此命令 ufw show added #查看刚添加的规则,方案二可用此命令 查看所有端口号 netstat -ntlp #此命令如果无法运行请先安装:apt-get install net-tools -y 查看指定端口是否被占用 lsof -i tcp:6666 #查看所有6666端口使用情况 或 netstat -ntulp |grep 6666 #查看所有6666端口使用情况,此命令也可以查出占用端口的进程 查看&关闭占用进程 kill -9 PID 禁止开机启动 service iptables stop #方案一选择此命令 ufw disable #方案二选择此命令 开启开机启动 service iptables save #方案一选择此命令 ufw enable #方案二选择此命令 查看防火墙状态 service iptables status #方案一选择此命令 ufw status verbose #方案二选择此命令 关闭防火墙 service iptables stop #方案一选择此命令 ufw disable #方案二选择此命令 重置防火墙配置 ufw reset
2023年06月04日
63 阅读
0 评论
0 点赞
1
2