美文网首页
MySQL预先创建批量分库分表的脚本

MySQL预先创建批量分库分表的脚本

作者: 张伟科 | 来源:发表于2018-02-06 10:30 被阅读533次

    在工作过程中,经常会遇到由于评估的表数据量太大,需要对MySQL进行分库分表操作,比如需要先建立十个库,每个库根据日期建立一个表,格式如下:

    库名:meta_file_(1……10)

    表:meta_file_(180101……181231)

    批量创建分库分表的脚本(create_multi_table.sh):

    #!/bin/bash

    # Connection MySQL

    CMD="mysql -S /var/lib/mysql/mysql.sock"

    # 第一个for循环,用于创建库;

    for i in `seq 1 10`;do

      # 定义数据库的名称;

      database="meta_file_$i"

      $CMD -e "CREATE DATABASE IF NOT EXISTS $database;"

      # 第二个for循环,用于创建表($month);

      for i in `seq 1 3`;do

      month=`printf "%02d\n" $i`

      # 第三个for循环,用于创建表($day)

      for i in `seq 1 31`;do

      day=`printf "%02d\n" $i`

      # 定义表的名称;

      table="meta_file_18${month}${day}"

      # 把转义后的SQL语句导入到.sql文件;

      echo "CREATE TABLE $table(

        \`id\` int(10) unsigned NOT NULL AUTO_INCREMENT,

        \`fid\` bigint(15) NOT NULL,

        \`filename\` varchar(128) NOT NULL DEFAULT '',

        \`uid\` bigint(15) unsigned NOT NULL DEFAULT '0',

        \`appid\` int(10) unsigned NOT NULL DEFAULT '1',

        \`ip\` int(10) unsigned NOT NULL DEFAULT '0',

        \`tfsfid\` varchar(20) NOT NULL DEFAULT '',

        \`filetype\` smallint(4) NOT NULL DEFAULT '0',

        \`filesize\` int(10) unsigned NOT NULL DEFAULT '0',

        \`ctime\` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

        \`extension\` varchar(12) NOT NULL DEFAULT '',

        \`tid\` bigint(15) unsigned NOT NULL DEFAULT '0',

        \`props\` varchar(300) NOT NULL DEFAULT '',

        PRIMARY KEY (\`id\`),

        KEY \`meta_file_fid\` (\`fid\`)

      ) ENGINE=InnoDB;" > /app/scripts/table_desc.sql

      # 执行创建表的语句;

      $CMD $database -e "source /app/scripts/table_desc.sql;"

      # 打印一些信息;

      if [ $? = 0 ];then

        echo -e "\033[1;32mcreate ${database}.${table} success\033[0m"

      else

        echo -e "\033[1;31mcreate ${database}.${table} failed\033[0m"

      fi

      done

      done

    done


    批量删除分库分表的脚本(drop_multi_table.sh):

    #!/bin/bash

    # Connection MySQL

    CMD="mysql -S /var/lib/mysql/mysql.sock"

    # 第一个for循环,用于定义库名;

    for i in `seq 1 10`;do

      # 定义数据库的名称;

      database="meta_file_$i"

      # 第二个for循环,用于定义表($month);

      for i in `seq 1 3`;do

      month=`printf "%02d\n" $i`

      # 第三个for循环,用于定义表($day)

      for i in `seq 1 31`;do

      day=`printf "%02d\n" $i`

      # 定义表的名称;

      table="meta_file_18${month}${day}"

      # 执行创建表的语句;

      $CMD $database -e "drop table $table"

      # 打印一些信息;

      if [ $? = 0 ];then

        echo -e "\033[1;32mdrop ${database}.${table} success\033[0m"

      else

        echo -e "\033[1;31mdrop ${database}.${table} failed\033[0m"

      fi

      done

      done

      # 删除数据库;

      $CMD -e "drop database $database"

    done

    相关文章

      网友评论

          本文标题:MySQL预先创建批量分库分表的脚本

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