zoukankan      html  css  js  c++  java
  • 电校讲课Mysql_实验1_存储引擎切换

    存储引擎的切换

    1.1 Mysql存储引擎概念

    存储引擎是数据库的核心,是数据库底层软件组织。对于mysql来说,存储引擎是以插件的形式运行的。Mysql数据库及其分支版本主要的存储引擎有innoDBMyISAMMemory

    innoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用。一般来说,支持事务安全表(ACID),支持行锁定和外键,而且有较高的并发读取频率,InnoDB是默认的MySQL引擎。

    MyISAM是独立于操作系统的,可以轻松将MyISAM的表从windowns服务器移植到Linux服务器。ISAM(indexed Sequebtuak  Access  Method) 有索引的顺序访问的缩写。每个MyISAM数据表在磁盘上存储的有3个文件,每个文件名以表名开头,并搭配不同的扩展名区分文件类型:.frm 格式 用于存储表的定义、.myd用于存储数据、.myi用于存放表索引。

    MySQL5.5之前的版本,MyISAM一直是Mysql默认的存储引擎。但由于其不支持外键,不支持事务,锁的支持粒度只到表级锁。在OLTP读写并重的使用场景中存在明显的缺陷,因此在MySQL5.5及以后的版本中被InnoDB引擎取代为默认的存储引擎。

    Memory存储引擎使用存在于内存中的内容来创建表。每个memory表只实际对应一个磁盘文件,格式是.frmmemory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。
       Memory类型的存储引擎主要用于哪些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果,。对存储引擎为memory的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中。

     先来看一下主要的存储引擎大的特性对比,如下图所示:

    存储引擎名称

    特点

    应用场景

    InnoDB

    支持事务、行锁、支持MVCC多版本并发控制,并发性高,支持外键。

    应用于OLTP业务系统。

    MyISAM

    不支持事务、表锁、并发性低,支持全文索引。

    应用于OLAP业务系统。

    Memory

    表中的数据都在内存中存放,不落地。支持Hash和Btree索引,数据安全性不高,读取熟读快。

    应用于对数据安全性要求不高的环境下。

    1.2 Mysql存储引擎查看

    innodbMyISAM是最主流的两个存储引擎,而且MySQL数据库默认的存储引擎是innodb。可以通过如下命令查看当前书库支持的存储引擎类型。

     上图可以看出当前数据库支持的存储引擎有InnoDBCSVMyISAMBLACKHOLEPERFORMANCE_SCHEMAMEMORY等等,当前默认的存储引擎是innodb,该存储引擎支持事务,支持行读锁,支持外键,支持保存点。

    1.3 mysql存储引擎切换主使用场景

    1、Mysql表的碎片整理

    在日常运维中,当我们删除一些大表的无用数据,发现数据文件的大小并没有减少,因为使用delete删除数据的时候,只是删除标识位,没有整理数据文件,因此并不会彻底释放表空间。

    因此需要对期对mysql表碎片情况进行统计,对碎片比率高的大表有必要进行碎片整理,对表进行优化,释放存储空间。

    2、xtrabackup备份myisam存储引擎的表

    由于xtrabackup 工具备份数据到最后会执行flash tables with read lock ,对数据库加只读锁表以便进行一致性备份,然而对于myisam存储引擎的表加锁,会导致mysqlsql线程hung住。

    针对以上两个场景的问题目前的比较好的解决方式是修改表结构为innodb存储引擎的表,即进行表的存储引擎切换。

    实验1mysql表存储引擎切换

    要求:

    在对mysql表的存储引擎进行切换过程中,一定要在业务低峰时段操作。避免出现锁表导致阻塞业务读写操作的情况。

    环境

    Red Hat Linux Enterprise release 7.4  mysql5.7.30    percona-toolkit-3.2.1

    实验步骤:

       1 、采用alter table 方式切换表的存储引擎

    alter table table_name engine=innodb   //修改表的存储引擎为innodb

    优点: 操作简单方便。

    缺点:需要先给整表加写锁,如果数据量比较大,耗时久,影响业务。

      2 、采用percona-toolkit工具切换表的存储引擎

      percona-toolkit是percona公司开发的一个mysql开源运维管理工具。

    使用percona-toolkit工具的pt-online-schema-change 命令,不锁表对业务基本无影响。

    pt-online-schema-change的主要命令参数选项有:

    --alter   指定ALTER 语句,正常的ALTER TABLE TBNAME ;

    --execute 确定执行ALTER操作,这个选项如果不指定,则仅做检查然后退出。

    --host  连接的主机名;

    --user  --password  连接的用户名和密码;

    -D= 在哪个mysql 库上执行;

    -t=针对哪个表执行操作;

    --check-replication-filters 检查复制中是否设置了过滤条件;

    --preserve-triggers 保留触发器;

    [root@pxc3 bin]# ./pt-online-schema-change   --user=root --password=mysql123  --alter='engine=innodb' D=emm_dbmodel,t=t  --no-check-replication-filters   --execute  --preserve-triggers

    //登陆mysql数据库主机,执行在线修改表的存储引擎语句,在执行的过程中保留触发器,不检查复制中设置的过滤条件。

    No slaves found.  See --recursion-method if host pxc3 has slaves.

    Not checking slave lag because no slaves were found and --check-slave-lag was not specified.

    Operation, tries, wait:

      analyze_table, 10, 1

      copy_rows, 10, 0.25

      create_triggers, 10, 1

      drop_triggers, 10, 1

      swap_tables, 10, 1

      update_foreign_keys, 10, 1

    Altering `emm_dbmodel`.`t`...

    Creating new table...

    Created new table emm_dbmodel._t_new OK.

    Altering new table...

    Altered `emm_dbmodel`.`_t_new` OK.

    2020-10-27T20:23:25 Creating triggers...

    2020-10-27T20:23:25 Created triggers OK.

    2020-10-27T20:23:25 Copying approximately 8 rows...

    Cannot connect to h=192.168.56.130,p=...,u=root

    2020-10-27T20:23:25 Copied rows OK.

    2020-10-27T20:23:25 Adding original triggers to new table.

    2020-10-27T20:23:25 Analyzing new table...

    2020-10-27T20:23:25 Swapping tables...

    2020-10-27T20:23:25 Swapped original and new tables OK.

    2020-10-27T20:23:25 Dropping old table...

    2020-10-27T20:23:25 Dropped old table `emm_dbmodel`.`_t_old` OK.

    2020-10-27T20:23:25 Dropping triggers...

    2020-10-27T20:23:25 Dropped triggers OK.

    Successfully altered `emm_dbmodel`.`t`.

    验证MySQL表的存储引擎已经切换:

    mysql> show table status like 't%' G ;//查看表的状态,包含表的存储引擎信息。

    *************************** 1. row ***************************

               Name: t

             Engine: InnoDB

            Version: 10

         Row_format: Dynamic

               Rows: 8

     Avg_row_length: 2048

        Data_length: 16384

    Max_data_length: 0

       Index_length: 16384

          Data_free: 0

     Auto_increment: NULL

        Create_time: 2020-10-27 20:23:25

        Update_time: 2020-10-27 20:23:25

         Check_time: NULL

          Collation: utf8_general_ci

           Checksum: NULL

     Create_options:

            Comment:

    1 row in set (0.00 sec)

    实验总结:

    本实验通过两种方法对MySQL表的存储引擎进行切换修改,在考虑不锁表且对业务影响最低的情况下,建议使用PT工具包中的pt-online-schema-change命令进行存储引擎切换操作。

  • 相关阅读:
    理论+实践解析“IT治理”之模式与原则
    iOS开发如何避免安全隐患
    DBA职业发展之路:去“IOE”等挑战之下,DBA将何去何从?
    自动化测试最佳实践(一):从纺锤模型到金字塔模型
    宜信开源|手把手教你安装第一个LAIN应用
    宜信开源|数据库审核软件Themis的规则解析与部署攻略
    开源|性能优化利器:数据库审核平台Themis的选型与实践
    小老板,我300M的网,网速很慢怎么办?
    JSP、ASP、PHP Web应用程序怎么这么多P!
    难道你现在还不知道:C/S和B/S
  • 原文地址:https://www.cnblogs.com/vzhangxk/p/14290767.html
Copyright © 2011-2022 走看看