记录 PT-Online-Schema-Change 在线优化内存碎片失败 , 大表生产优化方案
1.2亿数据量 , 删除到2w条后 异步的修复内存碎片失败 , 最后只能使用老办法 , rename table 了 执行方案如下 : 对外公告维护 关闭所有写入脚本和接口 确认待维护表无新增数据 rename table table_name to new_table_name这一步非常快 就算有非常大的数据量更换也只用了1秒不到 导出从库中的 table_name 表记录, 在主库创建 新的 table_name ,新创建表 子增ID + 10w 保证ID 唯一 , insert 从库数据. 为什么不使用 INSERT INTO table_name SELECT * FROM new_table_name ?因为执行太慢了, 在维护公告之前 我就已经测试了 上面的 sql 执行时间 , 非常的漫长 还搞不定. 维护时间肯定不能等那么久. 所以采用上面的老方案 替换表从库导入.
Mysql data_free 表占用监控内存
今天 发现数据库延迟 , 最高延迟达到20多分钟, 事故原因在于 热表数据未归档, 导致累计了1.2亿的数据量.mysql 服务器发生雪崩现象. 越来越差所以需要查看问题. 背景知识information_schema 是 MySQL 的系统数据库,它包含了关于所有其他数据库和对象的信息。通过查询该数据库,我们可以获取数据库中的表、列、索引等的详细信息。这对数据库的性能优化、存储管理以及故障排查都非常有帮助。 示例 SQL 查询我们将使用以下 SQL 查询来获取特定数据库(例如 table_name)中所有表的存储信息: SELECT t.table_schema, -- 表示表所属的数据库名称 t.table_name, -- 表示表的名称 t.table_rows, -- 表示表中行的数量 t.data_length, -- 表示表中数据的字节长度 t.index_length, -- 表示表中索引的字节长度 CONCAT(ROUND...
MySQL的连接池、异步、断线重连
MySQL的连接池、异步、断线重连 MySQL长连接MySQL短连接每次请求操作数据库都需要建立与MySQL服务器建立TCP连接,这是需要时间开销的。TCP连接需要3次网络通信。这样就增加了一定的延时和额外的IO消耗。请求结束后会关闭MySQL连接,还会发生3/4次网络通信。 close操作不会增加响应延时,原因是close后是由操作系统自动进行通信的,应用程序感知不到 长连接就可以避免每次请求都创建连接的开销,节省了时间和IO消耗。提升了PHP程序的性能。 断线重连在cli环境下,PHP程序需要长时间运行,客户端与MySQL服务器之间的TCP连接是不稳定的。 MySQL-Server会在一定时间内自动切断连接 PHP程序遇到空闲期时长时间没有MySQL查询,MySQL-Server也会切断连接回收资源 其他情况,在MySQL服务器中执行kill process杀掉某个连接,MySQL服务器重启 这时PHP程序中的MySQL连接就失效了。如果仍然执行mysql_query,就会报一个“MySQL server has gone away”的错误。程序处理不到...
Curl post请求发送json数据两种方式(Window/Linux)
2024-12-30T13:10:54.png 设置请求头Content-Typecurl发送post请求,默认的content-type是:application/x-www-form-urlencoded。要发送json格式,则需要设置请求头的content-type为application/json。 使用-H 或–header参数设置content type: -H "Content-Type: application/json" 发送数据发送数据使用的是-d或--data参数,curl支持两种请求方式: 直接在命令行中输入json字符串 发送json文件 Linux命令行输入json字符串发送数据curl -X POST http://localhost:8080/api -H "Content-Type: application/json" \ -d '{"p1":"xyz","p2":"xyz"}'...
PHP 7.4 的 Array and string offset access syntax with curly braces is deprecated 的错误和解决方法
PHP 升级到 7.4 之后,会收到 Array and string offset access syntax with curly braces is deprecated 的错误,这是因为: PHP7.4 不再支持使用大括号访问数组以及字符串的偏移,就是不支持数组{}写法,统一为数组[]。 比如: $index{$start+7} 就要改成: $index[$start+7]
Mysql 5.7 升级到 Mysql 8.0
升级前的准备工作实际上是为了消除升级程序中无法自动处理的“不兼容的”变化 MySQL 8.0引入了全新的数据字典用于保存数据库中的元信息,Server层和InnoDB层共享一份元数据。MySQL 8.0的information_schema中的视图全部源自于数据字典表,与InnoDB相关的视图被重命名(INNODB_SYS_XXX重命名为INNODB_XXX)。若用户的应用依赖于这些视图,需要确保应用已做出相应的修改。在升级前需要确认业务是否依赖于MySQL 8.0中删除的系统表(如mysql.proc、mysql.event等),若存在则需使用新的访问方式去获取所需的数据。此外,对于和MySQL 8.0系统表同名的用户表(如catalogs、routines等),需要手动执行RENAME/DROP TABLE操作。 RDS MySQL 8.0不再支持部分旧版本数据类型。如果表中字段含有MySQL 8.0不支持的数据类型,需要在升级前通过REPAIR TABLE或逻辑导出+导入的方式修复。更多信息请参见准备升级安装。 MySQL 8.0中,分区表的处理已由Server层...
MySQL表字段字符集不同导致的索引失效问题
原文地址 : https://mp.weixin.qq.com/s/ns9eRxjXZfUPNSpfgGA7UA 1. 概述昨天在一位同学的MySQL机器上面发现了这样一个问题,MySQL两张表做left join时,执行计划里面显示有一张表使用了全表扫描,扫描全表近100万行记录,大并发的这样的SQL过来数据库变得几乎不可用了。MySQL版本为官方5.7.12。 2. 问题重现首先,表结构和表记录如下: mysql> show create table t1\G*************** 1. row ***************Table: t1Create Table: CREATE TABLE `t1` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,`code` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`),KEY `idx_code` (`code`),KEY `idx_name` (`name`)) ENGINE=In...
MySQL用错编码怎么救
备份,不然崩了就只有删库跑路了; 升级MySQL服务端到5.3.3及以上版本,以支持utf8md4; 将数据库、表、列的字符编码、collation改为utf8md4: # For each database:ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;# For each table:ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;# For each column:ALTER TABLE table_name CHANGE column_name column_name VARCHAR(length) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 检查列和索引键的最大长度; 修改连接、客户端、服务端的字符集; 修复和优化所有的表,以免出现一些莫名其妙的错误,可以使用如下的方式...
Git 忽略文件权限修改
Git 忽略文件权限修改 当前版本库$ git config core.filemode false 所有版本库$ git config --global core.fileMode false
Composer 依赖管理
简介Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。 依赖管理Composer 不是一个包管理器。是的,它涉及 “packages” 和 “libraries”,但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。 这种想法并不新鲜,Composer 受到了 node’s [npm][1] 和 ruby’s bundler 的强烈启发。而当时 PHP 下并没有类似的工具。 Composer 将这样为你解决问题:a) 你有一个项目依赖于若干个库。 b) 其中一些库依赖于其他库。 c) 你声明你所依赖的东西。 d) Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。 声明依赖关系比方说,你正在创建一个项目,你需要一个库来做日志记录。你决定使用 monolog。为了将它添加到你的项目中,你所需要做的就是创建一个 composer.json 文件,其中描述了项目的依赖关系。 { ...








