美文网首页
MySQL更改大库大表存储引擎方案

MySQL更改大库大表存储引擎方案

作者: 其实我很dou | 来源:发表于2018-08-08 17:23 被阅读0次

一. 概述

检查库中myisam的表, sql如下:

  • SELECT * FROM `tables` WHERE table_schema = 'UAR_STATISTIC' AND ENGINE = 'MyISAM';

由于数据库UAR_STATISTIC有大部分表存储引擎是myisam, 部分表存储引擎是innodb, 需要将myisam引擎更改为innodb, 更改思路如下:

  1. 导出表结构sql

  2. 手动更改表结构sql, 将myisam改为innodb

  3. 导出表数据sql

  4. 删除原始数据库

  5. 导入表结构

  6. 导入表数据

其他库的myisam表很少, 使用alter语句更改即可,

二. 测试环境

主库 10.101.67.15

从库 10.101.67.13 10.101.67.14 10.10.32.20

MySQL版本 5.7.11

注意: 备份和恢复期间, 需要将后端服务停掉

三. 测试前服务器状态

free –m
top
iostat –d –k 1
io –d –k –x 1 4

  1. mysql配置
server-id=13
max_allowed_packet = 1024M
max_connections=5000
interactive_timeout=28800
wait_timeout=28800
log_warnings=1
long_query_time=1
slow_query_log=1
expire_logs_days=15
user=uar

四. 备份数据库

  1. 备份表结构脚本并更改sql文件

    /usr/local/mysql/bin/mysqldump -h'10.10.32.26' -uuar_db_user -p'xxx' -B
    UAR_STATISTIC --no-data --set-gtid-purged=OFF > /root/db/table_stru.sql &

    sed -i 's/MyISAM/INNODB/g' table_stru.sql

  2. 备份表数据命令(花费时间再6分钟左右)

    /usr/local/mysql/bin/mysqldump -h'10.10.32.26' -uuar_db_user -p'xxx' -B
    UAR_STATISTIC --no-create-info --no-create-db > /root/db/table_data.sql &

五. 删除原始数据库

drop database UAR_STATISTIC;

六. 导入表结构和数据

  1. 导入表结构

/usr/local/mysql/bin/mysql -uroot –pxxx -e'source /root/db/table_stru.sql'
>> stru.log
大约20s执行完成

  1. 导入表数据

/usr/local/mysql/bin/mysql -uroot -pxxx -e'source /root/db/table_data.sql'
>> /root/db/data.log &

记录服务器性能
top
记录磁盘性能(主库)
iostat -k -d 2 4
iostat -k -d -x 2 4

iostat命令详解: https://www.cnblogs.com/xiuluo--angel/p/7086637.html

  1. du -sh /usr/local/mysql/data/UAR_STATISTIC/

  2. mysql> show processlist\G;

 1. row
Id: 4

User: repl

Host: node1:9519

db: NULL

Command: Binlog Dump

Time: 1027

State: Master has sent all binlog to slave; waiting for more updates

Info: NULL

 2. row

Id: 5

User: repl

Host: node2:47596

db: NULL

Command: Binlog Dump

Time: 1021

State: Master has sent all binlog to slave; waiting for more updates

Info: NULL

 3. row


Id: 6

User: repl

Host: BD-APP-07:39140

db: NULL

Command: Binlog Dump

Time: 1016

State: Master has sent all binlog to slave; waiting for more updates

Info: NULL

4. row


Id: 12

User: root

Host: localhost

db: UAR_STATISTIC

Command: Query

Time: 0

State: update

Info: INSERT INTO \`app_at_appv_dev_day\` VALUES
('UAR-000184_358','v1.9.36','HTC+M8Et',20170816,15,1,2,103.

记录执行时间

start_time: Wed Aug 1 09:50:02 CST 2018

end_time: Wed Aug 1 23:24:01 CST 2018

sql文件大小: 15G SQL

备份数据时间: 6分钟

导入数据花费时间: 13小时34分钟

总花费时间: 13小时40分钟

分析: 导入这么慢, 应该是由于binlog日志写入以及同步从库导致, 瓶颈在于io,
数据导入时, 监控io, 基本属于满负载运行

七. 总结和风险

更改全部业务库的存储引擎为myisam, 导入数据总共大概需要13小时54分钟, 导入数据时,
需要停止web和后端服务线上机器配置和负载和测试环境相差不大,
预计导入时间和测试相差不大.

相关文章

  • MySQL更改大库大表存储引擎方案

    一. 概述 检查库中myisam的表, sql如下: SELECT * FROM `tables` WHERE t...

  • MySQL介绍

    mysql介绍 其他数据库介绍 mysql特点 mysql存储引擎类型及特点 关于mysql单表存储 mysql介...

  • Mysql技术内幕InnoDB存储引擎-归纳总结

    存储引擎是基于表的, 而不是数据库.Mysql数据库从5.5.8版本开始, InnoDB存储引擎是默认的存储引擎....

  • MySQL存储引擎和执行流程

    MySQL存储引擎 MySQL存储引擎采用插拔式的插件方式 ,指定在表之上的,即一个库中的每一个表都可 以指定专...

  • MySQL存储引擎MyISAM与InnoDB的优劣

    使用MySQL当然会接触到MySQL的存储引擎,在新建数据库和新建数据表的时候都会看到。 MySQL默认的存储引擎...

  • 【原创】因酷数据库开发规范

    基本规范 所有表必须使用Innodb存储引擎Innodb存储引擎是Mysql5.6以后默认引擎支持事务,行级锁,更...

  • MYSQL跨服务器更新数据

    本地MySQL数据库要更新远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现.(未测试)...

  • mysql实现跨连接查询

    本地MySQL数据库要访问远程mysql数据库的表中的数据,必须通过FEDERATED存储引擎来实现.有点类似Or...

  • A.001.3.Mysql存储引擎

    1.存储引擎的基本概念 2.MySQL 5.7 支持的存储引擎 3.MySQL数据库中的存储引擎 4.MySQL ...

  • 存储引擎文件

    之前的文件都是MySQL数据库本身文件,和存储引擎无关。除了这些文件,每个表存储引擎还有自己独有的文件。包括重做日...

网友评论

      本文标题:MySQL更改大库大表存储引擎方案

      本文链接:https://www.haomeiwen.com/subject/nvpxbftx.html