菜鸟科技网

linux 数据库导入命令

在Linux环境下,数据库导入操作是日常运维和开发中的常见任务,不同数据库系统(如MySQL、PostgreSQL、MongoDB等)有其专属的导入命令和工具,掌握这些命令的语法、参数及适用场景,能高效完成数据迁移、备份恢复等操作,以下将详细介绍主流数据库的导入命令及使用方法,并结合实例说明注意事项。

linux 数据库导入命令-图1
(图片来源网络,侵删)

MySQL数据库导入命令

MySQL提供了多种导入方式,最常用的是mysql命令行工具和mysqldump结合导入,适用于不同场景(如表结构导入、全量数据导入、单表导入等)。

基础语法

mysql -u [用户名] -p[密码] [数据库名] < [备份文件路径]
  • -u:指定MySQL用户名,如-u root
  • -p:提示输入密码,若密码后直接跟密码(如-p123456),则无需交互输入,但存在安全风险,建议不写密码,通过交互输入;
  • [数据库名]:目标数据库名称,若备份文件中包含创建数据库语句(如CREATE DATABASE),可省略数据库名,直接导入到默认数据库;
  • <:输入重定向符号,将备份文件内容作为输入流传递给mysql命令。

实例操作

假设存在备份文件backup.sql,需导入到名为testdb的数据库:

# 交互输入密码方式(推荐)
mysql -u root -p testdb < backup.sql
# 非交互输入密码(需注意权限)
mysql -u root -p123456 testdb < backup.sql

特殊场景处理

  • 导入时跳过错误:若备份文件中存在少量语法错误(如版本兼容性问题),可添加--force参数强制继续导入,但可能导致数据不完整,需谨慎使用:
    mysql -u root -p --force testdb < backup.sql
  • 指定字符集:若备份文件与目标数据库字符集不一致,需通过--default-character-set指定,避免乱码:
    mysql -u root -p --default-character-set=utf8mb4 testdb < backup.sql
  • 导入压缩文件:若备份文件为.gz格式,需先通过zcat解压后导入:
    zcat backup.sql.gz | mysql -u root -p testdb

PostgreSQL数据库导入命令

PostgreSQL主要使用psql命令行工具和pg_dump结合导入,支持SQL脚本、自定义格式(.dump)等备份文件的导入。

基础语法

psql -U [用户名] -d [数据库名] -f [备份文件路径]
  • -U:指定PostgreSQL用户名,默认为系统用户;
  • -d:目标数据库名称;
  • -f:指定备份文件路径;
  • 若未指定-d,则需在备份文件中包含连接数据库的语句(如\c 数据库名)。

实例操作

假设备份文件为postgres_backup.sql,导入到testdb数据库:

linux 数据库导入命令-图2
(图片来源网络,侵删)
# 交互输入密码(PostgreSQL默认需密码认证)
psql -U postgres -d testdb -f postgres_backup.sql
# 若通过pg_dump导出的自定义格式文件(.dump)
psql -U postgres -d testdb -f backup.dump

特殊场景处理

  • 导入前创建数据库:若目标数据库不存在,需先通过createdb创建:
    createdb -U postgres testdb
    psql -U postgres -d testdb -f backup.sql
  • 指定主机和端口:若PostgreSQL服务不在本地或端口非默认(5432),需添加-h(主机)和-p(端口)参数:
    psql -U postgres -h 192.168.1.100 -p 5432 -d testdb -f backup.sql
  • 导入时显示进度:添加-v ON_ERROR_STOP=1参数,遇到错误时停止并输出错误信息,便于排查:
    psql -U postgres -d testdb -v ON_ERROR_STOP=1 -f backup.sql

MongoDB数据库导入命令

MongoDB作为NoSQL数据库,使用mongorestore工具导入二进制或JSON格式的备份文件,通常与mongodump配合使用。

基础语法

mongorestore --host [主机地址] --port [端口] -u [用户名] -p [密码] --db [数据库名] --collection [集合名] [备份文件路径]
  • --host:MongoDB服务地址,默认为localhost
  • --port:端口,默认为27017
  • -u/-p:认证用户名和密码(若启用认证);
  • --db:目标数据库名称,若备份文件为单库备份,可省略;
  • --collection:指定集合名称(单表导入),若导入整个数据库则省略;
  • [备份文件路径]:备份文件所在目录(mongodump默认导出为目录/数据库名/结构)。

实例操作

假设备份文件为mongobackup目录(由mongodump生成),导入到testdb数据库:

# 导入整个数据库
mongorestore --host localhost --port 27017 -u admin -p admin123 --db testdb mongobackup/
# 导入单个集合(如users集合)
mongorestore --host localhost --port 27017 -u admin -p admin123 --db testdb --collection users mongobackup/testdb/users.bson

特殊场景处理

  • 导入时忽略索引:若需快速导入数据,可添加--noIndexRestore跳过索引重建,导入后再手动创建索引:
    mongorestore --noIndexRestore --db testdb mongobackup/
  • 导入JSON文件:若备份文件为JSON格式(如mongoexport导出),可通过--file参数指定:
    mongorestore --db testdb --collection users --file users.json
  • 覆盖已存在数据:添加--drop参数,导入前删除目标集合中的已有数据:
    mongorestore --drop --db testdb mongobackup/

数据库导入通用注意事项

  1. 环境一致性:导入前需确保目标数据库版本与备份文件来源版本兼容,避免因版本差异导致语法或数据结构错误。
  2. 权限检查:确保执行导入的用户对目标数据库有足够权限(如MySQL的SELECTINSERTCREATE等权限)。
  3. 磁盘空间:导入前检查目标服务器磁盘空间是否充足,避免因空间不足导致导入失败。
  4. 备份验证:导入完成后,建议通过查询表记录数、关键数据条目等方式验证数据完整性。
  5. 日志监控:对于大型数据库导入,建议开启数据库慢查询日志或操作日志,便于监控导入进度和排查问题。

相关问答FAQs

Q1:MySQL导入时出现“Access denied for user”错误,如何解决?
A:该错误通常是由于用户权限不足导致,可通过以下步骤解决:
(1)登录MySQL控制台,使用GRANT命令为用户授予目标数据库的权限,

GRANT ALL PRIVILEGES ON testdb.* TO 'root'@'localhost';
FLUSH PRIVILEGES;

(2)确认用户名和密码输入正确,避免因大小写或空格导致认证失败;
(3)若用户来自远程主机,需确保localhost替换为实际主机名或IP,且数据库服务监听了远程连接(如bind-address=0.0.0.0)。

linux 数据库导入命令-图3
(图片来源网络,侵删)

Q2:PostgreSQL导入大文件时提示“out of memory”,如何处理?
A:PostgreSQL导入大文件时可能因内存不足报错,可通过以下方式优化:
(1)使用pg_dump--format=custom--format=directory导出,减少单文件大小;
(2)通过psql--single-transaction参数将导入操作放在一个事务中,避免部分导入失败导致数据不一致,同时减少内存占用:

psql -U postgres -d testdb --single-transaction -f large_backup.sql

(3)若仍无法解决,可分批次导入,例如通过split命令将大文件拆分为小文件后逐个导入:

split -l 10000 large_backup.sql part_
for file in part_*; do
  psql -U postgres -d testdb -f $file
done
分享:
扫描分享到社交APP
上一篇
下一篇