首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mysql: ALTER table而不锁定表?

Mysql: ALTER table而不锁定表是指在进行表结构修改操作时,尽量减少对表的锁定时间,以提高数据库的并发性能和可用性。在传统的ALTER TABLE操作中,会对被修改的表进行锁定,导致其他用户无法对该表进行读写操作,从而影响系统的正常运行。

为了避免表锁定带来的问题,Mysql引入了一些技术和优化策略,使得ALTER TABLE操作可以在不锁定表的情况下进行。下面是一些常用的方法:

  1. Online DDL(在线DDL):Mysql 5.6版本及以上引入了Online DDL功能,可以在进行表结构修改的同时,允许其他用户对表进行读写操作。Online DDL通过使用临时表和重定向机制来实现,保证了数据的一致性和完整性。
  2. InnoDB引擎:使用InnoDB作为存储引擎可以提供更好的并发性能和事务支持。InnoDB引擎支持在线DDL操作,可以在不锁定表的情况下进行表结构修改。同时,InnoDB引擎还提供了一些优化参数,如innodb_online_alter_log_max_size和innodb_online_alter_log_trigger参数,可以进一步优化在线DDL操作的性能和效果。
  3. PT Online Schema Change工具:Percona Toolkit是一个开源的MySQL工具集,其中包含了PT Online Schema Change工具,可以实现在不锁定表的情况下进行表结构修改。该工具通过创建一个与原表结构相同的临时表,并通过触发器将数据同步到临时表中,最后再将临时表重命名为原表,完成表结构修改。

总结起来,Mysql提供了多种方法来实现在不锁定表的情况下进行ALTER TABLE操作,以提高数据库的并发性能和可用性。通过使用在线DDL功能、选择合适的存储引擎(如InnoDB)、借助第三方工具(如PT Online Schema Change),可以有效地减少对表的锁定时间,提高系统的稳定性和性能。

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

相关·内容

什么是MySQL alter

⭐本文介绍⭐ 当我们需要修改数据名或者修改数据表字段时,就需要使用到MySQL ALTER命令。 开始本章教程前让我们先创建一张名为:testalter_tbl。...命令及 DROP 子句来删除以上创建的 i 字段: mysql> ALTER TABLE testalter_tbl DROP i; 如果数据中只剩余一个字段则无法使用DROP来删除字段。...MySQL 中使用 ADD 子句来向数据中添加列,如下实例在 testalter_tbl 中添加 i 字段,并定义数据类型: mysql> ALTER TABLE testalter_tbl ADD...mysql> ALTER TABLE testalter_tbl -> MODIFY j BIGINT NOT NULL DEFAULT 100; 如果你设置默认值,MySQL会自动设置该字段默认为...尝试以下实例将数据 testalter_tbl 重命名为 alter_tbl: mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl; ALTER

67010

alter tableMySQL出现Waiting for table metadata lock的场景浅析及解决方案

另外一个session 对A进行alter,出现waiting for table metadata lock ---- MySQL版本为5.6.12。...在进行alter table操作时,有时会出现Waiting for table metadata lock的等待场景。...一般alter table的操作过程中(见下图),在after create步骤会获取metadata 独占锁,当进行到altering table的过程时(通常是最花时间的步骤),对该的读写都可以正常进行...(当然,也并不是所有类型的alter操作都能online的,具体可以参见官方手册:http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html...总之,alter table的语句是很危险的,在操作之前最好确认对要操作的没有任何进行中的操作、没有未提交事务、也没有显式事务中的报错语句。

3.2K80
  • 加速MySQLalter table操作(书摘备查)

    https://blog.csdn.net/wzy0623/article/details/53908035 MySQLalter table性能在很大的时候会出现问题。...MySQL执行大部分更改操作都是新建一个需要的结构的空,然后把所有老的数据插入到新,最后删除旧表。这会耗费很多时间,尤其是在内存紧张,很大并有很多索引的时候。...不是所有的alter table操作都会导致重建。例如,可以通过两种方式创建或去掉列的默认值(一种快、一种慢)。...Handler_write 1000 理论上,MySQL能跳过构建一个新的方式。列的默认值实际保存在的.frm文件中,因此可以接触更改它。...用读取锁刷新该。 重命名第2个的.frm和.MYI文件,这样MySQL就可以把它们用在第1个上。 释放读锁。 使用repair table创建的索引。

    1.4K31

    新特性解读 | MySQL8.0 ALTER TABLE

    ---一、前言MySQL 8.0.29之前,在线 DDL 操作中即时添加列只能添加在的最后一列,对于在某个具体列后面快速添加列很不方便,MySQL 8.0.29 扩展了对 ALTER TABLE …...--report-interval=2 --threads=10 prepare1、任一位置即时添加列原始结构如下:图片在sbtest1任一位置即时添加列:k列后面添加k2列:mysql> ALTER...而在8.0.29之前的版本,仅支持在最后一列即时添加列,不支持在任一位置即时添加列,如下8.0.27中操作:图片可以看到,同样2千万行的通过默认的ALGORITHM在任一位置添列耗时7分22秒,...2、即时删除列MySQL 8.0.29 开始,ALTER TABLE … ALGORITHM=INSTANT支持删除某列。...三、小结ALTER TABLE … ALGORITHM=INSTANT 的新特性,可以在的任一位置添加一列或多列,也可以快速的删除某列,极大的提高了在线 DDL 的效率。

    1K80

    新特性解读 | MySQL8.0 ALTER TABLE … ALGORITHM=INSTANT

    ---- 一、前言 MySQL 8.0.29 之前,在线 DDL 操作中即时添加列只能添加在的最后一列,对于在某个具体列后面快速添加列很不方便,MySQL 8.0.29 扩展了对 ALTER TABLE...列: mysql> ALTER TABLE sbtest1 ADD COLUMN k2 int(10) AFTER k,ALGORITHM=INSTANT; 可以看到,2千万的在任一位置即时添加列在秒级内完成...分22秒, ALGORITHM=INSTANT 仅支持默认在最后一列即时添加列。...2、即时删除列 MySQL 8.0.29 开始,ALTER TABLE … ALGORITHM=INSTANT 支持删除某列。...三、小结 ALTER TABLE … ALGORITHM=INSTANT 的新特性,可以在的任一位置添加一列或多列,也可以快速的删除某列,极大的提高了在线 DDL 的效率。

    2.1K20

    SQL ALTER TABLE 语句- 灵活修改结构和数据类型

    SQL ALTER TABLE 语句 SQL ALTER TABLE 语句用于在现有中添加、删除或修改列,也可用于添加和删除各种约束。...ALTER TABLE - 添加列 要在中添加列,请使用以下语法: ALTER TABLE 名 ADD 列名 数据类型; 以下 SQL 向 "Customers" 添加了一个 "Email" 列:...ALTER TABLE 名 DROP COLUMN 列名; 以下 SQL 从 "Customers" 中删除了 "Email" 列: ALTER TABLE Customers DROP COLUMN...Email; ALTER TABLE - 重命名列 要在中重命名列,请使用以下语法: ALTER TABLE 名 RENAME COLUMN 旧名 TO 新名; ALTER TABLE - 修改数据类型...要更改中列的数据类型,请使用以下语法: 对于 SQL Server / MS Access: ALTER TABLE ALTER COLUMN 列名 数据类型; 对于 MySQL / Oracle

    75810

    MySQL技能完整学习列表5、数据库操作——1、创建数据库和——2、修改结构(ALTER TABLE

    创建数据库和操作 MySQL创建数据库的操作相对直接明了。以下是详细步骤和示例: 首先,您需要具有适当的权限才能在MySQL中创建数据库。...修改结构(ALTER TABLEMySQL中的ALTER TABLE语句用于修改现有的结构。使用此语句,您可以添加、删除或修改列,更改的字符集或排序规则,重命名表,以及进行其他结构更改。...以下是ALTER TABLE语句的一些常见用法和示例: 1、添加新列: 您可以使用ADD子句向中添加新列。...例如,要在students的lastname列上添加索引,可以使用以下语句: ALTER TABLE students ADD INDEX (lastname); 8、修改的字符集和排序规则 如果您需要更改的字符集或排序规则...使用ALTER TABLE语句时,请确保在执行任何结构更改之前备份数据库或。这些更改可能会影响数据完整性或查询性能,并且在某些情况下可能需要重新构建或重新索引数据。

    45010

    MYSQL 5.7 到底 OPTIMIZE Table塞 DML

    问题的起因是另外某篇文字中,对于optimize table 理解不深,说出optimize table 时会和 vacuum full 一样阻塞的DML操作,马上就有好友指出,你说的不对,并拿出evidence...所以借此篇,1来证明optimize table 阻塞DML 2 表示对好友lmongo的感谢, 有一个能指出你错误,并大胆友善说出来的人,不多,要感谢。...然后对一个有上千万数据库的进行optimize , alter table engine = innodb; alter table force;的操作。...而我为什么会有这个错误的概念,主要还是对MYSQL 的部分知识停留在MYSQL 5.6 或更早的知识记忆中。...另外如果是大,需要做optimize table 时如果中包含大量的索引,也可以直接先清理一些,不常用的索引,加速optimize table 的速度。

    3.2K30

    MySQL 不停机主从搭建

    MySQL主从搭建分几种场景 无业务数据,初始化搭建 有业务数据,临时扩展 初始化的搭建很简单,涉及数据业务,所以锁、停机等都不影响,但是更多时候是业务到一定阶段,才会涉及到横向扩展,需要做主从,...读写分离等来提升服务性能 这个时候,数据业务不能中断,又需要快速进行扩展提升性能,只能在不停机、不停服务的情况下扩展,就需要用到下面介绍的这种方法来做数据库主从 当然还是有前提条件,如果你原本MySQL...TRANSACTION 语句,开启单一事务,此时加锁,仅仅是为了获取准确的master-data中的binlogfile和pos信息,在开启事务后,锁已经释放了,所以对业务影响很小 通过以上两个参数,可以在不长时间锁的情况下获取准确的...to master_host='ip',master_user='slave',master_port=port,master_password='password',master_log_file='mysql-bin.file

    2.9K10

    MySQL 锁机制(上) -- 全局锁与级锁

    按照锁定范围分 按照锁定范围,mysql 的锁可以分为: 全局锁 — 锁定整个 mysql 的全局执行 级锁 — 锁定单个 行级锁 — 锁定单条或多条行记录 行级锁又可以进一步细分为: 记录锁 —...意向锁就是我们这里说的“某些行已经加了锁”的状态标识,所有的共享锁加锁前都要对表加意向共享锁,排它锁加锁前,都要对表加意向排它锁,意向锁之间互斥。 3.2.1....锁也同样可以通过 unlock tables 命令来解锁。 由于 innodb 支持行锁,锁定范围过大,通常是不被使用的。 5.2....因此,在执行 alter table 语句时,一定要检查是否此时上有事务或慢查询在执行。...MariaDB 为 alter table 语句添加了超时参数,来解决这个问题: ALTER TABLE tbl_name NOWAIT add column … ALTER TABLE tbl_name

    2.1K10
    领券