免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5614 | 回复: 5
打印 上一主题 下一主题

MySQL 批量转换存储引擎脚本 [复制链接]

论坛徽章:
2
技术图书徽章
日期:2013-11-23 01:55:57白羊座
日期:2013-12-08 15:48:16
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-19 02:44 |只看该作者 |倒序浏览
本帖最后由 7looki 于 2013-10-19 02:47 编辑

System : CentOS 6.4 x86_64
MySQL : Percona Server 5.5.18
  1. #!/bin/bash

  2. # DESCRIPTION : Alter Table Engine
  3. # AUTHOR : Cheng Peng Ju
  4. # EMAIL : 7looki@gmail.com

  5. PATH=/bin:/sbin:/usr/bin:/usr/sbin

  6. # MySQL Host
  7. HOST='127.0.0.1'

  8. # MySQL Port
  9. PORT='3306'

  10. # MySQL User
  11. USER='root'

  12. # MySQL User's Password
  13. PWD='rootpass'

  14. # MySQL Database Name
  15. DBNAME='test'

  16. # MySQL Local Path
  17. MPATH='/usr/local/mysql'

  18. # MySQL Info
  19. INFO='use information_schema;'

  20. # SQL -- Select
  21. SELECT="select table_name from tables where TABLE_SCHEMA = '${DBNAME}';"

  22. # New ENGINE Name
  23. ENGINE='MyISAM'

  24. # Get Table Name
  25. ${MPATH}/bin/mysql -h ${HOST} -P ${PORT} -u${USER} -p${PWD} -e "${INFO} ${SELECT}" > alter-table-engine.sql

  26. ## Build SQL
  27. sed -i '1d' alter-table-engine.sql
  28. sed -i 's/^/ALTER TABLE /g' alter-table-engine.sql
  29. sed -i "s/$/ ENGINE = ${ENGINE};/g" alter-table-engine.sql

  30. # Alter Table Engine
  31. ${MPATH}/bin/mysql -h ${HOST} -P ${PORT} -u${USER} -p${PWD} ${DBNAME} < alter-table-engine.sql

  32. # Delete alter-table-engine.sql
  33. # rm -f alter-table-engine.sql
复制代码

论坛徽章:
1
未羊
日期:2013-10-18 11:47:51
2 [报告]
发表于 2013-10-19 10:32 |只看该作者
先赞一个:wink:感谢分享,支持原创!
我想补充一点,希望以一起探讨

您这个方法优点是操作简单,缺点是可能会执行很长一段时间,特别是作用在热表上
因为alter table会先创建一张新表,然后把数据从源表复制到新表来,在这过程中,IO花费大,同时对源表加了读锁,停止写服务
所以,业务高峰执行您的脚本一定要小心

论坛徽章:
2
技术图书徽章
日期:2013-11-23 01:55:57白羊座
日期:2013-12-08 15:48:16
3 [报告]
发表于 2013-10-19 10:40 |只看该作者
本帖最后由 7looki 于 2013-10-19 10:41 编辑

回复 2# 幕南风


    多谢提醒

   我是用了一段时间的 InnoDB 后, 使用 phpMyAdmin 检测状态时显示 select 占了 70% , 而且应用运行的效果并不怎么好, 就改为 MyISAM 试试, 运行一段时间再看看效果.

   当然, 数据也比较少, 2M多一点, 而且, 这个脚本运行也是在临晨几乎无访问的情况下做的.

论坛徽章:
1
未羊
日期:2013-10-18 11:47:51
4 [报告]
发表于 2013-10-19 11:34 |只看该作者
7looki 发表于 2013-10-19 10:40
回复 2# 幕南风



个人感觉,您的这个理由还不足以把InnoDB改成MyISAM,不知道您的业务特点是什么,很多场景InnoDB表现都会比MyISAM来得优秀

推荐其他2种比较高效,风险较低的更改表引擎的方法:
1)pt-online-schema-change
2)mysqldump

论坛徽章:
0
5 [报告]
发表于 2013-10-19 13:54 |只看该作者
进来,学习下!

论坛徽章:
0
6 [报告]
发表于 2013-10-19 13:54 |只看该作者
谢谢,分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP