在同一台服务器、同一个 MySQL 实例下复制数据库。
📝 如下init复制为inittest
bash
xxx为密码
# 1. 创建目标数据库
mysqladmin -u root -pxxx create inittest
# 2. 复制数据
mysqldump -u root -pxxx init | mysql -u root -pxxx inittest
查看进度
mysqldump -u root -pxxx init | pv | mysql -u root -pxxx inittest
注意:执行时会提示输入密码,如果不喜欢每次输密码,可以把 -u root -p 换成 -u root -p你的密码(但这样密码会明文显示在命令历史中,生产环境不推荐)。
⚡ 加加速(针对大表)
如果你的 init 里有几百万行以上的大表 ,可以加上 --extended-insert 参数(默认已开启),它会将多行数据合并成一条 INSERT 语句,显著加快导入速度:
bash
mysqldump --extended-insert -u root -p init | mysql -u root -p inittest
🧹 如果只需复制表结构,不要数据
bash
mysqldump -u root -p --no-data init | mysql -u root -p inittest
⚠️ 几个提醒
| 提醒点 | 说明 |
|---|---|
| 存储空间 | 确保 MySQL 数据目录剩余空间足够存放两份数据(原库 + 新库),建议至少 1.5 倍以上 |
| 表数量多 | 如果 init 有几百张表,管道方式会跑得慢一些,请耐心等待 |
| 字符集 | 如果原库有特殊字符集(如 utf8mb4),建议 mysqldump 时加上 --default-character-set=utf8mb4 |
| 视图/存储过程 | 如果原库有这些对象,记得加 --routines 参数 |
✅ 执行完后检查
sql
-- 查看所有数据库,确认 inittest 已出现
SHOW DATABASES;
-- 查看新库中的表数量是否与原库一致
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'inittest';
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'init';