【同一台服务器、同一个 MySQL 实例下复制数据库】

同一台服务器、同一个 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';