xml地图|网站地图|网站标签 [设为首页] [加入收藏]
不停机不停服务,_ELVE_Message多功能用法
分类:操作系统

 1、  图片 1

摘  要:本文阐述了MySQL DDL 的问题现状、pt-online-schema-change的工作原理,并实际利用pt-online-schema-change工具在线修改生产环境下1.6亿级数据表结构。

编程语言介绍

      当要显示如图3个按钮时,并要获得单击不同按钮的进行不同的相应时,可以在MessageBoxButtons后面添加一个。(应该英文的点,此处为了醒目,用中文代替)可以看到提示框下方需要几个按钮的不同选择,如下图:

 

语言是人与人之间沟通的介质,简单的来说,编程语言也是语言,是我们程序员与计算机沟通的介质。常见的编程语言有我们熟知的做网页开发的php,写安卓应用的java,应用广泛的c、c#及c++,以及目前火热的python、r、go等高级语言,另外还有最接地气的低级语言汇编语言,但是无论何种语言,我们的计算机所能识别的只有机器语言(由0和1组成的二进制机器码)。

图片 2

在一个软件生命周期中,我们都知道,**前期的表结构设计是非常重要的**,因为当表数据量一上来后再进行表结构修改危险性比较大,而且要操作的时间也比较长。

应用、操作系统与硬件

  if (MessageBox.Show("显示提示信息", "标题", MessageBoxButtons.YesNoCancel) == DialogResult.Yes)

 

由于计算机硬件只能够识别机器语言,因此我们所有编程语言按照相应的语法写出来的脚本文件、执行程序等应用软件无法直接与硬件交互,必须要跑在存在于硬件之上的操作系统平台,通过操作系统驱动硬件工作,所以一个完整的计算机系统需要由应用程序、操作系统、计算机硬件三大部分构成。

{

在笔者参与的项目中,就曾遇到这样一个问题,首先上去查看了一下该表的信息,已有约2亿的数据量,而且每分钟还要并发写入4万条记录,而由于这个表有一个字段前期设计过短,导致写入到数据库后,这个字段的值就一直乱码。因为该表在生产环境下使用,影响到业务,需要及时修改这个字段长度,并且修改该表结构时不能停服务。那么如何解决这种问题呢?

 

//单击是要进行的相应处理

 一、MySQL DDL 的问题现状

开始想了下,减少这个表的数据量再DDL,将这个表一周以前的数据备份到一个临时表,再删除这个表一周以前的数据。

而在MySQL中在对表进行ddl时,会锁表,当表比较小比如小于1w条记录时,操作时间较短,对前端影响较小,当时遇到千万乃至上亿级级别的表(保留一周的数据量还有1.6亿),就会影响前端应用对表的写操作。

因为目前InnoDB引擎是通过以下步骤来进行DDL的:

1 按照原始表(original_table)的表结构和DDL语句,新建一个不可见的临时表(tmp_table)

2 在原表上加write lock,阻塞所有更新操作(insert、delete、update等)

3 执行insert into tmp_table select * from original_table

4 rename original_table和tmp_table,最后drop original_table

5 释放 write lock。

我们可以看见在InnoDB执行DDL的时候,原表是只能读不能写的。为此 perconal 推出一个工具 pt-online-schema-change ,其特点是修改过程中不会造成读写阻塞。

     

          图片 3

}

二、pt-online-schema-change介绍

【工具简介】

pt-osc模仿MySQL内部的改表方式进行改表,但整个改表过程是通过对原始表的拷贝来完成的,即在改表过程中原始表不会被锁定,并不影响对该表的读写操作。

首先,osc创建与原始表相同的不包含数据的新表并按照需求进行表结构的修改,然后将原始表中的数据按chunk大小逐步拷贝到新表中,当拷贝完成后,会自动同时修改原始表和新表的名字并默认将原始表删除

【工具安装及使用】

参见下面下面这篇文章

linux下percona-toolkit工具包的安装和使用(超详细版)

【工作原理】

1 创建两个和你要执行 alter 操作的表结构一样的空表。如图:

说明:t_ad_req_log就是原表;

_t_ad_req_log_ol是旧表,这个表是用来当你执行失败的时候,还原回来的原表结构;

_t_ad_req_log_new是新表,这个表就是这次要修改的表。

 图片 4

 

 

2 执行表结构修改,然后从原表中的数据到copy到 表结构修改后的表(即_t_ad_req_log_new)

3 在原表上创建触发器将 copy 数据的过程中,在原表的更新操作更新到新表.

   注意:如果表中已经定义了触发器这个工具就不能工作了。

4 copy 完成以后,用rename table 新表代替原表,默认删除原表。

 

修改的命令如下:

/usr/local/bin/pt-online-schema-change --user=用户名 --password=密码 --host=127.0.0.1 --port=端口号 --charset=utf8 --nodrop-old-table --alter="modify  media_code varchar(64) DEFAULT NULL COMMENT '当前视频编码' " D=ad_api,t=t_ad_req_log --exec

参数说明:

--user=用户名     指定用户名

--password=用户名     指定用户密码

--port=端口号     指定端口号

--charset=utf8   指定字符编码

--alter=    后面就是接需要修改的内容,比如上面表示的就是修改ad_api数据库t_ad_req_log表的media_code 字段长度为64位

 下面请看一个完整的图:

图片 5

 

 图片 6

 

 

注:如果对percona-toolkit工具安装及使用有疑问的先查看下这两篇文章。

linux下percona-toolkit工具包的安装和使用(超详细版)

pt-online-schema-change解读

 

 

 

 MessageBox.Show()的返回值是 yes 、no, ok还是cancel,那需要自己在show()方法中对它可以显示的选择按钮进行设置。也就是说单击不同的按钮其返回值是不一样的。

计算机硬件系统

 

一台完整的计算机由处理器、内存、硬盘、主板、输入输出设备等组成,计算机是人类仿生学的产物

EG:

处理器可以看成人类的大脑,负责思考

MessageBox()在C#中使用时,通常用MessageBox的show方法来实现对话框的弹出,命名空间System.Windows.Forms

内存可以看成人类的记忆,负责短时间的存储信息

应用实例:
      DialogResult r1 = MessageBox.Show("显示提示信息", "标题", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

硬盘可以看成人类的用来永久记录信息的介质,比如古代的石板兽骨龟甲、现代的纸张

            if (r1.ToString()=="Yes")

输入输出设备可以看成人类的五官四肢,负责接收信息以及传递信息

            { MessageBox.Show("Yes");  }

主板可以看成人类的身体,用来连接脑袋和四肢,主板上的总线可以理解成人体的神经,负责传递人体各个部件的信号

            if (r1.ToString().Equals("No"))

 

            { MessageBox.Show("No"); }

计算机硬件之中央处理器

            if (r1.ToString().Equals("Cancel"))

中央处理器(CPU)是计算机的运算与判断组件,CPU内部含有微指令集,CPU所支持的功能由内部的微指令集决定,CPU所处理的数据来源于于内存,而内存的数据来源于硬盘,当硬盘内的一个程序执行时候,首先会将程序写入内存中,然后CPU从内存中相应的取一段指令进行运算,但是CPU无法对内存提供的指令数据直接处理,CPU会将从内存调用的数据转换成自己能够识别的指令,最后执行反馈结果。

            {  MessageBox.Show("Cancel");  }

CPU的运行速度要远远高于内存,为了解决CPU和内存的速度差,所以CPU内都有一些用来保存变量和临时数据的寄存器

显示效果:图片 7

寄存器:解决cpu和内存间的速度差,cpu从寄存器取数据

单击“是”,会弹出Yes;单击“否”,会弹出No;单击“取消”,会弹出Cancel。

  通用寄存器:用来保存关键变量和临时数据或结果

2、图片 8

  程序计数器:一个cpu同时只能处理一条指令,但是计算机通常都是多任务执行,当进行任务切换时,被暂停的任务指令处理断点结果将存如程序计数器

 MessageBox.Show("只显示提示信息!");

  堆栈指针:内存内数据位置的索引

3、图片 9
 MessageBox.Show("显示提示信息!", "标题");

  程序状态寄存器:状态由0和1表示

4、图片 10
 if (MessageBox.Show("显示提示信息", "标题", MessageBoxButtons.OKCancel) == DialogResult.OK)

    用户态:非特权状态,程序代码执行时候只能获取CPU内负责计算的指令集

 {}

    内核态:特权状态,程序代码执行时候能够获取CPU内所有的指令集,包括控制硬件的指令集,如写入磁盘的指令集

5、图片 11

    程序代码执行的时候所处与用户态,当程序代码需要调用到操作系统访问硬件或调用操作系统访问外设的时候,将从用户态切换到内核态,程序的执行过程中会频繁的在用户态和内核态之间切换

  if (MessageBox.Show("显示提示信息", "标题", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)

计算机硬件之存储器

{}

计算机系统中,除了内存和硬盘存储外,还存在多种存储器,比如为解决内存和CPU之间的速度差问题,在CPU层面加入的L1/L2缓存,用来存储BIOS设置的CMOS等

本文由澳门新葡亰手机版发布于操作系统,转载请注明出处:不停机不停服务,_ELVE_Message多功能用法

上一篇:Linux基础学习,cgroup原理简析 下一篇:博客首页搭建,数据共享比较
猜你喜欢
热门排行
精彩图文