MySQL 中主要的日志类型

MySQL 中主要的日志类型 MySQL 提供了多种日志类型,每种都有其特定的目的和格式。理解这些日志对于数据库管理、性能调优、数据恢复和故障排查至关重要。 下面我将详细介绍 MySQL 中主要的日志类型及其格式 总结概览 日志类型 主要目的 格式 是否默认开启 错误日志 记录 MySQL 启动、运行、停止时的错误、警告和提示信息。 文本格式 是 二进制日志 记录所有更改数据的语句,用于主从复制和数据恢复。 STATEMENT, ROW, MIXED 否 (8.0默认开启) 通用查询日志 记录所有到达 MySQL 的客户端连接和执行的语句。 文本格式 / CSV 格式 否 慢查询日志 记录执行时间超过指定阈值的查询,用于性能优化。 文本格式 / CSV 格式 否 重做日志 InnoDB 特有的,用于保证事务的持久性和崩溃恢复。 物理格式(二进制) 是 回滚日志 InnoDB 特有的,用于保证事务的原子性和 MVCC。 逻辑格式 是 详细解析 1. 错误日志 这是 DBA 首先需要查看的日志,当数据库出现任何异常时,它通常是排查问题的起点。 内容:启动/关闭信息、错误信息、警告信息、在复制环境中从服务器线程的启动信息等。 格式:纯文本格式,易于阅读。 配置参数: log_error:指定错误日志文件的位置。 示例内容: 2023-10-27T08:00:00.000000Z 0 \[Note\] Server started. 2023-10-27T08:01:23.456789Z 5 \[Warning\] Aborted connection 5 to db: 'test' user: 'root' host: 'localhost' 2....

October 13, 2025 · 2 min · Leanku

Mysql窗口函数

Mysql窗口函数 一、什么是窗口函数? 窗口函数是一种在查询结果的"窗口"上执行计算的函数,它不会像常规聚合函数那样将多行合并为一行,而是为每一行返回一个值,同时保持原始行数不变。 基本语法 <窗口函数>(<参数>) OVER ( [PARTITION BY <分区表达式>] [ORDER BY <排序表达式> [ASC | DESC]] [ROWS/RANGE <窗口范围>] ) ‌<窗口函数>‌:可以是聚合函数(如SUM、AVG)或专用函数(如ROW_NUMBER、RANK)。‌‌ ‌OVER()‌:必需子句,定义窗口框架。‌‌ ‌PARTITION BY‌:可选,用于分组数据;若省略,窗口覆盖整个结果集。 ‌ORDER BY‌:可选,指定窗口内行的排序顺序。‌‌ ‌窗口范围‌:可选,默认ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。‌‌ 二、 准备测试数据 -- 创建销售数据表 CREATE TABLE sales ( sale_id INT PRIMARY KEY, salesperson VARCHAR(50), region VARCHAR(50), sale_date DATE, amount DECIMAL(10,2) ); INSERT INTO sales VALUES (1, '张三', '北京', '2023-01-15', 5000), (2, '李四', '上海', '2023-01-16', 8000), (3, '王五', '北京', '2023-01-17', 6000), (4, '张三', '北京', '2023-02-01', 7000), (5, '李四', '上海', '2023-02-02', 9000), (6, '赵六', '广州', '2023-02-03', 4000), (7, '王五', '北京', '2023-02-04', 5500), (8, '张三', '北京', '2023-03-01', 8500); -- 创建员工薪资表 CREATE TABLE employee_salary ( emp_id INT, name VARCHAR(50), department VARCHAR(50), salary DECIMAL(10,2), hire_date DATE ); INSERT INTO employee_salary VALUES (1, '张三', '技术部', 15000, '2020-01-15'), (2, '李四', '技术部', 12000, '2021-03-20'), (3, '王五', '销售部', 8000, '2022-06-10'), (4, '赵六', '销售部', 7500, '2022-08-05'), (5, '钱七', '技术部', 13000, '2020-11-30'), (6, '孙八', '人事部', 9000, '2021-09-15'), (7, '周九', '技术部', 16000, '2019-05-20'); 1....

February 20, 2025 · 4 min · Leanku

Mysql中的回表

MYSQL中的回(Back to Table)表说明 一、 基本概念 回表是指当使用非聚簇索引(二级索引)进行查询时,首先在索引中查找到所需数据的主键值,然后再根据这个主键值回到主键索引(聚簇索引)中查找完整数据行的过程。 二、核心原理 聚簇索引 vs 非聚簇索引 -- 创建测试表 CREATE TABLE user_info ( id INT PRIMARY KEY, -- 主键,聚簇索引 name VARCHAR(50), email VARCHAR(100), age INT, created_at DATETIME, INDEX idx_email (email), -- 非聚簇索引(二级索引) INDEX idx_name_age (name, age) -- 复合非聚簇索引 ); 索引结构对比 聚簇索引(主键索引)结构: 索引节点 -> 叶子节点包含完整数据行 [id:1] -> [id:1, name:'张三', email:'zhang@xx.com', age:25, ...] [id:2] -> [id:2, name:'李四', email:'li@xx.com', age:30, ...] 非聚簇索引(二级索引)结构: 索引节点 -> 叶子节点只包含索引列 + 主键值 [email:'li@xx.com'] -> [主键id:2] [email:'zhang@xx....

April 23, 2024 · 4 min · Leanku

MySQL分库分表(无中间件)

MySQL分库分表(无中间件) 一、 分库分表方案设计 1. 垂直拆分 (按业务模块) -- 原始单体数据库 CREATE DATABASE ecommerce; USE ecommerce; -- 垂直拆分后的数据库 -- 用户库 CREATE DATABASE user_center; USE user_center; CREATE TABLE users ( user_id BIGINT PRIMARY KEY, username VARCHAR(50) UNIQUE, email VARCHAR(100) UNIQUE, password VARCHAR(100), mobile VARCHAR(20), status TINYINT DEFAULT 1, created_at DATETIME, updated_at DATETIME ); CREATE TABLE user_profiles ( user_id BIGINT PRIMARY KEY, real_name VARCHAR(50), avatar VARCHAR(200), gender TINYINT, birthday DATE, bio TEXT ); CREATE TABLE user_address ( address_id BIGINT PRIMARY KEY, user_id BIGINT, province VARCHAR(50), city VARCHAR(50), district VARCHAR(50), detail VARCHAR(200), is_default TINYINT DEFAULT 0, INDEX idx_user_id (user_id) ); -- 订单库 CREATE DATABASE order_center; USE order_center; CREATE TABLE orders ( order_id BIGINT PRIMARY KEY, user_id BIGINT, total_amount DECIMAL(10,2), status TINYINT, payment_status TINYINT, created_at DATETIME, paid_at DATETIME ); CREATE TABLE order_items ( item_id BIGINT PRIMARY KEY, order_id BIGINT, product_id BIGINT, product_name VARCHAR(100), price DECIMAL(10,2), quantity INT, INDEX idx_order_id (order_id) ); -- 商品库 CREATE DATABASE product_center; USE product_center; CREATE TABLE products ( product_id BIGINT PRIMARY KEY, name VARCHAR(100), category_id INT, price DECIMAL(10,2), stock INT, status TINYINT, created_at DATETIME ); CREATE TABLE categories ( category_id INT PRIMARY KEY, name VARCHAR(50), parent_id INT ); 2....

April 23, 2024 · 11 min · Leanku

MySQL索引类型

MySQL索引类型 索引是帮助MySQL高效获取数据的数据结构,类似于书籍的目录,可以大大加快查询速度。 一、索引类型 1. B-Tree 索引(最常用) 特点 默认的索引类型 适用于全键值、键值范围或键值前缀查找 支持排序和分组 创建语法 -- 单列索引 CREATE INDEX idx_name ON table_name(column_name); -- 多列复合索引 CREATE INDEX idx_name ON table_name(col1, col2, col3); -- 创建表时指定 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100), age INT, INDEX idx_name (name), INDEX idx_email_age (email, age) ); 适用查询类型 -- 全值匹配 SELECT * FROM users WHERE name = 'John'; -- 前缀匹配(最左前缀) SELECT * FROM users WHERE name LIKE 'Joh%'; -- 范围查询 SELECT * FROM users WHERE age BETWEEN 20 AND 30; -- 精确匹配左列 + 范围匹配右列 SELECT * FROM users WHERE email = 'john@example....

April 23, 2024 · 5 min · Leanku