
MySQL案例
文章平均质量分 53
MySQL实操案例
只是甲
10年及以上金融信贷、通信行业数据库运维管理、数据仓库及大数据相关工作经验,持有Oracle OCP和Linux RHCE认证证书。
展开
-
MySQL去重-字段左右相反依旧视为同一条数据
文章目录一. 需求二. 解决方案一. 需求今天网上看到一个问题,觉得有点意思,然后尝试回答了下。像这样的数据,字段左右相反,但要算作同一条数据去重怎么写sql二. 解决方案测试数据:create table test2(id int,name varchar(20), col_a varchar(20), col_b varchar(20));insert into test2 values (1,'张三','A2','A1');insert into test2 values (2,'原创 2021-12-29 10:13:38 · 1136 阅读 · 0 评论 -
MySQL求连续登陆天数-鹅厂面试题
文章目录一.需求二.解决方案2.1 同一天多次登陆去重2.2 求上一次的登陆日期2.3 打标记判断是否间隔天数<=32.4 打分组的标记2.5 分组求最大的间隔天数一.需求求每个用户的最长连续登录天数,两个日期的间隔小于或等于 3 均视为连续登录。比如 01-01 号登录,最近的下一次登录是 01-04 号,两个日期的间隔等于 3 天,因此这两个日期之间的天数都算作活跃天数,一共 4 天。因为考虑MySQL版本问题,暂时不能使用分析函数。二.解决方案测试数据:create table te原创 2020-12-28 11:28:02 · 3998 阅读 · 21 评论 -
MySQL不使用分析函数实现排名
一.问题描述MySQL8.0开始支持分析函数,MySQL8.0之前如果有排名需求,不使用分析函数的情况下会比较麻烦。我们可以通过变量、子查询、表的自连接来实现排名的功能。数据准备:scott建表及录入数据sql脚本二.解决方案此处我选择变量来实现rownum,用标量子查询的方式来实现rank及dese_rank.代码:set @x=0;SELECT e.ename, e.sal, @x:=ifnull(@x,0)+1 as rownum1, (se原创 2021-08-09 09:50:14 · 3967 阅读 · 0 评论 -
正则案例四:清空()里面的内容
一.需求今天在论坛上看到有人提了一个正则相关的问题,刚好有时间,就给他提供了一个解决方案。需求如下:字符串:‘我爱(xxx)中华(qq)人民(aac啊)共和国’想达到的效果,凡是()中的内容都不需要了,包括()本身,以上字符串希望返回结果:我爱中华人民共和国。二.解决方案2.1 Oracle解决方案首先想到的是regexp_replace进行替换,题目意思已经很明白,是要删除()及()里面的内容。代码:with tmp1 as(select '我爱(xxx)中华(qq)人民(aac啊)共原创 2021-06-30 18:08:44 · 3563 阅读 · 0 评论 -
正则案例一:匹配字母开头后面跟随14个数字的字符串
一.需求描述今天朋友遇到一个问题,数据库中的某一列中字母开头后面跟随14个数字的字符串,例如 ‘a12345678912345’ 这种。其实各个编程语言例如Java、Python等都有自己的正则,朋友不想那么麻烦,想在数据库里面来实现。二.解决方案2.1 Oracle的解决方案Oracle的正则表达式虽然没有Java、Python的那么强大,但是也足够够用。^ 匹配每一行的开头,单行模式下等价于字符串的开头$ 匹配每一行的结尾,单行模式下等价于字符串的结尾字母可以使用 [a-zA-Z]原创 2021-03-26 11:00:18 · 5080 阅读 · 12 评论 -
正则案例二:匹配有且仅有3个连续数字的字符
一.需求描述近期收到朋友的一个需求,需要在一堆字符串中查找连续3个数字的字符,连续数字可能出现在开头、中间、结尾,而且如果连续数字超过3个,也不符合条件。二.解决方案2.1 Oracle解决方案^ 匹配每一行的开头,单行模式下等价于字符串的开头$ 匹配每一行的结尾,单行模式下等价于字符串的结尾字母可以使用 [a-zA-Z]数字可以用 \d 或者 [0-9]我测试匹配开头使用\d居然未匹配出来,只能使用[0-9]代码:with tmp1 as(select 'abc12' str fr原创 2021-06-22 10:07:56 · 7846 阅读 · 0 评论 -
正则案例三:匹配3个及以上连续数字并输出
一.需求描述 今天朋友咨询一个正则的需求,对于连续超过3个数字进行输出,如果有多个连续数字,都需要输出。 例如 123abc1234 输出为 123.1234,中间用’.'进行分隔。二.解决方案2.1 Oracle解决方案看到这个需求,首先想到的是使用Oracle 正则表达式的regexp_replace函数了。多个匹配表达式用()进行关联,例如(.*?)([0-9]{3,})其中 *? 是匹配0次或多次,非贪婪模式。[0-9]{3,} 是匹配连续3个及以上数字。代码:with tmp原创 2021-06-22 10:45:52 · 11223 阅读 · 0 评论 -
mysql服务器 一次cpu 100%问题排查
文章目录一. 问题描述二.解决方案参考:一. 问题描述前两天在帮朋友在CentOS 8.5 安装了最新的MySQL 8.0.27,安装方式为编译安装。才刚上线2天,就发现CPU长期负载100%,而且不管是高峰期还是低峰期,都是100%。通过FinalShell查看:通过top命令查看:输入1 查看每一个cpu的使用率二.解决方案top 然后按b,排序,发现最耗CPU的确实是mysql排名第一的是mysql用户下的xri命令,这个非常可疑。排名第二的是mysql用户下的mysqld命原创 2022-01-08 12:29:13 · 7629 阅读 · 6 评论 -
MySQL 一次 Incorrect DECIMAL value: ‘0‘ for column ‘‘ at row -1
备注:MySQL版本 5.7文章目录一. 问题描述二. 解决方案2.1 修改sql_mode2.2 修改SQL语句一. 问题描述今天帮朋友写了一个存储过程,通过主键id分批更新一个大表,里面的update及delete语句大概有30多个,开启事务,一个批次更新完成后,再提交。突然存储过程运行的时候出现如下报错:2021-12-18T22:24:05.171910-05:00 22592 [ERROR] Event Scheduler: [root@localhost][**.****] Inc原创 2021-12-23 13:57:18 · 3459 阅读 · 0 评论 -
MySQL一次error writing communication packets的排查过程
文章目录一. 问题描述二. 解决方案2.1 排查page_cleaner的报错2.2 排查慢SQL2.3 停应用 分批更新大表2.4 测试磁盘性能一. 问题描述今天朋友的数据库出现了一些连接失败查看MySQL的错误日志,发现有如下报错:2021-12-16T09:34:13.091556Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4177ms. The settings might not be optimal. (flus原创 2021-12-23 13:54:41 · 2633 阅读 · 0 评论 -
MySQL一次锁表及filesort优化
一. 问题描述朋友的数据库应用最近反馈比较慢。他的需求是首先获取表的一行数据,为了避免并发的冲突,先锁定,然后再更新数据的状态。二. 解决方案锁定语句SELECT id,col1FROM tab_nameWHERE status=0 and isread=0 and id >=501 ORDER BY col2 LIMIT 1 FOR UPDATE;这个语句的需求是更新前把行锁住,避免丢失更新或重复更新。那么问题来了,status和isread两列都没索引,导致这个语句是全表锁原创 2021-12-22 14:36:47 · 456 阅读 · 0 评论 -
MySQL网络原因导致的连接失败
一. 问题描述今天朋友的数据库出现了一些连接失败,如下图:查看MySQL的错误日志,发现有如下报错:2021-12-13T22:31:33.921945Z 163060 [Warning] IP address '*.*.*.*' could not be resolved: Name or service not known2021-12-14T01:22:46.151797Z 163180 [Warning] IP address '*.*.*.*' has been resolved to原创 2021-12-22 14:35:19 · 2065 阅读 · 0 评论 -
MySQL ERROR 1406 (22001): Data too long for column ‘c1‘ at row 1
文章目录一.问题描述二.解决方案2.1 字符集问题2.2 sql_mode的问题参考:一.问题描述测试数据:drop table test;create table test (pid varchar(200),id varchar(200));insert into test values (null,'中国');insert into test values ('中国','广东');insert into test values ('中国','广西');insert into tes原创 2021-12-21 14:43:55 · 1450 阅读 · 0 评论 -
MySQL替换换行符
文章目录一.问题描述二.解决方案参考:一.问题描述今天朋友突然问了一个问题,他想把今天hive里面表字段的备注多行转换为单行显示。例如表t1的col1列,注释为:1-有效0-无效想要的结果是:1-有效,0-无效二.解决方案CHAR(10): 换行符CHAR(13): 回车符MySQL中,CHAR(10)是换行符,通过replace函数进行替换即可。代码:create table t2(id int,name varchar(100));insert into t2 (id原创 2021-12-21 14:41:20 · 4358 阅读 · 0 评论 -
Centos7安装MySQL初始化Can‘t find error-message file
备注:OS :CentOS 7.9DB : MySQL 5.7.31文章目录一.问题描述二.解决方案2.1 增加--lc_messages_dir参数2.2 拷贝errmsg.sys到系统参考:一.问题描述MySQL 初始化的时候遇到这个报错:奇了怪了,MySQL 二进制安装也安装了很多生产实例了,一直没遇到过这个问题,为什么今天安装MySQL出了这么多的问题。二.解决方案2.1 增加–lc_messages_dir参数通过网络搜索,解释说是系统环境变量的问题。需要增加如下两个参数原创 2021-12-18 17:20:28 · 3773 阅读 · 1 评论 -
MySQL一次大表迁移的优化
文章目录一.问题描述二. 解决方案2.1 调整索引2.2 调整参数2.3 重新导入数据2.4 重建索引2.5 恢复mysql配置文件一.问题描述 今天一个做Java开发的哥们向我咨询了一个问题。 他想把一个300多万条数据数据的表迁移到本地测试环境,他处理的方案是 先通过mysqldump命令将该表做一个备份,然后传输到测试环境,最后执行备份文件。 理想很丰满,现实很骨感,300多万的数据不大,备份下来也就2.5GB左右的sql文件,可是在测试环境居然执行了12个小时才执行了一半,无奈只能终止原创 2021-11-26 21:54:43 · 1081 阅读 · 0 评论 -
MySQL从整库备份中恢复单表
备注:MySQL 5.7.31文章目录一.问题描述二. 解决方案2.1 从整库备份中找到单表的备份文件2.1.1 直接通过sed命令处理2.1.2 切分后通过grep来查找2.2 恢复到一个新表2.3 还原到源环境参考:一.问题描述之前帮朋友搭建的MySQL数据库,说是有个表的数据被误删除了,现在需要进行恢复。二. 解决方案还好我之前给他安装MySQL数据库的时候,特意做了备份,每天凌晨都会把整库进行备份。2.1 从整库备份中找到单表的备份文件2.1.1 直接通过sed命令处理在网上找到了原创 2021-11-26 17:55:58 · 1571 阅读 · 0 评论 -
MySQL 5.6忘记root密码
一. 修改配置文件首先找到mysql的配置文件,如: /etc/my.cnf在[mysqld]字段下新增如下内容,然后保存退出。skip-grant-tables然后重启mysql服务service mysqld restart二. 修改root密码使用空密码登陆mysql mysql -uroot -p -- 不输入密码直接回车 USE mysql; UPDATE user SET Password = password('YourPassword') where user =原创 2021-11-16 16:34:12 · 1758 阅读 · 0 评论 -
MySQL Lock wait timeout exceeded; try restarting transaction
文章目录一.问题描述二.解决方案一.问题描述今天在解决一个大的事务回滚的时候,mysql实例宕机了,等重启后,就发现create table出现了问题:mysql> CREATE TABLE `fact_sale_new` ( -> `id` bigint NOT NULL AUTO_INCREMENT, -> `sale_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRE原创 2021-06-10 14:17:05 · 6498 阅读 · 0 评论 -
MySQL Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (111)一例
一.问题描述今天突然碰到一个mysql数据库重启后登陆不上的问题:[16:37:02] [root@hp2 ~]# mysql -uroot -p[16:37:04] Enter password: [16:37:04] ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)二.解决方案因为mysql.sock是mysql启动后才会生成的,所以这个文件其实是不存在的原创 2021-06-08 17:58:32 · 6412 阅读 · 0 评论 -
MySQL kill进程后出现killed
文章目录一.问题描述二.解决方案三.额外的一个报错四.启用innodb_force_recovery=3参考:一.问题描述拷贝一个大表的表数据的时候,等待时间太久,就在前台通过CTRL+C的方式停掉了。mysql> create table fact_sale_new as select * from fact_sale;^C^C -- query aborted^C^C -- query abortedERROR 2013 (HY000): Lost connection to MyS原创 2021-06-04 14:14:51 · 9239 阅读 · 5 评论 -
Centos7安装MySQL初始化缺少libaio.so.1
备注:OS :CentOS 7.9DB : MySQL 5.7.31一.问题描述最近帮一个朋友安装mysql,安装方式是二进制的安装,前面还挺顺利的。到了初始化这个步骤的时候,突然报错,缺少ibaio.so.1 这个包。二.解决方案2.1 yum安装lbaio既然缺少包,那么首先想到的就是安装lbaio的包。于是我执行了:yum -y install lbaio重新测试了一遍还是不行,难道是我安装得不对。于是我检查了一遍,发现安装的居然是32位的lbaio的包,怪不得不成功。原创 2021-06-03 14:13:55 · 11044 阅读 · 3 评论 -
MySQL 降配导致的实例crash
文章目录一.问题描述二.解决方案三.反馈参考:一.问题描述由于近期对服务器进行了降配,该mysql数据库会进行批量写入操作,直接导致实例crash查看错误日志:2021-02-02T09:09:23.557505Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 16791ms. The settings might not be optimal. (flushed=3 and evicted=0, during the time.)原创 2021-06-02 13:51:42 · 6226 阅读 · 2 评论 -
MySQL通过导出csv的方式将数据同步到hive
备注:测试版本MySQL 5.6一.将mysql的表导出到csv-- mysql端导出到csv文件mysql [szqb_pro_new]> select * from tab1 limit 1000 into outfile "/data/csv/tab1_20201224.csv";Query OK, 1000 rows affected (0.00 sec)-- scp到hadoop所在服务器[root@10-33-1-105 csv]# scp ./ tab1_20201224原创 2021-06-01 17:41:58 · 6190 阅读 · 2 评论 -
MySQL 锁相关的优化案例
备注:MySQL 5.5测试数据:基于信息安全考虑,我自己创建的测试表,来模拟实际应用场景。create table test_202101(id int(11) not null auto_increment, name varchar(200), age int, qq varchar(200), email varchar(200), status1 int(11), status2 int(11), status3 int(11), status4 int(11), st原创 2021-02-09 22:08:05 · 2516 阅读 · 11 评论 -
MySQL生成连续数字
MySQL 使用过程当中,经常需要有连续数字的表用来处理一些复杂的报表逻辑,这个blog介绍几种生成连续数字的表方法如下,我需要生成一张表 id连续的从 1-50文章目录一.自定义变量的方法二.存储过程的方法三.MySQL 8.0 With递归方法一.自定义变量的方法构造两个临时表 一个5一个10,通过笛卡尔积可以构造50行记录,即可构造50条记录SELECT @xi:=@xi+1 as xc from (SELECT 1 UNION SELECT 2 UNION SELECT 3原创 2020-10-16 11:27:17 · 5650 阅读 · 0 评论 -
MySQL kill使用案例
MySQL数据库版本 8.0.17文章目录前言一.查询表大小二.碎片整理参考文献:前言业务有需求,将一张大表 1000w+数据,需要从Oracle数据库全量同步到MySQL前DBA用python写的脚本,每天全量同步一次,先delete再insert现在表的空间已经差不多2G了,需要进行清理一.查询表大小select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from information_schema.TABLES w原创 2020-09-15 09:05:33 · 870 阅读 · 0 评论 -
MySQL 优化之压缩
环境:MySQL 8.0一.描述一些不常用的表数据量太大,需要压缩表进行空间清理-- 表结构mysql> show create table t1\G*************************** 1. row *************************** Table: t1Create Table: CREATE TABLE `t1` ( `id` int DEFAULT NULL, `name` varchar(1000) DEFAULT N原创 2020-09-14 09:13:15 · 1568 阅读 · 0 评论