IT评测·应用市场-qidao123.com
标题:
Mysql在线安全变更工具 gh-ost
[打印本页]
作者:
石小疯
时间:
2024-9-27 16:15
标题:
Mysql在线安全变更工具 gh-ost
gh-ost(GitHub Online Schema Translater)是一个用于安全地举行 MySQL 数据库表结构变更的工具,专门为在线数据库迁移而设计。它的主要长处是可以在不中断业务的情况下,不影响数据库的可用性和性能,举行表结构的修改。
主要特点
在线迁移
:gh-ost 允许在高负载的生产情况中举行表结构的更改,而不需要锁定表,确保数据库的可用性。
渐进式复制
:通过逐步复制行,gh-ost 可以在针对大量数据的情况下,避免短时间内的负载高峰。
安全性
:它具备自动回滚功能,如果迁移过程中出现问题,可以安全地回滚到原始状态。
编程和操纵简便
:工具使用简单、直观,与 MySQL 客户端兼容,支持使用 SQL 语句举行表结构的更改。
多种配置选项
:支持多种选项用于配置操纵,例如并行迁移、最大移动速率等。
使用场景
发布新字段
:添加新的列而不影相应用的访问。
修改现有字段类型
:安全地改变列的数据类型,好比从 VARCHAR 到 TEXT。
重命名列
:而不影响运行中的体系。
根本用法
安装
:可以通过 github 下载可执行文件,或使用 Homebrew(在 macOS 上)举行安装。
brew install gh-ost
复制代码
根本命令
:
以下是一个使用 gh-ost 举行表结构变更的根本示例:
gh-ost \
--max-load=Threads_running=25 \
--critical-load=Threads_running=1000 \
--host=127.0.0.1 \
--user=username \
--password=your_password \
--database=your_database \
--table=your_table \
--alter="ADD COLUMN new_col INT DEFAULT 0" \
--execute
复制代码
这个命令将向 your_table 表中添加一个名为 new_col 的新列,字段类型为 INT,默认值为 0。
配置选项
--max-load:指定允许的最大负载。
--critical-load:指定触发回滚的负载。
--host,--user,--password:数据库毗连信息。
--database,--table:要修改的数据库和表名。
--alter:指定 ALTER 语句。
--execute:体现执行迁移;如果不加这个选项,则只举行干运行(dry run),不现实执行。
gh-ost 数据迁移流程
1.
准备与初始化
安装与配置
:确保你的 MySQL 数据库已启用二进制日志(binlog),并安装 gh-ost 工具。
参数设置
:使用符合的参数启动 gh-ost,包括毗连信息、要迁移的表、变更语句等。
2.
创建暂时表
暂时表的结构
:gh-ost 首先会创建一个新的暂时表,并按照你的 ALTER 语句的定义,将原有表的结构复制到暂时表中
开始复制数据
:暂时表一旦创建,gh-ost 即可开始将原始表中的现有数据逐行复制到暂时表中。
3.
数据复制与变更监控
逐行复制
:gh-ost 以增量的方式逐行将原始表的数据复制到暂时表,这个复制过程是渐进的,确保了对数据库的负载最低。
使用变乱隔离
:在数据复制的过程中,gh-ost 使用 REPEATABLE READ 变乱隔离级别。这意味着在数据复制期间,
原始表的读取是一个快照
,不会受到其他变乱的影响。
监控二进制日志(binlog)
:
同时,gh-ost 启动一个线程,及时监控 MySQL 的 binlog,捕获全部对原始表的变更(包括 INSERT、UPDATE、DELETE)。
这允许 gh-ost 捕获到在数据复制过程中对原始表的任何更新。
4.
及时同步变更
处理惩罚变更
:
任何在数据复制过程中对原始表的变更(例如:INSERT 或 UPDATE)都会被 gh-ost 监控到并记录在 binlog 中。
gh-ost 会将这些厘革
及时
应用到暂时表中(不会等到复制完成后,再处理惩罚变更数据),确保暂时表里的数据与原始表保持同步。
最终更新操纵
:
对于原始表的更新操纵,如果在复制到某一行时,该行数据已经被修改,gh-ost 将依赖于二进制日志来更新暂时表,以阻止出现数据不同等的情况。
5.
表切换
完成复制与更新
:
一旦全部的数据都已复制,并且全部的二进制日志变更均已同步到暂时表,gh-ost 将举行最后的检查。
原子重命名
:
gh-ost 举行原子操纵,将原始表重命名为备份名称(例如:your_table_old),然后将暂时表重命名为原始表的名称(例如:your_table)。
这一过程确保在任何时候,数据库中的数据都是同等的,并且整个迁移操纵对外界是透明的。
6.
清理与回滚
删除旧表
:如果配置允许,gh-ost 可以安全删除旧表,以开释资源。
回滚机制
:
如果在迁移过程中发生错误,gh-ost 会提供回滚功能,能够安全地将数据库规复到原始状态,从而确保错误不会影响数据库的运作和数据的完整性。
总结
gh-ost 通过以上步调实现了在线、安全、渐渐的 MySQL 数据迁移。其设计包管了在整个过程中,数据的同等性和正确性,以及对生产体系的影响最小。
利用变乱隔离和二进制日志捕获
,gh-ost 确保全部变更都在迁移过程中得以有用处理惩罚,最终实现平滑的表结构更新。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4