美文网首页
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预先创建批量分库分表的脚本

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

  • Mysql的分库分表,水平拆分-垂直拆分

    参考文章MySQL分库分表总结参考数据库分库分表策略,如何分库,如何分表?MySQL分库分表原理 MySQL单库数...

  • 分库分表

    【分库、分表】MySQL分库分表方案 - MrSunny - 博客园 总结下Mysql分表分库的策略及应用 - 周...

  • mysql优化

    Mysql分库分表方案 Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时...

  • MYSQL分库分表

    大众点评订单系统分库分表实践 利用Mycat中间件实现RDS MySQL的分库分表及读写分离功能 MYSQL数...

  • 分库分表方案

    为什么分库分表?单库单表性能时延扛不住,或者存储空间扛不住 分库和分表有区别吗?存在批量查询的情况下,分表只能徒增...

  • (转载)MySQL数据库之互联网常用分库分表方案

    MySQL数据库之互联网常用分库分表方案 一、数据库瓶颈 1、IO瓶颈 2、CPU瓶颈 二、分库分表 1、水平分库...

  • 浅谈mysql数据库分库分表那些事-亿级数据存储方案

    一、概述 mysql分库分表一般有如下场景 垂直分表(将表分为主表和扩展表) 垂直分库(将表按业务归属到不同的库,...

  • 面试必备:我们为什么要分库分表?

    目录 什么是分库分表 为什么需要分库分表呢 如何分库分表 什么时候开始考虑分库分表 分库分表会导致哪些问题 分库分...

  • 16 MySQL 分库分表

    MySQL 分库分表 [toc] 分库 分表 将存放在一个数据库( 主机 )中的数据,按照特定方式进行拆分,分散存...

网友评论

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

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