mysql如何更改库名 · sqlfans

您所在的位置:网站首页 mysql中文姓名命令 mysql如何更改库名 · sqlfans

mysql如何更改库名 · sqlfans

2024-01-15 08:49| 来源: 网络整理| 查看: 265

mysql如何更改库名准备测试数据方案1-直接 rename 库名 - 已弃用方案2-利用 rename table 改整库的表名 - 慎用方案3-利用mysqldump导出老库数据并导入新库 - 安全mysql如何更改库名

[TOC]

如果 库中所有表为MyISAM引擎,直接更改 datadir 目录下该库对应的目录 即可(需要停机,也不太实际),而 Innodb 这样操作则会提示相关表不存在。

本文以 老库aaa 改为 新库bbb 为例,介绍3种 innodb 数据库改名的方案,仅供参考。

准备测试数据 use mysql; drop database if exists aaa; drop database if exists bbb; create database aaa; create table aaa.t1(id int); insert into aaa.t1 values(1),(2),(3); select * from aaa.t1; 方案1-直接 rename 库名 - 已弃用 MySQL 5.1.7 到 5.1.23 之间的版本提供了一个 rename database aaa to bbb 的命令来直接对数据库改名,可能由于实现的功能不完备(比如,这条命令可能是一个超大的事务,或者是由于之前的表很多还是 MyISAM 等),官方并不推荐(会有丢失数据的危险),后来的版本直接取消了这条命令。 方案2-利用 rename table 改整库的表名 - 慎用 利用 rename table 改表名的方法,在新表的表名前面加上新的数据库名,这样就会将老数据库的表移动到新的数据库。 参考这个思路,把旧库的所有表依次遍历,批量改名为新库的表。所以,这种方法简单快速,但此方案只迁移表,不迁移 存储过程、视图、事件、触发器等对象,慎用。 #!/bin/bash olddb=aaa newdb=bbb host=x.x.x.x port=3406 user=dba_admin pawd=*** mysql -h$host -P$port -u$user -p$pawd -e"create database if not exists ${newdb};" tablist=$(mysql -h$host -P$port -u$user -p$pawd -Nse"select table_name from information_schema.TABLES where TABLE_SCHEMA='${olddb}' order by table_name;") for table in $tablist do mysql -h$host -P$port -u$user -p$pawd -e"rename table ${olddb}.${table} to ${newdb}.${table};" done #mysql -h$host -P$port -u$user -p$pawd -e"drop database if exists ${olddb};"

附:mysql登陆命令行参数

-e, --execute=name #.执行mysql的sql语句 -N, --skip-column-names #.不显示列信息 -s, --silent #.一行一行输出,中间有tab分隔 其实利用 navicat 拖拽老库的表名到新库,也是这个思路: 1.创建新的数据库 2.使用 navicat 选中老库的所有旧表,拖动到新库,就可以复制表结构和数据,而且速度很快 3.复制完成之后,老库可以删除,留着当个备份也行

Alt text

方案3-利用mysqldump导出老库数据并导入新库 - 安全

如下方案最安全,但如果数据量大,就比较耗时,稍微折腾。

mysqldum 导出老库 aaa(包含:表、视图、触发器、事件、存储过程、存储函数等) mysqldump --single-transaction --master-data=2 --flush-logs --set-gtid-purged=off --triggers --events --routines --skip-tz-utc -uroot -p --databases aaa > /data/aaa.sql 创建新库 bbb create database if not exists bbb; 替换dump文件中的db名称(因为dump文件里包含 CRATE DATABASE aaa 和 USE aaa) sed -i '/DATABASE/d' /data/aaa.sql sed -i '/^USE `aaa`;/c USE `bbb`;' /data/aaa.sql 将老库的备份文件导入新库 bbbb source /data/aaa.sql; 删除老库 aaa drop database if exists aaa; Copyright © www.sqlfans.cn 2023 All Right Reserved更新时间: 2022-01-14 17:30:03


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3