首页
学习
活动
专区
圈层
工具
发布

mysql 表修改日志

基础概念

MySQL 表修改日志是指记录 MySQL 数据库表结构变更的日志。这些变更可能包括添加、删除或修改列、索引、表约束等。MySQL 提供了几种机制来记录这些变更,例如通过二进制日志(Binary Log)和慢查询日志(Slow Query Log)。

相关优势

  1. 数据恢复:通过表修改日志,可以在数据丢失或损坏时恢复到之前的状态。
  2. 审计:可以追踪数据库表的变更历史,用于审计和合规性检查。
  3. 故障排查:在出现问题时,可以通过查看表修改日志来了解最近的变更,帮助快速定位问题。

类型

  1. 二进制日志(Binary Log):记录所有改变数据库数据或结构的 SQL 语句,以事件形式记录,还包含语句所执行的消耗的时间。
  2. 慢查询日志(Slow Query Log):记录执行时间超过设定阈值的 SQL 语句,有助于优化查询性能。
  3. 通用查询日志(General Query Log):记录所有客户端连接信息和执行的 SQL 语句,但由于其对性能的影响,通常不建议在生产环境中使用。

应用场景

  • 数据库备份与恢复:在备份过程中,可以通过二进制日志进行增量备份,以减少备份时间和存储空间。
  • 数据库审计:对于需要严格审计的应用,可以通过表修改日志来追踪数据变更。
  • 性能优化:通过慢查询日志,可以发现并优化执行效率低下的 SQL 语句。

遇到的问题及解决方法

问题:为什么二进制日志没有记录某些表修改?

原因

  • 可能是因为 binlog_format 设置为 STATEMENT,并且某些 SQL 语句无法被正确地记录。
  • 或者是因为 binlog_do_dbbinlog_ignore_db 设置导致某些数据库的变更没有被记录。

解决方法

  • 检查并修改 binlog_format 设置为 ROWMIXED,以确保所有变更都能被记录。
  • 确保 binlog_do_dbbinlog_ignore_db 设置正确,以包含需要记录的数据库。
代码语言:txt
复制
-- 修改 binlog_format
SET GLOBAL binlog_format = 'ROW';

-- 查看当前的 binlog_format 设置
SHOW VARIABLES LIKE 'binlog_format';

-- 查看 binlog_do_db 和 binlog_ignore_db 设置
SHOW VARIABLES LIKE 'binlog_do_db';
SHOW VARIABLES LIKE 'binlog_ignore_db';

问题:如何查看二进制日志?

解决方法

  • 使用 mysqlbinlog 工具查看二进制日志文件。
代码语言:txt
复制
mysqlbinlog /path/to/binlog-file
  • 在 MySQL 客户端中使用 SHOW BINLOG EVENTS 命令查看二进制日志事件。
代码语言:txt
复制
SHOW BINLOG EVENTS IN 'binlog-file-name' FROM pos LIMIT [offset,] row_count;

参考链接

通过以上信息,您可以更好地理解和应用 MySQL 表修改日志,解决相关问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL修改表的字段

MySQL修改表的字段 MySQL 修改表字段的方法有两种: ALTER TABLE MODIFY COLUMN。...1、ALTER TABLE 方法 ALTER TABLE 方法用于修改表结构,包括增加、删除和修改表字段。...其语法如下: ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型; 其中,表名 表示要修改的表名,字段名 表示要修改的字段名,字段类型 表示修改后的字段类型。...例如,修改表 users 的字段 username 的类型为 VARCHAR(50),可以使用以下 SQL 语句: ALTER TABLE users MODIFY COLUMN username VARCHAR...其语法如下: ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 [属性]; 其中,表名 表示要修改的表名,字段名 表示要修改的字段名,字段类型 表示修改后的字段类型,属性 表示修改后的字段属性

9.6K10

亿级大表如何修改表结构【MySQL】

三、原表直接修改 对于用户访问量少的时间段进行表结构修改或者类似12306这种,凌晨11点-6点进行数据维护,直接停服修改表结构。...简单的来说,就是新建一张表,然后将你需要修改的表结构先添加上去,因为是空表,所以可以瞬间完成修改。后面再通过数据同步工具,将原表的数据导入到新表中。...当数据导入差不多的时候,将原表修改为原表_copy,新表修改为原表的名称,这一步也叫做表切换。...4.3 切换表数据丢失问题 切换表名这一步,数据库层面做不了限制,首先MYSQL不支持在锁住表的情况下,再去修改表名。...五、总结 直接修改表结构既然有这么多问题,那为什么大多数企业都选择直接修改表结构呢,而不是copy替换原表的形式呢。

6.5K10
  • MySQL中的表结构修改方法

    阅读目录 目的 表结构修改的基础语法 进阶操作 注意事项 目的 在日常的测试工作中,无论测试项目准备阶段还是测试执行阶段,团队成员经常会需要使用SQL语句进行测试数据的制作和准备,比较常用的就是增删查改等一些基础操作...,但偶尔也会涉及到修改表结构的极端情况。...表结构修改的基础语法 如有一张表"tb_user_info"结构为: +--------+----------+------+-----+---------+-------+ | Field | Type...30) | YES | | NULL | | +--------+----------+------+-----+---------+-------+ 下面就先做一些基础的表结构修改操作...drop default; 【字段无默认值的情况下,直接定义默认值即可】 alter table tb_user_info alter login_name set default 'BBB'; 修改表名

    6.1K10

    MySQL数据库(九):修改表结构

    前言: 1.修改表结构的时候受表中已存储数据的限制 2.查看表结构 desc 表名; 1.修改表结构 格式: alter  table  表名  修改动作; 2.修改动作 <add,modify...格式: #修改一个 modify  字段名  新类型(宽度) 约束条件; #修改多个 modify  字段名  新类型(宽度) 约束条件,modify  字段名  新类型(宽度) 约束条件; 例子:...change name newname char(5) not null; alter table  t25 change age newage int(2) not null default 300; 2.修改表名...格式: alter  table  源表名  rename  [to] 新表名; 例子: 将t20表明修改为newt20 alter table  t20 rename newt20; 3.复制表...*注:源表表结构中key列的值不会被复制给新表 格式: create table 新表名  SQL查询; 例子: 复制newt20表的所有字段到t200表 create table t200 select

    9.7K50

    MySQL-在线处理大表数据 & 在线修改大表的表结构

    这里我们列举几个例子,来看下如何具体的优化SQL ---- 示例 大表数据的分批处理 分批处理大表的数据,特别是主从复制的MySQL集群, 每处理一批最好留一点时间,给主从同步复制留一点时间。...举个例子 有个大表 1千万数据,我们要修改其中的100万, 那么最好分多个批次来更新,每次5000或者1万,根据自己服务器的性能合理的调整。 存过如下, 根据自己的业务调整。...SELECT ROW_COUNT() INTO v_rows; SELECT SLEEP(5); END WHILE; END$$ DELIMITER; ---- 修改大表的表结构...当一个表中的数据量很大的时候,我们对表中的列的字段类型进行修改,比如改变字段的宽度时会锁表,从而影响业务。...其二 无法解决主从数据库延迟的问题 方案一 : 从表修改,主从切换 现在从服务器上修改,然后主从切换。 切换完以后在此修改新的从服务器。

    4.4K50

    mysql修改数据库表和表中的字段的编码格式的修改

    https://blog.csdn.net/luo4105/article/details/50804148 建数据库的时候,已经选择了编码格式为UTF-8 但是用PDM生成的脚本导进去的时候却奇怪的发现表和表的字段的编码格式却是...GBK,一个一个却又觉得麻烦,在网上找了一下办法 一个是修改表的编码格式的 ALTER TABLE `table` DEFAULT CHARACTER SET utf8; 但是虽然修改了表的编码格式,...但是字段的编码格式并没有修改过来,没有什么卵用 又发现一条语句,作用是修改字段的编码格式 ALTER TABLE `tablename` CHANGE `字段名1` `字段名2` VARCHAR(36...) CHARACTER SET utf8 NOT NULL; 但是一次只能修改一个字段,还是很麻烦,不方便。...最后找到这么一条语句 alter table `tablename` convert to character set utf8; 它可以修改一张表的所有字段的编码格式,顿时方便多了

    11.1K20

    在生产环境中修改MySQL库表结构

    背景 如果我们需要在生产环境中修改MySQL数据库中某个库表的结构。那么,需要考虑哪些要点,才能确保不会出问题呢? 碰到的问题 这里先描述一下我在生产环境MySQL数据库中修改库表结构时遇到的问题。...在开发过程中,我发现MySQL中某个库表需要添加一个字段,比如库表: 需要给Sname后面添加一个字段:Sheight。...这里解释下metadata的概念,metadata lock(MDL)也就是元数据锁,它是一种表级锁。 各种对该表的操作,比如增删改查,都会占有MDL的读锁。当修改表结构时,会占用MDL的写锁。...但是,如果在对表增删改查的同时,要对表结构进行修改,那么就会造成锁等待的状态。...如果有一个长事务在对该表进行操作,那么在修改表结构时,就会有状态:Waiting for table metadata lock,也就是锁等待。

    2.8K20

    MYSQL中约束及修改数据表

    MYSQL中约束及修改数据表 28:约束 约束保证数据的完整性和一致性 约束分为表级约束和列级约束 约束类型包括:     NOT NULL(非空约束)     PRIMARY KEY(主键约束)     ...如果外键列不存在索引的话,MYSQL将自动创建索引 ? ?...33:外键约束的参照操作 CASCADE:从父表删除或者更新且自动删除或者更新子表中匹配的行 《在两表中插入记录,必须先在父表中插入记录》 SET NULL:从父表删除或者更新行,并且设置子表中的外键列为...35:修改数据表(修改,删除) 添加单列 ALTER TABLE 数据表名 ADD 列名称 列定义 [FIRST] 指定列 添加单列(不可以指定位置) ......修改列定义 ? ? 修改列名称 ? ? 修改数据表的名字 ? ? ? ?

    4.2K80

    MySQL数据库: 添加列、修改列、删除列、修改列属性、修改表名(包括MySQL、SQLServer、Oracle)

    我们针对数据库的增删改查语句比较熟悉了,但是今天建立数据库的时候想在固定位置通过语句添加一列,做以下总结: ALTER TABLE:添加,修改,删除表的列,约束等表的定义。...查看列:desc 表名; 修改表名:alter table t_book rename to t_user; 添加列:ALTER TABLE t_userADD COLUMN tianjia INT...(后面表示是在id列后添加) AFTER id; 删除列:alter table 表名 drop column 列名; 修改列名MySQL: alter table t_user change...内置的存储过程,用与修改表的定义。...namevarchar(22);** 注意:这里表名和列名是否加 ‘’ 都可以 针对上述部分语句做一个示例 1.我的是mysql数据库,t_user表: 2.在id的列后添加tianjia列:

    4.1K10

    如何在修改Mysql表结构时不影响读写?

    线上数据库难免会有修改表结构的需求,MySQL 在修改表结构时会锁表,这就会影响读写操作,小表还好,一会儿就修改完成了,但大表会比较麻烦,下面看一个解决方案 解决思路 (1)新建一个表,结构就是要修改后的结构...(2)在旧表上建立触发器,旧表更新数据时同步到新表 (3)把旧表数据复制到新表 (4)数据同步完成后,执行重命名操作,交换新旧表 (5)删除旧表及触发器 实现方式 这个解决思路已经有了很成熟的工具,数据库服务公司...Percona 提供了 MySQL Toolkit 工具集,其中的 pt-online-schema-change 就是用来进行线上的表结构修改,不会阻塞读写 使用示例 pt-online-schema-change...从结果信息中可以看出这个工具的执行过程 参数说明 --user、--password、--host 数据库的连接信息 --alter 指定要执行的修改操作,例如修改表结构的语句为: alter table...percona-toolkit/ centos7 安装示例 下载 rpm 版本 安装依赖包 yum install epel-release-7-5.noarch yum install perl-DBD-MySQL

    3.6K60

    MySQL在线DDL修改表结构的简单经验分享

    UPDATE DELETE 操作 从源表拷贝数据到临时表,在拷贝过程中,对源表的更新操作会写入到新建表中 将临时表和源表 rename(需要元数据修改锁,需要短时间锁表) 删除源表和触发器,完成表结构的修改...修改操作的具体步骤是: 在主库上读写行数据; 在从库上读取二进制日志事件,将变更应用到主库上; 在从库上查看表格式、字段、主键、总行数等; 在从库上读取 gh-ost 内部事件日志(比如心跳); 在主库上完成表切换...仍然可以在上面查看主从复制延迟,限制如下: 主库必须产生 Row 格式的二进制日志; 启动 gh-ost 时必须用--allow-on-master 选项来开启这种模式; 模式三、在从库上修改和测试 这种模式会在从库上做修改...四、小结 对于 MySQL 在线 DDL 修改大表,gh-ost 和 pt-osc 都是很不错的选择,前提是不能有坑爹的触发器和外键!当然,实在是遇上了也没什么办法,只能硬扛!...以上,就是我在 MySQL 在线 DDL 修改表结构的一些经验分享,希望路过的大神如果有更好的方案能指点一二,不吝赐教。

    3.9K70
    领券