美文网首页
修改MySql数据库名称及附带脚本

修改MySql数据库名称及附带脚本

作者: 架构师联盟 | 来源:发表于2020-02-22 16:56 被阅读0次

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

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

    1、数据表迁移,

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

    三、 脚本的使用:

    image.png

    1、 source:源数据库名称

    2、 target:目标数据库名称

    3、 是否删除源数据库

    四、 脚本运行

    1、在客户端运行

    CREATE DEFINER=`root`@`%` PROCEDURE `move_tables`( IN `source` VARCHAR ( 20 ), IN `target` VARCHAR ( 20 ), IN `is_delete_database` TINYINT )
    
    BEGIN
    
     DECLARE
    
     v_index INT UNSIGNED DEFAULT 0;
    
     DECLARE
    
     v_table_name VARCHAR ( 50 );
    
     CREATE TEMPORARY TABLE table_list (
    
     id INT auto_increment,
    
     table_name VARCHAR ( 50 ),
    
     KEY ( id ));
    
     INSERT INTO table_list ( table_name ) SELECT
    
     table_name
    
     FROM
    
     information_schema.`TABLES`
    
     WHERE
    
     TABLE_SCHEMA = source;
    
     SELECT
    
     count( 1 ) INTO v_index
    
     FROM
    
     table_list;
    
     LOOP_LABEL :
    
     LOOP
    
     SELECT
    
     table_name INTO v_table_name
    
     FROM
    
     table_list
    
     WHERE
    
     id = v_index;
    
     SET @strsql = concat( 'RENAME TABLE ', source, '.', v_table_name, ' to ', target, '.', v_table_name );
    
     PREPARE dysql
    
     FROM
    
     @strsql;
    
     EXECUTE dysql;
    
     DEALLOCATE PREPARE dysql;
    
     SET v_index = v_index - 1;
    
     IF
    
     v_index < 1 THEN
    
     LEAVE LOOP_LABEL;
    
     END IF;
    
     END LOOP;
    
     DROP TABLE table_list;
    
     IF
    
     is_delete_database = 1 THEN
    
     SET @strdropsql = concat( 'DROP DATABASE ', source );
    
     PREPARE dysql
    
     FROM
    
     @strdropsql;
    
     EXECUTE dysql;
    
     DEALLOCATE PREPARE dysql;
    
     END IF;
    
    END
    

    2、调用

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

    显示结果如下:

    image.png

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

    脚本下载
    

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

    相关文章

      网友评论

          本文标题:修改MySql数据库名称及附带脚本

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