更改mysql表引擎(shell)

一、基础环境
1、版本
cat /etc/redhat-release 
CentOS release 6.6 (Final)

2、内核
uname -r
2.6.32-504.el6.x86_64

3、ip(eth0)
10.1.10.23

二、shell脚本函数说明
redirectlog           #记录日志用的
checkengine           #检查innodb是否支持及查看默认引擎
generatedb            #导出需要的DB库
generatetable         #导出需要更改引擎表到某个文件
alterengine           #将某个文件中的表进行引擎更改

三、cat myisamtoinnodb.sh
#!/bin/bash
#--------------------------------------------------
#Author:jimmygong
#Email:[email protected]
#FileName:myisamtoinnodb.sh
#Function: 
#Version:1.0 
#Created:2015-08-07
#--------------------------------------------------
currdate=$(date +%Y%m%d)
dates=`date "+%s"`
sleeptime=2
dbuser="test"
dbpass="123456"
dbport="3306"
dbip=$(ifconfig eth0|awk ‘/inet addr:/‘|awk -F: ‘{print $2}‘|awk -F" " ‘{print $1}‘)
logdir="/opt/myisamtoinnodb"
exclude="mysql information_schema"
function mysqlcmd ()
{
    comm=$1
    mysql -u"$dbuser" -p"$dbpass" -h"$dbip" -P"$dbport" -sNe "$comm"
}
function redirectlog ()
{
    logfile=$logdir/${currdate}_${dbip}_log
    mkdir -p $logdir
    exec 1>$logfile
    exec 2>$logfile
}
function checkengine ()
{
    defaultengine=`mysqlcmd ‘show engines‘|grep -i default|awk ‘{print $1,$2}‘`
    echo "$defaultengine"
    innodb=`mysqlcmd ‘show engines‘|grep -i innodb|grep -i yes`
    if [[ ! -z "$innodb" ]]
    then
        echo "innodb enabled"
    fi
}
function generatedb ()
{
    i=0
    dblist=`mysqlcmd ‘show databases‘`
    for db in $dblist
    do
        rv=`echo $exclude|grep -w -i $db`
        if [[ -n "$rv" ]]
        then
            continue;
        fi
        dbname[i]=$db
        let i++
    done
}
function generatetable ()
{
    i=0
    for db in ${dbname[@]}
do
    alltable=`mysqlcmd "use $db;show tables"|wc -l`
    for ((j=1;j<=$alltable;j++))
    do
        table=`mysqlcmd "use $db;show tables;"|sed -n $j"p"`
        for tablename in $table
        do
            engine=`mysqlcmd "use $db;show create table $tablename;"|grep -w -i "engine=myisam"`
            if [[ $? = 0 ]]
            then
                echo $db $table >> $logdir/table.$dates
            fi
        done
    done
done
}
function alterengine ()
{
    [[ ! -e $logdir/table.$dates ]] && exit 1
    while read db table 
    do
        mysqlcmd "alter table $db.$table engine=innodb;"
        sleep $sleeptime
        echo $db $table $(date +%F:%T)
    done < $logdir/table.$dates
}
redirectlog
checkengine
generatedb
generatetable
alterengine
exit 0
时间: 2024-07-28 16:43:34

更改mysql表引擎(shell)的相关文章

[转载]github在线更改mysql表结构工具gh-ost

GitHub正式宣布以开源的方式发布gh-ost:GitHub的MySQL无触发器在线更改表定义工具! gh-ost是GitHub最近几个月开发出来的,目的是解决一个经常碰到的问题:不断变化的产品需求会不断要求更改MySQL表结构.gh-ost通过一种影响小.可控制.可审计.操作简单的方案来改变线上表结构. 在介绍gh-ost之前,我们先了解一下各种现有方案,以及为什么要自己开发一个新工具. 已有的在线修改表定义方案 目前,在线修改表定义的任务主要是通过这三种途径完成的: 在从库上修改表定义,修

Mysql表引擎的切换

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px "PingFang SC" } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC" } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC";

更改mysql默认引擎为Innodb 单个多个

mysql默认是关闭InnoDB存储引擎的使用的,将InnoDB设置为默认的引擎如下.1. 查看mysql存储引擎情况: mysql>show engines. InnoDB | YES,说明此mysql数据库服务器支持InnoDB引擎.2. 设置InnoDB为默认引擎:在配置文件my.ini中的 [mysqld] 下面加入default-storage-engine=INNODB3. 重启mysql服务器4. 登录mysql数据库,mysql>show engines.如果出现 InnoDB

修改mysql 表引擎类型错误

mysql引擎默认类型为MyISAM, mysql>show engines; 事务隔离机制为:READ-COMMITTED(/etc/my.cnf查看) 默认建表如果不指定引擎类型,自动为MyISAM.此时想更改表为InnoDB类型.用户登陆到mysql客户端执行:mysql>alter table ATT engine = InnoDB; 则报错:ERROR 1598 (HY000): Binary logging not possible. Message: Transaction le

更改MySql表和字段区分大小写

数据库和表名在 Windows 中是大小写不敏感的 ,而在大多数类型的 Unix 系统中是大小写敏感的Windows 版的 MySQL 默认继承 os 的大小写习惯,即使 SQL中有区分,在导入的时候都会被转为小写,如果今后再将此数据库导出就可能存在大小写的问题.my.ini 中有属性lower_case_table_names 可以更改此默认值,要严格区分大小写,将此项的置设置为2,再重启 MySQL 服务即可.参考:[mysqld]lower_case_table_names=2 如果没有,

shell脚本:&lt;批量检查并更改MySQL数据库表的存储引擎&gt;&lt;工作中总结&gt;

Work Description: 在搭建完Percona XtraDB Cluster(一种MySQL架构,简称PXC),需要把old mysql中的数据导入到new mysql中,但PXC只支持InnoDB表,非InnoDB表无法同步到PXC的其它节点上,因此我需要批量统一表的引擎. Event Description: 1.需要写个shell脚本,完成两个目的:<1>查询(ck)ENGINE的状态 <2>更改(al)引擎状态 2.需要在管理机上,访问远程MySQL <方

三十一.MySQL存储引擎 、 数据导入导出 管理表记录 匹配条件

1.MySQL存储引擎的配置 查看服务支持的存储引擎 查看默认存储类型 更改表的存储引擎 设置数据库服务默认使用的存储引擎 1.1 查看存储引擎信息 mysql> SHOW ENGINES\G 1.2 查看默认存储类型 mysql> SHOW VARIABLES LIKE 'default_storage_engine'; +------------------------+--------+ | Variable_name          | Value  | +-------------

MySQL执行原理,逻辑分层、更改数据库处理引擎

MySQL执行原理,逻辑分层.更改数据库处理引擎 作者:Stanley 罗昊 用了那么长时间的MySQL,sql语句相信早已烂熟于心,于是,我就试着去了解它的执行原理,以下是我学习过程中的总结要点. 只要是B/S架构,都是会有客户端与服务端,mysql也不例外. 首先客户端发出一个请求,这个请求就是一个查询请求(Select),而它请求的对象就是服务端,服务端是怎么处理这项查询功能的呢? 逻辑分层 首先可以把服务端想象成一个大的容器,里面有四层结构,当一个请求过来后,将会执行这四层,执行一遍后才

如何批量修改mysql表的引擎

工作需要,要将所有的mysql表的引擎改为innodb 执行如下SQL SET @DATABASE_NAME = 'name_of_your_db';SELECT  CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS sql_statementsFROM    information_schema.tables AS tbWHERE   table_schema = @DATABASE_NAMEAND     `ENGINE` =