zoukankan      html  css  js  c++  java
  • 批量转移MySql数据表及附带脚本

    一、 在开发流程中,我们会部署多环境,其中数据库结构及数据同步是非常重要的一环,为了便于项目复盘,我们往往会保留数据库一段时间,比如类似这样的方式:db_20200210,db_20200220,db_20200229,db_xxxxxxxx,但MySql是不支持直接修改数据库名称的,我们在从阿里云的RDS生产环境同步到仿真环境就遇到这个问题,每次都是直接这样命名,但项目的配置文件配置的数据库名称是db,避免不了要改配置文件,就是用分布式配置,也是多了一个环节,人为的操作是不能保证不出错误的,所有就有了这个脚本来完成这个过程。

    二、 脚本主要完成的功能:

    1、数据表迁移,

    2、是否删除原来数据库(因为RDS做DTS迁移是不能存在相同数据库名称的,所有加了这个功能)

    三、 脚本的使用:


    1、 source:源数据库名称

    2、 target:目标数据库名称

    3、 是否删除源数据库

    四、 脚本运行

    1、在客户端运行

      1 CREATE DEFINER=`root`@`%` PROCEDURE `move_tables`( IN `source` VARCHAR ( 20 ), IN `target` VARCHAR ( 20 ), IN `is_delete_database` TINYINT )
      2 
      3 BEGIN
      4 
      5 DECLARE
      6 
      7 v_index INT UNSIGNED DEFAULT 0;
      8 
      9 DECLARE
     10 
     11 v_table_name VARCHAR ( 50 );
     12 
     13 CREATE TEMPORARY TABLE table_list (
     14 
     15 id INT auto_increment,
     16 
     17 table_name VARCHAR ( 50 ),
     18 
     19 KEY ( id ));
     20 
     21 INSERT INTO table_list ( table_name ) SELECT
     22 
     23 table_name
     24 
     25 FROM
     26 
     27 information_schema.`TABLES`
     28 
     29 WHERE
     30 
     31 TABLE_SCHEMA = source;
     32 
     33 SELECT
     34 
     35 count( 1 ) INTO v_index
     36 
     37 FROM
     38 
     39 table_list;
     40 
     41 LOOP_LABEL :
     42 
     43 LOOP
     44 
     45 SELECT
     46 
     47 table_name INTO v_table_name
     48 
     49 FROM
     50 
     51 table_list
     52 
     53 WHERE
     54 
     55 id = v_index;
     56 
     57 SET @strsql = concat( 'RENAME TABLE ', source, '.', v_table_name, ' to ', target, '.', v_table_name );
     58 
     59 PREPARE dysql
     60 
     61 FROM
     62 
     63 @strsql;
     64 
     65 EXECUTE dysql;
     66 
     67 DEALLOCATE PREPARE dysql;
     68 
     69 SET v_index = v_index - 1;
     70 
     71 IF
     72 
     73 v_index < 1 THEN
     74 
     75 LEAVE LOOP_LABEL;
     76 
     77 END IF;
     78 
     79 END LOOP;
     80 
     81 DROP TABLE table_list;
     82 
     83 IF
     84 
     85 is_delete_database = 1 THEN
     86 
     87 SET @strdropsql = concat( 'DROP DATABASE ', source );
     88 
     89 PREPARE dysql
     90 
     91 FROM
     92 
     93 @strdropsql;
     94 
     95 EXECUTE dysql;
     96 
     97 DEALLOCATE PREPARE dysql;
     98 
     99 END IF;
    100 
    101 END

    2、调用

    call move_tables('db,'db_20200222',0);

    显示结果如下:


    这样数据库db就同步到了db_20200222,如果想直接删除db数据库,可以设置 is_delete_database为1即可,这样就变通的把数据库名称有db改成了db_20200222,接下来你想做什么,就根据业务需求继续吧。

    脚本下载
    链接:https://pan.baidu.com/s/1D3q0iBc56W6JSmPgHwmoSQ
    提取码:dljv

  • 相关阅读:
    数据库索引概念与优化
    数据库查询效率分析
    C语言结构体与C++结构体之间的差异
    判断一个序列是否为栈的弹出序列
    C语言中的结构体
    C++ STL 中的 std::sort()
    Spring注入值到静态变量
    层次遍历二叉树
    计算二叉树的大小
    计算二叉树的高度
  • 原文地址:https://www.cnblogs.com/lzh-boy/p/12346216.html
Copyright © 2011-2022 走看看