一 简介 上一篇文章 介绍 gh-ost 参数和具体的使用方法,以及核心特性-可动态调整 暂停,动态修改参数等等。本文分几部分从源码方面解释gh-ost的执行过程,数据迁移,切换细节设计。...如下日志记录了该过程,gh-ost会将核心步骤记录到 _b_ghc 中。...因为gh-ost在copy的过程中不会修改这部分数据记录。...create /* gh-ost */ table `test`....如果c10的create `_b_del` 失败,gh-ost 程序退出。 如果c10的加锁语句失败,gh-ost 程序退出,因为表还未被锁定,dml请求可以正常进行。
所以gh-ost是怎么做的呢? gh-ost利用了MySQL的一个特性,就是原子性的rename请求,在所有被blocked的请求中,优先级永远是最高的。...events to apply in a single transaction (range 1-100) (default 10) -exact-rowcount 使用count(*)计算表行数,而不是从...to verify that -skip-renamed-columns ALTER 该参数告诉gh-ost跳该列的数据迁移,让gh-ost把重命名列作为无关紧要的列。...该参数可以用在多个gh-ost同时操作的时候,创建一个文件,让所有的gh-ost操作停止,或者删除这个文件,让所有的gh-ost操作恢复。 ...该参数适合控制单个gh-ost操作。
=off避免主从切换时异常MySQL自身Online DDL 无需借助额外工具,部分DDL操作不会创建临时表、不会造成DML阻塞;需要mysql5.6以上版本; MySQL5.6的Online DDL不是真正的...gh-ost是针对MySQL对主库影响很小,无trigger的online schema change解决方案。...gh-ost特性: 可以测试、随时暂停、动态控制/重新配置、审计和其他操作。 gh-ost原理: ?...gh-ost三种模式: ? a. 连接从库,在主库执行 gh-ost默认执行方式,查看从库情况,并获取主库信息并连到主库,对主库侵入最小。...如果不想stop slave,则可以再添加参数:--test-on-replica-skip-replica-stop gh-ost通用方式: gh-ost \ --user=“xxxx" \ --password
如果从库的binlog不是ROW,可以用参数–switch-to-rbr来转换成ROW,此时需要注意的是执行完毕之后,binlog模式不会被转换成原来的值。...gh-ost 放弃了触发器,使用 binlog 来同步。...**图中 cut-over 是最后一步,锁住主库的源表,等待 binlog 应用完毕,然后替换 gh-ost 表为源表。...gh-ost 在执行中,会在原本的 binlog event 里面增加以下 hint 和心跳包,用来控制整个流程的进度,检测状态等。...降低写压力,触发器操作都在一个事务内,gh-ost 应用 binlog 是另外一个连接在做。
lustre选择ost策略和参数 lustre有2种算法来选择ost进行数据的写入,分别是Round Robin(RR)和Qos....对象按照ost的顺序进行,而是基于ost的空闲空间的权重进行。...比如ost2的空闲空间是ost1的两倍,这时候ost2大概率会被选择2次,但是如果设置qos_threshold_rr=100时候设置qos_prio_free=100是不会生效的。...参数reserved_mb_low,这个参数单位是MB,如果ost上空间低于ost总容量*reserved_mb_low(默认值是OST 总大小的0.1%)会在这个ost上停止写入对象分片 参数reserved_mb_high...,这个参数单位是MB,如果ost上空间高于ost总容量*reserved_mb_high(默认值值是ost总大小的0.2%)会在这个ost上开始写入对象分片 基于权重的ost参数的设置qos_threshold_rr
2.2 gh-ost 操作模式 ? a. 连接到从库,在主库做迁移这是 gh-ost 默认的工作方式。...-allow-on-master:允许gh-ost直接运行在主库上。默认gh-ost连接的从库。...而不是主库上。...该参数可以用在多个gh-ost同时操作的时候,创建一个文件,让所有的gh-ost操作停止,或者删除这个文件,让所有的gh-ost操作恢复。...3.3 gh-ost 的特性 gh-ost 拥有众多特性,比如 轻量级,可暂停,可动态控制,可审计,可测试,等等 ,我们可以通过操作特定的文件对正在执行的gh-ost命令进行动态调整 。
--allow-on-master:允许gh-ost直接运行在主库上。默认gh-ost连接的从库。...gh-ost的cut-over将重试。...,而不是主库上。...该参数可以用在多个gh-ost同时操作的时候,创建一个文件,让所有的gh-ost操作停止,或者删除这个文件,让所有的gh-ost操作恢复。...--throttle-flag-file string:当该文件被创建后,gh-ost操作立即停止。该参数适合控制单个gh-ost操作。
gh-ost 进程意外中断以后,可以新启动一个进程继续进行 Online DDL。...gh-ost 的镜像表包含源表的所有数据,会额外占用一倍的磁盘。 gh-ost 在操作的过程中会产生大量的 binlog,且binlog_row_image必须为 FULL,会占用比较多的磁盘空间。...还提供了非常多的方式来从外部暂停或者强制中止 Online DDL 的操作,详细的信息可以使用gh-ost --help命令进行查看。...总结一下 gh-ost 输出的信息,迁移数据的效率,以及支持的功能都比 pt-osc 等工具要优秀,而 gh-ost 工具的问题(例如磁盘空间)在其他工具也会遇到,因此在 DDL 操作又想避免延迟等问题时...,推荐优先考虑 gh-ost。
接上一篇文章Online DDL 工具 gh-ost实战(一),介绍了gh-ost的实际使用案例,本文介绍一下gh-osh的相关原理; gh-ost 放弃了触发器,使用 binlog 来同步。...降低写压力,触发器操作都在一个事务内,gh-ost 应用 binlog 是另外一个连接在做。...gh-ost 就会在主库上直接做所有的操作。仍然可以在上面查看主从复制延迟。...gh-ost仍然会连上主库,但所有操作都是在从库上做的,不会对主库产生任何影响。在操作过程中,gh-ost也会不时地暂停,以便从库的数据可以保持最新。...因为gh-ost在copy的过程中不会修改这部分数据记录。
1 安装 # 本文安装1.1.5版本 wget https://github.com/github/gh-ost/releases/download/v1.1.5/gh-ost-1.1.5-1.x86_...64.rpm yum -y localinstall gh-ost-1.1.5-1.x86_64.rpm 2 使用 gh-ost有三种模式,分别是在连接从库DDL、单实例(相当于只在主库)DDL、...这些操作用于: 在binlog_format不是ROW且您明确指定了--switch-to-rbr的情况下,切换binlog_format为ROW。....flag文件,终止正在运行的gh-ost,临时文件清理需要手动进行。...tmp/gh-ost.t1.sock echo max-load=Thread_running=3 | socat - /tmp/gh-ost.t1.sock 5 DDL 过程 ① 检查有没有外键和触发器
一、gh-ost 介绍 gh-ost 是 GitHub 发布的一款用于 MySQL 的无触发器在线模式迁移解决方案。它是可测试的,并提供暂停,动态控制/重新配置,审计和许多操作特权。...gh-ost 使用相同的模式。但是,它与所有现有工具的不同之处在于不使用触发器。取而代之的是,gh-ost 使用二进制日志流捕获表的更改,然后将其异步应用到幽灵表。...gh-ost 承担一些其他工具留给数据库执行的任务。gh-ost 可以更好地控制迁移过程;可以真正暂停它;可以真正将迁移的写入负载与主服务器的工作负载分离。...二、gh-ost 的三种模式架构 ? 2.1 连接从库,在主库转换 这是 gh-ost 默认的工作模式,它会查看从库情况,找到集群的主库并且连接上去,对主库侵入最少。...gh-ost 仍然会连上主库,但所有操作都是在从库上做的,不会对主库产生任何影响。在操作过程中,gh-ost 也会不时地暂停,以便从库的数据可以保持最新。
@wjq mysql]# ll gh-ost -rwxr-xr-x 1 20649 users 9511528 Feb 14 2019 gh-ost 常用参数解释: Usage of gh-ost...–allow-on-master:允许gh-ost直接运行在主库上。默认gh-ost连接的从库。...When status exceeds threshold, app throttles writes –migrate-on-replica:gh-ost的数据迁移(migrate)运行在从库上,而不是主库上...该参数可以用在多个gh-ost同时操作的时候,创建一个文件,让所有的gh-ost操作停止,或者删除这个文件,让所有的gh-ost操作恢复。...–verbose:常用,有用的输出,而不是一切。 –debug:输出所有一切。
标志位文件:生成一个标志位文件,gh-ost 就会立刻暂停。删除文件,gh-ost 又会恢复工作。 用户命令:通过网络连上 gh-ost,通过命令让它暂停。...我们生产环境的每一张表都这样用 gh-ost 在从库上做过好多次修改测试。 可靠的 所有上述讲到的和没讲到的内容,都是为了让你对 gh-ost 的能力建立信任。...gh-ost 工作模式【要着重看】 gh-ost 工作时可以连上多个 MySQL 实例,同时也把自己以从库的方式连上其中一个实例来获取二进制日志事件。...gh-ost 仍然会连上主库,但所有操作都是在从库上做的,不会对主库产生任何影响。在操作过程中,gh-ost 也会不时地暂停,以便从库的数据可以保持最新。...--switch-to-rbr 当 binlog 日志格式不是 row 时,自动转换日志格式 --initially-drop-ghost-table gh-ost 执行前会创建两张 xx_ghc
最近有网友提到收缩Oracle数据文件的问题,这是DBA经常碰到的一个常见问题。通常我们需要收缩相应的数据文件以减少来自磁盘空间的压力以及提高数据库的整体性能。...因为生产环境数据清洗相当较少,因此空间浪费也比较小,而且一旦收缩之后又要重新自动扩展数据文件,浪费系统资源。对于UAT,DEV环境,多DB,磁盘空间压力大的情形,收缩一下非常有必要。...总之收缩数据文件会使得磁盘空间得以释放以及加快数据迁移,RMAN备份等。本文分享了Tom大师的收缩脚本以及给出了undo,临时表空间,表段收缩的链接。 ...几种收缩的情形: 收缩表段(shrink space) 收缩临时表空间 收缩undo表空间 1、演示收缩数据文件 robin@ORADB:~/dba_scripts/custom/sql>
11G and before 分为不停机和停机两种方式: 一、不停机移动数据文件 完整步骤: 1、确认开启归档模式 2、offline数据文件 3、物理层移动数据文件(可重命名) 4、逻辑层rename...数据文件路径及名称 5、recover恢复数据文件 6、online数据文件 --开启归档模式 SQL> archive log list Database log mode...--物理层移动数据文件 SQL> !...二、停机移动数据文件 完整步骤: 1、关闭数据库 2、物理层移动数据文件(可重命名) 3、开启数据库到mount 4、逻辑层rename数据文件路径及名称 5、开启数据库 --创建一个TEST表空间,发现建在了...明确无法在线移动数据文件,需要关闭数据库。
不建议,安装目录一般是在C:\Program Files\目录下,如果运行的用户不是管理员用户,应用安装目录是只读,无法写文件。...在路径中Administrator是登录系统时的用户,说明这个路径跟登录系统的用户有关,如果登录的系统用户变化了,这个路径也会跟着变化,所以如果存储的应用数据文件不是只针对该登录用户,就不能存放在该目录下...在路径中Administrator是登录系统时的用户,该路径与用户有关,所以如果存储的应用数据文件不是只针对该登录用户,就不能存放在该目录下。...路径中不含有用户信息,所有用户都可以访问,所以如果存放的数据文件与用户无关,存放这个目录就很合适。 My Document是用来默认存放用户生成的数据文件,一般也允许用户设置为其它目录。...用户生成的数据文件,是类似于Word创建的文档、Photoshop画的图,与应用数据文件完全不同,应用卸载的时候这些文件不能一起删除。
转载~ 一、数据文件的组成 innodb数据逻辑存储形式为表空间,而每一个独立表空间都会有一个.ibd数据文件,ibd文件从大到小组成: 一个ibd数据文件-->Segment(段)-->Extent(...区)-->Page(页)-->Row(行) 表空间(Tablesapce) 表空间,用于存储多个ibd数据文件,用于存储表的记录和索引,一个文件包含多个段。...FIL_PAGE_FILE_FLUSH_LSN 该值仅在数据文件中的一个页中定义,代表文件至少被更新到了该LSN值。...InnoDB并不是每个记录拥有一个槽,InnoDB存储引擎的槽是一个稀疏目录(sparse directory),即一个槽中可能属于(belong to)多个记录,最少属于4条记录,最多属于8条记录。
mount-lustre:/ost0,mount-ldiskfs:/mnt/ost0 10.211.55.6 Lustre Server OST1 mount-lustre:/ost1,mount-ldiskfs...:/mnt/ost1 10.211.55.6 Lustre Server OST2 mount-lustre:/ost2,mount-ldiskfs:/mnt/ost2 测试环境设置 创建...端分析 dir1/lustre.log目录下文件分析 和MDT端不同的是OST中的O存储的是实际的数据分片,接下来查看lustre.log的数据文件分布情况.如下是客户端视角查看lustre.log的布局...这个文件分别在ost0上的/mnt/ost0/O/0/d2/34、ost1上的/mnt/ost1/O/0/d2/34、ost2上的/mnt/ost2/O/0/d3/35这三个分片。.../ost1/ost2上面的lustre.log的数据分片[root@CentOS-Lustre-Server /mnt/ost1/O/0/d2]$ ls -l /mnt/ost0/O/0/d2/34 -
207上添加 [root@localhost ~]# vi ghost.conf [client] user=mha password=123 命令如下 [root@test-206 ~]# gh-ost...命令参数: [root@test-206 ~]# gh-ost --help Usage of gh-ost: -aliyun-rds set to 'true' when you...By default gh-ost does not proceed to execute....By default gh-ost does not proceed to execute....This flag tells gh-ost to skip the renamed columns, i.e. to treat what gh-ost thinks are renamed columns
领取专属 10元无门槛券
手把手带您无忧上云