对MySQL单个表和批量表转变引擎脚本

发布时间:2019-06-16  栏目:SQL  评论:0 Comments

mysql_convert_table_format工具可以批量转变MYSQL数据库表的存款和储蓄引擎,要是是RPM安装一般在/usr/bin
或许/usr/sbin下。本文大家任重(英文名:rèn zhòng)而道远介绍利用mysql_convert_table_format工具将MySQL数据库表的存储引擎批量更改为MYISAM汽油发动机的不二秘籍,接下去就让大家来一起精通这一有的剧情。

合作社近日的MySQL总是大方的锁表,分析了弹指间,基本上都是用的MYISAM表引擎,MYISAM在一张表里多量的读写会招致MySQL整张表都锁死,
而产生动态
内容不能够立时读数据,给用户体验带来巨大的熏陶。INNODB的干活原理只是锁表的单行记录(行锁),不会潜移默化平等张表内的别的行记录。于是写下了以下SHELL脚本
,可单个表和整数据库的斯特林发动机调换.

先是施行下边包车型大巴代码:

#!/bin/sh

# Arg1          : -d dbname
# Arg2          : -t [tables]
# Arg3          : -e engine type (myisam | innodb)

User=\"root\"
Pwd=\"666666\"
MYSQLbin=\"/usr/local/mysql/bin/mysql -u$User -p$Pwd -e\"
TmpFile=\'/tmp/table.tmp\'
Usage()
{
    echo \"Usage():$0 -d dbname [-t tbname] -e engine( myisam | innodb )\"
}
if [ $# -eq 0 ];then
   Usage
   exit 1
fi
while getopts d:t:e:h OPTION
do
 case $OPTION in
 d)
 {
    DBName=$OPTARG
       DBExists=`$MYSQLbin \"show databases;\"|grep \"$DBName\"`
    if [ \"$DBExists\" == \"\" ];then
       echo \"$DBName database not exists!\"
  exit 1
     fi
 };;
 t)
 {
    TBName=$OPTARG
    TBExists=`$MYSQLbin \"use $DBName;show tables\"|grep $TBName`
    if [ \"$TBExists\" == \"\" ];then
        echo \"$TBName table not exists!\"
        exit 1
    fi
 };;
        e)
         {
   EngineName=`echo $OPTARG|tr A-Z a-z`
   if [ \"$EngineName\" != \"myisam\" ] && [ \"$EngineName\" != \"innodb\" ];then
          Usage
  echo \"Engine $EngineName is no exists!\"
  exit 1
          fi
   };;
 ?|h)
     Usage
     exit 0
   ;;
 esac
done

        if [ \"$EngineName\" == \"\" ];then
                Usage
                echo \"Lose \'-e (innodb | myisam)\'!\"
                exit 1
        fi

if [ \"$TBName\" != \"\" ];then
 CurrentEngine=`$MYSQLbin \"use $DBName;show table status like \'$TBName\'\\G\"|grep Engine|awk \'{print $2}\'|tr A-Z a-z`
 if [ \"$CurrentEngine\" == \"$EngineName\" ];then
     echo -e \"\\033[31m Current Table $TBName is already of type $EngineName;Ignored! \\033[0m\"
     exit 0
 fi
        $MYSQLbin \"use $DBName;alter table $TBName engine=$EngineName\"
else
 $MYSQLbin \"use $DBName;show tables\"|sed 1d > $TmpFile
 while read Table
 do
    CurrentEngine=`$MYSQLbin \"use $DBName;show table status like \'$Table\'\\G\"|grep Engine|awk \'{print $2}\'|tr A-Z a-z`
           if [ \"$CurrentEngine\" == \"$EngineName\" ];then
               echo -e \"\\033[31m Current Table $Table is already of type $EngineName;Ignored! \\033[0m\"
    else
        $MYSQLbin \"use $DBName;alter table $Table engine=$EngineName;\"
        echo -e \"\\033[32m $DBName Table $Table Convert $EngineName is  Sucessfull! \\033[0m\"
#  continue
           fi
 done  < $TmpFile
fi
#该片段来自于http://outofmemory.cn
[[email protected] ~]# mysql_convert_table_format   /usr/sbin/mysql_convert_table_format version 1.1   Conversion of a MySQL tables to other table types. 

转移MYSQL表成别的表的类型,如:INNODB ,MEMO昂科拉Y等。

Usage: /usr/sbin/mysql_convert_table_format database [tables]。

用法: /usr/sbin/mysql_convert_table_format 数据库名
表名,也正是能够单独钦赐全库,或然全表,类似mysqldump。

If no tables has been specifed, all tables in the database will be
converted。

如果没钦点表,那么数据库中的全体表将会被撤换。

The following options are available:   --force   Continue even if there is some error. 

倘使遇上错误强制实行更动。

--help or --Information   Shows this help 

翻开支持。

--host='host name' (Default localhost)   Host name where the database server is located. 

改换的主机名,默认为本地主机(localhost)。

--password='password'  Password for the current user. 

时下拓展更动用户的密码。

--port=port   TCP/IP port to connect to if host is not "localhost". 

借使不是以localhost 连接的话,请钦赐端口。

--socket='/path/to/socket'  Socket to connect with. 

SOCKET文件存在的职位SOCKET是过程间通讯所用到的)。

--ENGINE='table-type'  Converts tables to the given table type (Default: myisam)   MySQL 3.23 supports at least the BDB, ISAM and MYISAM types. 

积存引擎,默感到MYISAM,这里要专注,笔者测试的时候,要修改那一个PE帕杰罗L脚本,如若你把库转成INNODB,就在本子里把MYISAM写成INNODB。

--user='user_name'  User name to log into the SQL server. 

接连的用户名。

--verbose   This is a test specific option that is only used when debugging a test.   Print more information about what is going on.   --version   Shows the version of this program. 

查看工具的版本音讯。

用法:笔者是用本机实行测试,OS:奥迪Q5HEL5.2 MYSQL:5.1.30

mysql_convert_table_format mo –user=’root’ –password=’mysql’
–force –socket=’/tmp/mysql.sock’

把数据库mo中的全体表转变到MYISAM引擎。

翻开数据文件目录。

[[email protected] ~]# ll /opt/mysql-data/mo/   总计 960   -rw-rw---- 1 mysql mysql 12914 03-02 22:55 action_log.frm   -rw-rw---- 1 mysql mysql 8900 03-02 22:55 alarm_log.frm   -rw-rw---- 1 mysql mysql 8898 03-02 22:55 check_data.frm   -rw-rw---- 1 mysql mysql 8836 03-02 22:55 check_data_log.frm   -rw-rw---- 1 mysql mysql 1708 03-02 22:55 check_data_log.par   -rw-rw---- 1 mysql mysql 8898 03-02 22:55 check_data_tmp.frm   -rw-rw---- 1 mysql mysql 9096 03-02 22:55 checkpoint.frm   ……………………………………. 

唯有表的组织文件,看看表空间有未有狠抓。

[[email protected] ~]# ll -lh /opt/mysql-data/ib*   -rw-rw---- 1 mysql mysql 34M 03-02 23:18 /opt/mysql-data/ibdata1   -rw-rw---- 1 mysql mysql 5.0M 03-02 23:18 /opt/mysql-data/ib_logfile0   -rw-rw---- 1 mysql mysql 5.0M 12-22 20:19 /opt/mysql-data/ib_logfile1 

默许未有用INNODB的是10M,现在自家的形成30M了。

修改工具

把MYISAM修改成INNODB

Vi /usr/local/mysql/bin/mysql_convert_table_format

把第26行$opt_type=”innodb” 改成$opt_type=”myisam”

用工具举办库的转变

[[email protected] ~]# mysql_convert_table_format mo --user='root' --password='mysql' --socket='/tmp/mysql.sock'  [[email protected] ~]# 

成功做到,再看看数据文件:

总计 2568   -rw-rw---- 1 mysql mysql 12914 03-02 23:18 action_log.frm   -rw-rw---- 1 mysql mysql     0 03-02 23:18 action_log.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 action_log.MYI   -rw-rw---- 1 mysql mysql 8900 03-02 23:18 alarm_log.frm   -rw-rw---- 1 mysql mysql     0 03-02 23:18 alarm_log.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 alarm_log.MYI   -rw-rw---- 1 mysql mysql 8898 03-02 23:18 check_data.frm   -rw-rw---- 1 mysql mysql 8836 03-02 23:18 check_data_log.frm   -rw-rw---- 1 mysql mysql 1708 03-02 23:18 check_data_log.par   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p0.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p0.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p100.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p100.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p101.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p101.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p102.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p102.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p103.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p103.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p104.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p104.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p105.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p105.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p106.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p106.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p107.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p107.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p108.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p108.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p109.MYD   -rw-rw---- 1 mysql mysql 1024 03-02 23:18 check_data_log#P#p109.MYI   -rw-rw---- 1 mysql mysql     0 03-02 23:18 check_data_log#P#p10.MYD 

一度打响调换到MYISAM引擎。

有关利用mysql_convert_table_format工具来批量转移MySQL数据库表的贮存引擎的措施就介绍到此地了,希望此番的牵线能够对您抱有收获。

http://www.bkjia.com/Mysql/578391.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/578391.htmlTechArticlemysql\_convert\_table\_format工具 能够批量转变MYSQL数据库表的仓库储存引擎 ,假诺是RPM安装一般在/usr/bin
大概/usr/sbin下。本文大家首要介绍利用mysql…

留下评论

网站地图xml地图