mysql数据操作语句

141 2024-10-30 10:21

一、mysql数据操作语句

MySQL数据操作语句的使用指南

MySQL是一种广泛使用的关系型数据库管理系统,它提供了丰富的数据操作语句,可以进行数据的插入、查询、更新和删除。本文将介绍一些常用的MySQL数据操作语句,并给出相应的使用示例。

1. 插入数据

要向MySQL数据库中插入数据,可以使用INSERT INTO语句。该语句的基本语法如下:

INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);

其中,表名是要插入数据的表名,列1, 列2, 列3, ...是要插入数据的列名,值1, 值2, 值3, ...是要插入的具体值。

例如,要向名为students的表中插入一条记录,可以使用以下语句:

INSERT INTO students (id, name, age) VALUES (1, '张三', 20);

上述语句将在students表的idnameage列中插入一条记录,其值分别为1张三20

2. 查询数据

要从MySQL数据库中查询数据,可以使用SELECT语句。该语句的基本语法如下:

SELECT 列1, 列2, 列3, ... FROM 表名 WHERE 条件;

其中,列1, 列2, 列3, ...是要查询的列名,表名是要查询的表名,WHERE后面是查询条件。

例如,要从students表中查询id1的记录的nameage列,可以使用以下语句:

SELECT name, age FROM students WHERE id = 1;

上述语句将返回满足条件id = 1nameage列的值。

3. 更新数据

要在MySQL数据库中更新数据,可以使用UPDATE语句。该语句的基本语法如下:

UPDATE 表名 SET 列1 = 值1, 列2 = 值2, ... WHERE 条件;

其中,表名是要更新数据的表名,列1 = 值1, 列2 = 值2, ...是要更新的列和对应的新值,WHERE后面是更新条件。

例如,要将students表中id1的记录的age列更新为21,可以使用以下语句:

UPDATE students SET age = 21 WHERE id = 1;

上述语句将满足条件id = 1的记录的age列更新为21

4. 删除数据

要从MySQL数据库中删除数据,可以使用DELETE FROM语句。该语句的基本语法如下:

DELETE FROM 表名 WHERE 条件;

其中,表名是要删除数据的表名,WHERE后面是删除条件。

例如,要从students表中删除id1的记录,可以使用以下语句:

DELETE FROM students WHERE id = 1;

上述语句将删除满足条件id = 1的记录。

总结

本文介绍了MySQL数据操作语句的基本用法,包括插入数据、查询数据、更新数据和删除数据。熟练掌握这些语句对于有效地操作MySQL数据库中的数据非常重要。希望本文对您学习和使用MySQL数据操作语句有所帮助。

二、php操作mysql语句

使用PHP操作MySQL语句是许多网站开发人员必须掌握的基本技能之一。通过在PHP代码中编写MySQL语句,您可以轻松地与数据库交互,检索数据,更新记录,甚至删除数据。无论您正在开发简单的博客网站还是复杂的电子商务平台,了解如何使用PHP来操作MySQL数据库都将对您的工作产生重大影响。

连接到数据库

在开始使用PHP操作MySQL语句之前,首先需要确保已经建立了与数据库的连接。您可以使用PHP提供的mysqliPDO等扩展来实现这一步。以下是一个示例代码,用于连接到MySQL数据库:

connect_error) { die("连接失败: " . $conn->connect_error); } else { echo "连接成功"; } ?>

查询数据

一旦成功连接到数据库,您就可以开始编写查询以检索所需的数据。使用PHP操作MySQL语句进行数据查询非常灵活,您可以执行简单的SELECT语句或者包含多个条件的复杂查询。以下是一个简单的示例代码,用于从名为users的表中检索用户信息:


query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - Name: " . $row["name"]. "";
    }
} else {
    echo "0 结果";
}
$conn->close();
?>

更新记录

除了查询数据外,您还可以使用PHP操作MySQL语句来更新数据库中现有的记录。通过执行UPDATE语句,您可以轻松地更改表中的数据内容。下面是一个简单的示例代码,用于更新名为users表中ID为1的用户姓名:


query($sql) === TRUE) {
    echo "记录更新成功";
} else {
    echo "Error: " . $sql . "" . $conn->error;
}

$conn->close();
?>

删除数据

通过执行DELETE语句,您可以从数据库中删除特定记录或符合特定条件的记录。下面是一个简单的示例代码,用于删除名为users表中ID为2的用户:


query($sql) === TRUE) {
    echo "记录删除成功";
} else {
    echo "Error: " . $sql . "" . $conn->error;
}

$conn->close();
?>

总结

通过本文,您了解了如何使用PHP操作MySQL语句来实现常见的数据库操作,包括查询数据、更新记录和删除数据。掌握这些基本的数据库操作技能对于成为一名优秀的PHP开发人员至关重要。无论您是初学者还是有经验的开发人员,熟练掌握PHP和MySQL的结合将为您的项目带来更多可能性。

三、MySQL数据库操作语句大全,一篇搞定

一、数据库创建与删除

  • 创建数据库:CREATE DATABASE database_name;
  • 删除数据库:DROP DATABASE database_name;

二、表的创建与删除

  • 创建表:CREATE TABLE table_name (column1 datatype, column2 datatype, ...);
  • 删除表:DROP TABLE table_name;

三、数据的插入

  • 插入单行数据:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
  • 插入多行数据:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...), (value1, value2, ...), ...;

四、数据的查询

  • 查询所有数据:SELECT * FROM table_name;
  • 查询指定字段的数据:SELECT column1, column2, ... FROM table_name;
  • 条件查询:SELECT * FROM table_name WHERE condition;

五、数据的更新

  • 更新全部数据:UPDATE table_name SET column1 = value1, column2 = value2, ...;
  • 更新部分数据:UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;

六、数据的删除

  • 删除所有数据:DELETE FROM table_name;
  • 删除指定条件的数据:DELETE FROM table_name WHERE condition;

七、跨表查询

  • 内连接查询:SELECT * FROM table1 INNER JOIN table2 ON condition;
  • 左连接查询:SELECT * FROM table1 LEFT JOIN table2 ON condition;
  • 右连接查询:SELECT * FROM table1 RIGHT JOIN table2 ON condition;

四、MySQL数据库:如何使用SQL语句进行备份操作

在数据库管理和维护中,备份是一项至关重要的工作。MySQL作为最常用的开源关系型数据库管理系统之一,备份数据库是数据库管理中的基本操作之一。本文将介绍如何使用SQL语句来备份MySQL数据库,帮助读者更好地进行数据库管理。

选择适当的备份方法

在进行数据库备份之前,首先需要选择适当的备份方法。常见的备份方式包括逻辑备份和物理备份。逻辑备份是通过SQL语句导出数据库中的数据和结构,常见的工具有mysqldump等;而物理备份则是直接复制数据库文件,如使用系统命令cp或者使用专业的数据库备份工具。

使用SQL语句进行备份

对于小型数据库或者需要定制备份策略的用户,可以选择使用SQL语句来进行备份。下面是使用SQL语句进行逻辑备份和物理备份的方法。

逻辑备份

逻辑备份是通过导出SQL语句来备份数据库。常见的工具是mysqldump,通过以下命令可以对数据库进行逻辑备份:

        
            mysqldump -u 用户名 -p 数据库名 > 备份文件名.sql
        
    

其中,-u参数指定用户名,-p参数表示输入密码,数据库名为要备份的数据库名称,备份文件名为自定义的备份文件名。

物理备份

物理备份是直接复制数据库文件来进行备份。可以通过以下SQL语句进行物理备份:

        
            FLUSH TABLES WITH READ LOCK;
system cp -r 数据库目录 备份目录

首先通过FLUSH TABLES WITH READ LOCK;命令锁定表,然后通过系统命令cp将数据库文件复制到指定的备份目录。

备份策略和定时备份

除了备份方法,制定合理的备份策略和定时备份也是非常重要的。根据业务需求和数据重要性,制定不同级别的备份策略,如完整备份、增量备份、差异备份等。同时,可以利用系统的定时任务工具,如cron等,通过编写脚本实现备份定时执行。

总结

MySQL数据库备份是数据库管理中至关重要的一环,通过本文介绍的SQL语句备份方法和策略,读者可以更好地进行数据库备份和维护,确保数据安全和可靠性。

感谢您阅读本文,希望本文可以帮助您更好地掌握MySQL数据库备份的方法和技巧。

五、MySQL数据库删除语句大全,数据库删除操作技巧解析

MySQL数据库删除语句

MySQL数据库是一种常见的关系型数据库,删除操作是数据库中非常关键的一部分。在MySQL数据库中,删除操作不仅涉及到删除表中的数据,还可能涉及到删除整个表、数据库或者指定条件下的数据。

下面是MySQL数据库中常用的删除语句:

  • DELETE FROM table_name;: 这是一条基本的删除语句,用于删除指定表中的所有数据。
  • DELETE FROM table_name WHERE condition;: 这条语句可以根据指定条件删除表中的数据。
  • DROP TABLE table_name;: 使用此语句可以删除整个表。
  • DROP DATABASE database_name;: 用于删除整个数据库。

数据库删除操作技巧解析

在进行数据库删除操作时,需要特别小心,避免造成不可挽回的数据丢失。以下是一些建议:

  • 在执行删除操作之前,一定要确认好操作的表或数据,避免误删。
  • 如果要删除整个表或数据库,最好先备份数据,以防止误操作。
  • 谨慎使用带有"WHERE"条件的删除语句,确保条件准确,避免误删大量数据。
  • 在生产环境中,最好限制删除操作的权限,减少误操作的风险。

通过本文的介绍,相信大家对MySQL数据库的删除操作有了更清晰的认识,也能更加安全地进行数据库删除操作。

感谢您阅读本文,希望对您有所帮助。

六、mysql创建数据库语句

MySQL创建数据库语句详解

MySQL是一种广泛使用的关系型数据库管理系统,许多网站和应用程序都使用MySQL作为其后端数据库。本文将介绍MySQL创建数据库的语句以及其详细解析。

创建数据库

在MySQL中,可以使用CREATE DATABASE语句来创建一个新的数据库。下面是一个示例:


CREATE DATABASE mydatabase;

上述语句将创建一个名为mydatabase的数据库。

你还可以通过指定字符集和校对规则来创建数据库。例如:


CREATE DATABASE mydatabase
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;

上述语句将以字符集utf8mb4和校对规则utf8mb4_general_ci创建mydatabase数据库。

查看数据库

要查看已经存在的数据库列表,可以使用SHOW DATABASES语句。例如:


SHOW DATABASES;

通过该语句,你将获得一个包含所有存在数据库的列表。

删除数据库

如果想要删除一个已经存在的数据库,可以使用DROP DATABASE语句。下面是一个示例:


DROP DATABASE mydatabase;

该语句将删除名为mydatabase的数据库。请注意,在执行该操作之前,请确保你真的想要删除数据库,因为它将永久性删除其所有的数据。

使用数据库

在使用数据库之前,需要先选择该数据库。使用USE语句来选择要使用的数据库。例如:


USE mydatabase;

上述语句将选择数据库mydatabase,你可以在该数据库中执行各种数据库操作。

创建数据表

数据库中的数据以表的形式组织。要创建一个新的数据表,可以使用CREATE TABLE语句。下面是一个示例:


CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    salary DECIMAL(10,2)
);

上述语句将创建一个名为employees的表,并定义了idnameagesalary四个列。

你可以根据具体需求定义各个列的类型、长度和约束。

插入数据

要向表中插入数据,可以使用INSERT INTO语句。下面是一个示例:


INSERT INTO employees (name, age, salary)
VALUES ('John', 30, 5000.00);

上述语句将在employees表中插入一条新的记录。

查询数据

要从表中查询数据,可以使用SELECT语句。下面是一个示例:


SELECT * FROM employees;

上述语句将从employees表中检索所有记录。

更新数据

如果你想要修改表中的数据,可以使用UPDATE语句。下面是一个示例:


UPDATE employees
SET salary = 6000.00
WHERE id = 1;

上述语句将更新employees表中id为1的记录的salary字段。

删除数据

要删除表中的数据,可以使用DELETE FROM语句。下面是一个示例:


DELETE FROM employees
WHERE id = 1;

上述语句将删除employees表中id为1的记录。

总结

本文介绍了MySQL创建数据库的语句以及一些常见的数据库操作。创建数据库、查看数据库、删除数据库、使用数据库、创建数据表、插入数据、查询数据、更新数据和删除数据是在开发和维护MySQL数据库时常常使用的操作。希望本文对你在使用MySQL时有所帮助。

七、mysql数据库sql语句

MySQL数据库SQL语句的优化技巧

MySQL是目前最流行的开源关系型数据库管理系统之一,用于存储和管理大量的数据。在开发过程中,我们经常需要编写SQL语句来查询和操作数据库。但是,如果SQL语句编写不当或者数据库设计不规范,就会导致性能低下和查询效率低下的问题。本文将介绍一些优化MySQL数据库SQL语句的技巧,帮助你提升数据库的性能。

1. 选择合适的数据类型

在设计数据库时,选择合适的数据类型对于提升数据库性能至关重要。MySQL提供了多种数据类型,每种数据类型都有不同的存储空间和计算开销。如果选择了过大的数据类型,会占用过多的磁盘空间和内存资源。因此,需要根据实际需求选择最合适的数据类型。

例如,如果一个字段只存储0或1两个值,可以选择使用BIT数据类型,而不是使用TINYINT或INT数据类型。这样可以节省磁盘空间和提升查询效率。

2. 创建合适的索引

索引是一种用于加速数据检索的数据结构。在查询数据库时,索引可以帮助数据库快速定位到符合条件的数据,从而提高查询效率。但是,如果索引使用不当,也会导致性能下降。

在设计索引时,需要根据实际的查询需求和数据分布情况选择合适的字段作为索引。通常情况下,主键字段会自动创建索引,但是对于经常用于查询的字段,也可以考虑创建单独的索引。

在使用索引时,需要注意以下几点:

  • 避免过多的索引:每个索引都需要额外的磁盘空间和计算开销,过多的索引会导致插入、更新和删除操作变慢。
  • 避免使用过长的索引:较长的索引需要更多的磁盘空间,影响查询性能。
  • 避免使用不必要的复合索引:复合索引适用于多个字段组合查询,但是如果经常只使用其中的一部分字段,就没有必要创建复合索引。

3. 编写高效的SQL语句

编写高效的SQL语句是提升数据库性能的关键。以下是一些编写高效SQL语句的技巧:

  • 避免使用通配符:通配符(如%和_)会导致全表扫描,影响查询性能。如果可能的话,尽量避免使用通配符。
  • 使用JOIN优化查询:合理使用JOIN可以将多个表的查询合并为一条SQL语句,避免多次查询数据库。
  • 限制返回的数据量:在查询时,只返回实际需要的数据量,避免返回过多的数据。
  • 避免使用子查询:子查询会导致查询嵌套,影响查询性能。如果可能的话,尽量避免使用子查询。

4. 避免频繁的更新和删除操作

频繁的更新和删除操作会引起数据库的碎片化,导致性能下降。因此,在设计数据库时,需要合理规划数据的更新和删除操作。

以下是一些减少更新和删除操作的技巧:

  • 使用批量操作:将多个更新和删除操作合并为一个批量操作,减少与数据库的交互次数。
  • 定期清理无用数据:定期清理无用数据可以减少数据库的碎片化,并提升查询性能。
  • 使用软删除:软删除是指通过设置一个标志位来标记数据是否被删除,而不是直接删除数据。这样可以减少实际的删除操作,提高性能。

5. 定期优化数据库

优化数据库不仅仅是一次性的工作,需要定期进行。以下是一些定期优化数据库的技巧:

  • 统计分析数据库性能:通过统计分析数据库的性能指标,如查询时间、索引使用情况等,可以找出性能瓶颈,并采取相应的优化措施。
  • 重新生成索引:如果数据库的数据发生了较大变动,可以考虑重新生成索引,以提高索引的效率。
  • 清理数据库日志:数据库日志可能会占用大量的磁盘空间,定期清理数据库日志可以释放磁盘空间。

总结:

通过选择合适的数据类型、创建合适的索引、编写高效的SQL语句和避免频繁的更新和删除操作,可以提升MySQL数据库的性能。此外,定期优化数据库也是保证数据库性能稳定的重要步骤。希望本文介绍的优化技巧对你在实际开发中优化MySQL数据库SQL语句有所帮助。

八、MySQL数据库新增字段的SQL语句及操作步骤

MySQL数据库作为一款常用的关系型数据库管理系统,常常需要对已有的表进行结构调整,其中包括新增字段操作。下面我们将详细介绍在MySQL数据库中新增字段的SQL语句及操作步骤。

1. SQL语句新增字段:

要在MySQL数据库中对已有的表新增字段,可以使用如下的SQL语句:

        
            ALTER TABLE table_name
            ADD column_name data_type constraint;
        
    

其中,table_name是要修改的表名,column_name是要新增的字段名,data_type是新字段的数据类型,constraint是字段的约束(可选)。

2. 操作步骤:

除了直接使用SQL语句外,我们也可以通过数据库管理工具执行以下操作步骤来新增字段:

  1. 登录数据库管理工具,连接到目标数据库。
  2. 找到要新增字段的表,右键选择“设计”或“修改表结构”。
  3. 在字段列表的末尾添加新字段,并设置对应的数据类型和约束。
  4. 保存修改,并在弹出的对话框中确认提交SQL执行。

通过以上SQL语句及操作步骤,我们可以在MySQL数据库中轻松地对已有表进行新增字段的操作。希望本文内容对您有所帮助。

感谢您阅读本文,希望能为您在MySQL数据库中新增字段提供指导和帮助。

九、MySQL数据库SQL语句:学习SQL命令,掌握数据库操作技巧

SQL语句介绍

SQL(Structured Query Language,结构化查询语言)是一种专门用来管理关系数据库的语言,它包括多种操作类型,如数据查询、更新、删除等。在使用MySQL数据库时,熟练掌握SQL语句是非常重要的。

SQL语句基础

在MySQL数据库中,常用的SQL语句包括:SELECT (用于从数据库中选取数据)、INSERT INTO (用于插入新记录)、UPDATE (用于更新数据)、DELETE (用于从数据库中删除记录)等基本操作。

SQL语句高级应用

除了基本的增删改查外,还有一些高级应用的SQL语句,比如JOIN (用于合并表中的行)、GROUP BY (用于根据一个或多个列对结果集进行分组)、ORDER BY (用于对结果集进行排序)等,通过灵活运用这些语句可以实现更复杂的数据操作。

SQL语句实例

例如,要查询数据库中员工表的员工号和姓名,可以使用如下的SQL语句: SELECT employee_id, employee_name FROM employee_table;

要向员工表中插入一条新的员工记录,可以使用如下的SQL语句: INSERT INTO employee_table (employee_id, employee_name, department) VALUES (001, 'John Smith', 'IT');

此外,还可以通过SQL语句更新和删除数据库中的记录,这些操作均需要谨慎执行,避免造成不可挽回的数据丢失。

学习SQL的重要性

熟练掌握SQL语句对DBA(数据库管理员)和开发人员来说都至关重要。通过有效的SQL语句能够高效地操作数据库,提高工作效率,避免不必要的错误操作。而对于从事数据分析的人员来说,了解SQL也是必备的技能之一。

感谢您阅读本文,希望通过本文能够帮助您更好地了解MySQL数据库中的SQL语句,掌握基本操作并开启数据库操作的学习之旅。

十、如何查看mysql数据库操作记录日志?

MySQL 8.0 重新定义了错误日志输出和过滤,改善了原来臃肿并且可读性很差的错误日志。比如增加了 JSON 输出,在原来的日志后面以序号以及 JSON 后缀的方式展示。比如我机器上的 MySQL 以 JSON 保存的错误日志 mysqld.log.00.json:[root@centos-ytt80 mysql80]# jq . mysqld.log.00.json{ "log_type": 1, "prio": 1, "err_code": 12592, "subsystem": "InnoDB", "msg": "Operating system error number 2 in a file operation.", "time": "2019-09-03T08:16:12.111808Z", "thread": 8, "err_symbol": "ER_IB_MSG_767", "SQL_state": "HY000", "label": "Error"}{ "log_type": 1, "prio": 1, "err_code": 12593, "subsystem": "InnoDB", "msg": "The error means the system cannot find the path specified.", "time": "2019-09-03T08:16:12.111915Z", "thread": 8, "err_symbol": "ER_IB_MSG_768", "SQL_state": "HY000", "label": "Error"}{ "log_type": 1, "prio": 1, "err_code": 12216, "subsystem": "InnoDB", "msg": "Cannot open datafile for read-only: './ytt2/a.ibd' OS error: 71", "time": "2019-09-03T08:16:12.111933Z", "thread": 8, "err_symbol": "ER_IB_MSG_391", "SQL_state": "HY000", "label": "Error"}以 JSON 输出错误日志后可读性和可操作性增强了许多。这里可以用 Linux 命令 jq 或者把这个字串 COPY 到其他解析 JSON 的工具方便处理。只想非常快速的拿出错误信息,忽略其他信息。[root@centos-ytt80 mysql80]# jq '.msg' mysqld.log.00.json"Operating system error number 2 in a file operation.""The error means the system cannot find the path specified.""Cannot open datafile for read-only: './ytt2/a.ibd' OS error: 71""Cannot calculate statistics for table `ytt2`.`a` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue.""Cannot calculate statistics for table `ytt2`.`a` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue."使用 JSON 输出的前提是安装 JSON 输出部件。

INSTALL COMPONENT 'file://component_log_sink_json';

完了在设置变量 SET GLOBAL log_error_services = 'log_filter_internal; log_sink_json';

格式为:过滤规则;日志输出;[过滤规则]日志输出;查看安装好的部件mysql> select * from mysql.component;+--------------+--------------------+---------------------------------------+| component_id | component_group_id | component_urn |+--------------+--------------------+---------------------------------------+| 2 | 1 | file://component_log_sink_json |+--------------+--------------------+---------------------------------------+3 rows in set (0.00 sec)

现在设置 JSON 输出,输出到系统日志的同时输出到 JSON 格式日志。mysql> SET persist log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json';Query OK, 0 rows affected (0.00 sec)

来测试一把。我之前已经把表 a 物理文件删掉了。mysql> select * from a;ERROR 1812 (HY000): Tablespace is missing for table `ytt2`.`a`.

现在错误日志里有 5 条记录。

[root@centos-ytt80 mysql80]# tailf mysqld.log

2019-09-03T08:16:12.111808Z 8 [ERROR] [MY-012592] [InnoDB] Operating system error number 2 in a file operation.

2019-09-03T08:16:12.111915Z 8 [ERROR] [MY-012593] [InnoDB] The error means the system cannot find the path specified.

2019-09-03T08:16:12.111933Z 8 [ERROR] [MY-012216] [InnoDB] Cannot open datafile for read-only: './ytt2/a.ibd' OS error: 71

2019-09-03T08:16:12.112227Z 8 [Warning] [MY-012049] [InnoDB] Cannot calculate statistics for table `ytt2`.`a` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue.

2019-09-03T08:16:14.902617Z 8 [Warning] [MY-012049] [InnoDB] Cannot calculate statistics for table `ytt2`.`a` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue.

JSON 日志里也有 5 条记录。

[root@centos-ytt80 mysql80]# tailf mysqld.log.00.json

{ "log_type" : 1, "prio" : 1, "err_code" : 12592, "subsystem" : "InnoDB", "msg" : "Operating system error number 2 in a file operation.", "time" : "2019-09-03T08:16:12.111808Z", "thread" : 8, "err_symbol" : "ER_IB_MSG_767", "SQL_state" : "HY000", "label" : "Error" }

{ "log_type" : 1, "prio" : 1, "err_code" : 12593, "subsystem" : "InnoDB", "msg" : "The error means the system cannot find the path specified.", "time" : "2019-09-03T08:16:12.111915Z", "thread" : 8, "err_symbol" : "ER_IB_MSG_768", "SQL_state" : "HY000", "label" : "Error" }

{ "log_type" : 1, "prio" : 1, "err_code" : 12216, "subsystem" : "InnoDB", "msg" : "Cannot open datafile for read-only: './ytt2/a.ibd' OS error: 71", "time" : "2019-09-03T08:16:12.111933Z", "thread" : 8, "err_symbol" : "ER_IB_MSG_391", "SQL_state" : "HY000", "label" : "Error" }

{ "log_type" : 1, "prio" : 2, "err_code" : 12049, "subsystem" : "InnoDB", "msg" : "Cannot calculate statistics for table `ytt2`.`a` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue.", "time" : "2019-09-03T08:16:12.112227Z", "thread" : 8, "err_symbol" : "ER_IB_MSG_224", "SQL_state" : "HY000", "label" : "Warning" }

{ "log_type" : 1, "prio" : 2, "err_code" : 12049, "subsystem" : "InnoDB", "msg" : "Cannot calculate statistics for table `ytt2`.`a` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue.", "time" : "2019-09-03T08:16:14.902617Z", "thread" : 8, "err_symbol" : "ER_IB_MSG_224", "SQL_state" : "HY000", "label" : "Warning" }

那可能有人就问了,这有啥意义呢?只是把格式变了,过滤的规则我看还是没变。那我们现在给第二条日志输出加过滤规则先把过滤日志的部件安装起来

INSTALL COMPONENT 'file://component_log_filter_dragnet';

mysql> SET persist log_error_services = 'log_filter_internal; log_sink_internal; log_filter_dragnet;log_sink_json';

Query OK, 0 rows affected (0.00 sec)

只保留 error,其余的一律过滤掉。SET GLOBAL dragnet.log_error_filter_rules = 'IF prio>=WARNING THEN drop.';

检索一张误删的表mysql> select * from a;ERROR 1812 (HY000): Tablespace is missing for table `ytt2`.`a`.

查看错误日志和 JSON 错误日志发现错误日志里有一条 Warning,JSON 错误日志里的被过滤掉了。2019-09-03T08:22:32.978728Z 8 [Warning] [MY-012049] [InnoDB] Cannot calculate statistics for table `ytt2`.`a` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue.

再举个例子,每 60 秒只允许记录一个 Warning 事件mysql> SET GLOBAL dragnet.log_error_filter_rules = 'IF prio==WARNING THEN throttle 1/60.';Query OK, 0 rows affected (0.00 sec)

多次执行mysql> select * from b;ERROR 1812 (HY000): Tablespace is missing for table `ytt2`.`b`.mysql> select * from b;ERROR 1812 (HY000): Tablespace is missing for table `ytt2`.`b`.mysql> select * from b;ERROR 1812 (HY000): Tablespace is missing for table `ytt2`.`b`.

现在错误日志里有三条 warning 信息

2019-09-03T08:49:06.820635Z 8 [Warning] [MY-012049] [InnoDB] Cannot calculate statistics for table `ytt2`.`b` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue.

2019-09-03T08:49:31.455907Z 8 [Warning] [MY-012049] [InnoDB] Cannot calculate statistics for table `ytt2`.`b` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue.

2019-09-03T08:50:00.430867Z 8 [Warning] [MY-012049] [InnoDB] Cannot calculate statistics for table `ytt2`.`b` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue.

mysqld.log.00.json 只有一条{ "log_type" : 1, "prio" : 2, "err_code" : 12049, "subsystem" : "InnoDB", "msg" : "Cannot calculate statistics for table `ytt2`.`b` because the .ibd file is missing. Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-troubleshooting.html for how to resolve the issue.", "time" : "2019-09-03T08:49:06.820635Z", "thread" : 8, "err_symbol" : "ER_IB_MSG_224", "SQL_state" : "HY000", "and_n_more" : 3, "label" : "Warning" }

总结,我这里简单介绍了下 MySQL 8.0 的错误日志过滤以及 JSON 输出。MySQL 8.0 的component_log_filter_dragnet 部件过滤规则非常灵活,可以参考手册,根据它提供的语法写出自己的过滤掉的日志输出。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
点击我更换图片