MySQL
分享MySQL技术
robinson1988
本人精通SQL,精通所有关系型数据库SQL调优,精通所有关系型数据库性能优化,精通所有关系型数据库架构,精通分库分表,熟悉大数据Hadoop,Hive,Spark,Flume,Kafka,Flink,熟悉各种ETL工具,熟悉Python,Java,C
展开
-
通过一个例子详解 MySQL record lock(记录锁) 的加锁方式
本文基于MySQL8.0.19,下面通过一个例子讲解 MySQL record lock(记录锁) 的加锁方式SESSION1:mysql> SELECT VERSION();+-----------+| VERSION() |+-----------+| 8.0.19 |+-----------+1 row in set (0.01 sec)mysql> CREATE TABLE t(id INT UNSIGNED PRIMARY KEY ,NAME VARCH原创 2020-10-11 21:30:36 · 2272 阅读 · 4 评论 -
MySQL8.0.19 MGR MySQL router MySQL connector failover 组合实现高可用
在MySQL5.7之前,本人一直是很排斥MySQL的,因为MySQL的半同步并不能100%保证主从数据一致性,MHA架构也不能100%保证主从数据一致性,一个连数据一致性都不能保证的数据库我肯定是不会像学Oracle那样化大量时间去学习。MySQL5.7 MGR技术的出现,MySQL8.0对分析函数的支持,对内连接等值访问HASH JOIN 算法的支持等等新特征,让我看到MySQL要脱胎换骨了,这也终于让我有兴趣学习MySQL了,今天先配置MySQL MGR 3节点单主模式的集群,然后利用MySQL rou原创 2020-06-05 20:10:35 · 1179 阅读 · 0 评论 -
利用Python多进程并行执行加快MySQL批量UPDATE执行速度
现在有个表tmysql> desc t;+----------------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------------+--------------+------+-----+---------+----------------+| owner原创 2020-05-29 15:58:16 · 2815 阅读 · 2 评论 -
利用Python解析MySQL BINLOG从而回滚UPDATE和DELETE误操作
MySQL没有Oracle的闪回(flashback)功能,如果不小心执行了UPDATE或者DELETE误操作,想要回滚相比Oracle还是挺麻烦的可以利用mysqlbinlog工具解析binlog,从而拼接出UPDATE和DELETE的回滚语句,人工拼接比较麻烦,所以利用Python来拼接import ioimport pymysqldef processUPDATE(db_name,table_name): conn = pymysql.connect("192.168.56.10",原创 2020-05-24 23:38:09 · 1190 阅读 · 0 评论 -
利用Python监控MySQL当前跑的TOP SESSION
利用ps命令抓出MySQL PID,根据PID再监控每个线程CPU使用率以及跑的SQL语句import pymysqlimport osimport timeos.environ['NLS_LANG']='SIMPLIFIED CHINESE_CHINA.UTF8'command="ps -ef | grep 3306 | grep -v grep | awk '{print $2}'"with os.popen(command, "r") as pid: pid = str(int(pi原创 2020-05-18 17:16:33 · 823 阅读 · 0 评论 -
在Oracle和MySQL中利用SQL查询出今年日历
Oracle写法:select case when rank() over(partition by month order by week) = 1 then month else ' ' end month, max(一) 一, max(二) 二, max(三) 三, max(四) 四, max(五) 五, max(六) 六,原创 2020-05-10 01:32:32 · 958 阅读 · 0 评论 -
MySQL中的树形查询
树形查询本质就是递归算法(自己调用自己),Oracle很早就支持了树形查询MySQL中可以使用 WITH RECURSIVE 来实现树形查询比如在Oracle中scott账户下,找出员工编号为7369所有的上级:SQL> select empno, ename, job, mgr, level 2 from emp 3 start with empno = 7369 4 connect by empno = prior mgr; EMPNO ENAME原创 2020-05-09 00:00:24 · 1437 阅读 · 0 评论 -
获取MySQL中某个数据库下所有表建表语句的DDL
本脚本可以获取MySQL中某个数据库下所有表建表语句的DDL注意:本脚本需在MySQL8.0以上版本运行注意:本脚本不获取VIEW创建语句注意:本脚本没有处理主键,外键等约束注意:本脚本只处理非分区表,分区表请自己改写脚本注意:如果你做数据迁移,想把MySQL数据库迁移到其他数据库,自己改写脚本WITH tab AS (SELECT table_name FROM informa...原创 2020-05-07 10:51:07 · 4885 阅读 · 0 评论 -
MySQL根据主键切割大事务(变相ROWID切片)
不管是Oracle,MySQL,还是PostGre SQL,跑大事务都会严重影响数据库性能在Oracle里面可以利用rowid切片的方式处理大事务,如果不清楚什么是rowid切片,可以买一本《SQL优化核心思想》看看MySQL没有Oracle的区,块,段这些概念,所以也就不能使用rowid切片的方式处理大事务MySQL中表一般都是存在innodb引擎中的,使用innodb引擎每个表都必须要设置主键(当然了你也可以不设置主键,你屌)MySQL中主键一般都是自增(auto_increment)的原创 2020-05-08 22:17:20 · 1354 阅读 · 3 评论