MySQL如何修改库名

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

  在MySQL数据库中,可以使用rename table对表进行重命名,但是无法使用rename database命令(老版本支持(5.1.7到5.1.23),但是在新版本中去除,因为存在安全风险);但是我们依旧可以用一些其他的方法实现这个逻辑。

  具体分为以下三种方法:

mysqldump

#创建目标库
root@mysql8 13:00:  [test]> create database test_bak;
Query OK, 1 row affected (0.01 sec)
#确认源端数据
root@mysql8 13:00:  [test]> select count(*) from t1;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.10 sec)

#mysqldump导出数据
[root@zijie data]# /usr/local/mysql/mysql8/bin/mysqldump --defaults-file=/etc/my.cnf -uroot -p970125 --socket=/data/mysql8/data/mysql8.sock --default-character-set=utf8mb4 --single-transaction --master-data=2 --skip-add-drop-table -e --skip-tz-utc --flush-logs --set-gtid-purged=OFF --databases test --tables t1 t2>test.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
#导入数据到新库

[root@zijie data]# mysql -uroot -p970125 test_bak<test.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
#确认目标端数据
root@mysql8 13:16:  [test_bak]> select count(*) from t1;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.09 sec)

#确认无误后删除源库

  因为使用mysqldump逻辑备份,所以在数据量很大的时候会比较慢。

传输表空间

1.目标端创建同样的表结构
root@mysql8 13:21:  [test_bak]> create table test_bak.t1 like test.t1;
Query OK, 0 rows affected (0.06 sec)
2.目标端卸载表空间
alter table test_bak.t1 discard tablespace;    
3.源端对表加一个读锁(会话不要关)
flush table test.t1 for export;
4.拷贝.cfg和.ibd文件到目标端数据文件位置
[root@zijie test]# ll
总用量 40M
-rw-r----- 1 mysql mysql 1.3K 6月   3 13:24 t1.cfg
-rw-r----- 1 mysql mysql  17M 6月   3 13:21 t1.ibd
-rw-r----- 1 mysql mysql  22M 6月   3 13:21 t2.ibd
[root@zijie test]# cp t1.* ../test_bak/
[root@zijie test]# cd ../test
[root@zijie test]# ll
总用量 40M
-rw-r----- 1 mysql mysql 1.3K 6月   3 13:24 t1.cfg
-rw-r----- 1 mysql mysql  17M 6月   3 13:21 t1.ibd
-rw-r----- 1 mysql mysql  22M 6月   3 13:21 t2.ibd
5.源端释放锁
unlock tables;
6.目标端文件赋予权限
chown -R mysql:mysql *
chmod -R 755 *
7.目标端导入表
root@mysql8 13:28:  [test_bak]> alter table test_bak.t1 import tablespace;
Query OK, 0 rows affected (1.39 sec)
8.确认数据
root@mysql8 13:28:  [test_bak]> select count(*) from t1;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.12 sec)

rename脚本方式

  使用脚本方式,rename table更改表名的命令,但是如果新表名后面加数据库,将会将原来的数据库的表移动到新的数据库

#!/bin/bash
time=20200602
list_database=$(mysql -uroot -p970125 -Nse "select distinct(table_schema) from information_schema.TABLES where TABLE_SCHEMA not in ('sys','information_schema','mysql','performance_schema')" 2>/dev/null)
for database in ${list_database}
do
    mysql -uroot -p970125 -e "create database if not exists ${list_database}${time}"
done
list_table=$(mysql -uroot -p970125 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA not in ('sys','information_schema','mysql','performance_schema')" 2>/dev/null)
for database in ${list_database}
do
    for table in ${list_table}
    do
        mysql -uroot -p970125 -e "rename table ${database}.${table} to ${database}${time}.${table}"
    done
done
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
关系型数据库 MySQL Linux
Centos 8系统Mysql 8修改root密码
Centos 8系统Mysql 8修改root密码
|
SQL 存储 数据可视化
删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏
删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏
264 0
删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏
|
关系型数据库 MySQL 数据库
MySQL常见问题的解决,root用户密码忘记,不是内部或外部命令,修改数据库和表的字符编码,命令行客户端的字符集问题
MySQL常见问题的解决,root用户密码忘记,不是内部或外部命令,修改数据库和表的字符编码,命令行客户端的字符集问题
179 2
MySQL常见问题的解决,root用户密码忘记,不是内部或外部命令,修改数据库和表的字符编码,命令行客户端的字符集问题
|
安全 关系型数据库 MySQL
因安全要求,需要修改mysql同步用户repl的密码。在主库修改完后,从库最佳修改同步用户密码的方式
因安全要求,需要修改mysql同步用户repl的密码。在主库修改完后,从库最佳修改同步用户密码的方式
489 0
|
关系型数据库 MySQL Java
Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionExcep linux下mysql修改连接超时wait_timeout修改后就ok了
Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionExcep linux下mysql修改连接超时wait_timeout修改后就ok了
144 1
|
SQL 关系型数据库 MySQL
MySQL基础-表操作~修改数据
修改数据的具体语法为: UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
115 0
|
关系型数据库 MySQL
MySQL数据表不能修改、删除等操作,卡死、锁死情况的处理办法。
MySQL数据表不能修改、删除等操作,卡死、锁死情况的处理办法。
1589 0
|
存储 Ubuntu 关系型数据库
Ubuntu 18.04 修改Mysql默认数据存储路径
Ubuntu 18.04 修改Mysql默认数据存储路径
445 0
Ubuntu 18.04 修改Mysql默认数据存储路径
|
关系型数据库 MySQL 数据库
【数据库】【MySQL】创建数据库、数据表、修改数据表字段的一些基本操作
【数据库】【MySQL】创建数据库、数据表、修改数据表字段的一些基本操作
115 0
|
SQL 算法 安全
【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)
文章目录 1 视图的介绍与作用 2 视图的创建 3 视图的修改 4 视图的更新 5 视图的重命名与删除 6 视图的练习 6.1 数据准备 6.2 查询平均分最高的学校名称 写在最后
【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)