接到个需求,导出一个数据库所有表格结构,不要数据,但是 sys_ 开头的表要数据

mysqldump是不支持通配符导出的,经过一番研究还是实现了

1.mysqldump只导出全量表结构

mysqldump -uroot -p'密码' -d 库名 > /docker-entrypoint-initdb.d/库名.sql

 

2.mysqldump导出部分表

#导出所有的sys_开头的表名到文件tbs
mysql -uroot -p'密码' -N information_schema -e "select table_name from tables where TABLE_schema='库名' and table_name like 'sys_%' " > /docker-entrypoint-initdb.d/tbs.txt
#读取文件表名并通过mysqldump导出
 cat /docker-entrypoint-initdb.d/tbs.txt|xargs mysqldump -uroot -p'密码'  库名  > /docker-entrypoint-initdb.d/库名_sys.sql

 如果导出时想排除某些表可用如下语句

#导出除了_backup结尾和tmp_开头以外的所有表名到文件tbs
mysql -uroot -p'密码' -N information_schema -e "select table_name from tables where TABLE_schema='库名' and table_name not like '%_backup' and table_name not like 'tmp_%'" > /docker-entrypoint-initdb.d/tbs.txt
#读取文件表名并通过mysqldump导出
cat /docker-entrypoint-initdb.d/tbs.txt|xargs mysqldump -uroot -p'密码'  --single-transaction 库名  > /docker-entrypoint-initdb.d/库名_20240204.sql

 注意:这里,排除关联和平时的like不一样,这里用的是and

 

3.导入数据

由于sql文件自带DROP TABLE IF EXISTS 所以只用先导入全量表结构,再导入sys表数据即可

 

参考文档:https://blog.csdn.net/oddrock/article/details/130044864

posted on 2024-01-11 11:46  06  阅读(241)  评论(0编辑  收藏  举报