linux复制数据库命令
linux复制数据库命令详细介绍
在 Linux 系统中复制数据库的具体操作取决于使用的数据库类型,以下是常见数据库的复制方法:
一、MySQL/MariaDB 数据库复制
MySQL 复制数据库通常通过逻辑备份 + 导入的方式实现,适用于在线复制(无需停止服务)。
步骤 1:使用 mysqldump 导出原数据库
mysqldump 是 MySQL 自带的备份工具,可将数据库结构和数据导出为 SQL 脚本。
命令格式:
bash
mysqldump 用户名 原数据库名 备份文件.sql
-u:指定数据库用户名(如root)。-p:提示输入密码(输入时无回显)。原数据库名:需要复制的源数据库名称(如old_db)。备份文件.sql:导出的 SQL 脚本存储路径(如backup.sql)。
示例:
bash
mysqldump root old_db /tmp/old_db_backup.sql
步骤 2:创建新数据库并导入备份
需先创建一个空的目标数据库,再将备份的 SQL 脚本导入。
- 登录 MySQL 创建新数据库:
bashmysql root-e:直接执行后续的 SQL 命令(无需进入交互式终端)。
- 导入备份到新数据库:
bashmysql root new_db /tmp/old_db_backup.sql- 该命令会将
backup.sql中的 SQL 语句执行到new_db数据库中,完成数据复制。
- 该命令会将
二、PostgreSQL 数据库复制
PostgreSQL 可通过 pg_dump(导出)和 psql(导入)组合实现数据库复制。
步骤 1:使用 pg_dump 导出原数据库
pg_dump 是 PostgreSQL 的逻辑备份工具,支持导出为 SQL 脚本。
命令格式:
bash
pg_dump 用户名 原数据库名 备份文件.sql
-U:指定数据库用户名(如postgres)。-d:指定源数据库名(如old_db)。-f:指定备份文件路径(如/tmp/old_db_backup.sql)。
示例:
bash
pg_dump postgres old_db /tmp/old_db_backup.sql
步骤 2:创建新数据库并导入备份
- 创建新数据库(需先登录
psql或使用命令行):
bashcreatedb postgres new_db - 导入备份到新数据库:
bashpsql postgres new_db /tmp/old_db_backup.sql
三、文件级复制(适用于离线场景)
若数据库支持文件级复制(如 MySQL 的 MyISAM 引擎、PostgreSQL 的文件存储),可直接复制数据文件,但需注意:
- 数据库必须离线(停止服务),否则可能导致数据不一致。
- 权限一致:复制后的文件需与原数据库用户(如
mysql、postgres)权限匹配。 - 存储引擎限制:InnoDB 引擎需额外处理(如复制
ibdata1、ib_logfile*等共享文件)。
MySQL 文件级复制示例
- 停止 MySQL 服务:
bashsystemctl stop mysql - 复制数据目录(通常在
/var/lib/mysql/[原数据库名])到新路径:
bash/var/lib/mysql/old_db /var/lib/mysql/new_db - 调整文件权限(确保属主为
mysql用户):
bashmysql:mysql /var/lib/mysql/new_db - 启动 MySQL 服务:
bashsystemctl start mysql
注意事项
- 逻辑备份(
mysqldump/pg_dump)更通用,适合在线复制;文件级复制速度快,但风险较高(依赖存储引擎和离线状态)。 - 复制大数据库时,建议添加
--single-transaction(MySQL)或-Fc(PostgreSQL 压缩格式)优化备份速度。 - 操作前务必确认数据库版本兼容(如原库和目标库的 MySQL 版本差异不宜过大)。