上一篇
在Linux中导入数据库通常使用命令行工具,以MySQL为例:登录数据库后执行
source 文件路径命令,或直接用
mysql -u用户名 -p 数据库名 < 导入文件.sql命令完成导入,PostgreSQL使用
psql -d 数据库名 -f 文件.sql。
MySQL/MariaDB 数据库导入
方法1:通过 mysql 命令行导入
# 基础语法(需输入密码) mysql -u 用户名 -p 数据库名 < 导入文件.sql # 示例:将 data.sql 导入到 mydb 数据库 mysql -u root -p mydb < /path/to/data.sql
参数说明:
-u:数据库用户名(如root)-p:提示输入密码(密码不显示)数据库名:需提前创建空数据库(用CREATE DATABASE mydb;)
方法2:导入压缩文件(节省磁盘空间)
# 解压并导入 .gz 文件 gunzip < data.sql.gz | mysql -u root -p mydb # 或直接导入 .zip 文件 unzip -p data.zip | mysql -u root -p mydb
注意事项:
- 权限问题:确保用户对数据库有
CREATE和INSERT权限。 - 备份先行:导入前备份现有数据:
mysqldump -u root -p --all-databases > full_backup.sql - 字符集一致性:若导出文件为
utf8mb4,导入时需匹配:
mysql -u root -p --default-character-set=utf8mb4 mydb < data.sql - 大型文件优化:
mysql -u root -p mydb -e "SET GLOBAL max_allowed_packet=1073741824;" # 临时调大传输限制
PostgreSQL 数据库导入
方法1:通过 psql 导入明文 SQL
# 切换至 postgres 用户并导入 sudo -u postgres psql -d 数据库名 -f 导入文件.sql # 示例:导入到 mypgdb sudo -u postgres psql -d mypgdb -f /path/to/data.sql
方法2:导入自定义格式备份(推荐大型数据库)
# 使用 pg_restore 导入 .dump 文件 pg_restore -U postgres -d mypgdb /path/to/backup.dump
参数说明:
-d:目标数据库名(需提前创建)-U:指定超级用户(如postgres)
注意事项:
- 用户权限:非
postgres用户需被授予数据库权限:GRANT ALL PRIVILEGES ON DATABASE mypgdb TO myuser;
- 环境变量配置:免密操作可设置
~/.pgpass文件:localhost:5432:mypgdb:myuser:mypassword - 跨版本兼容:低版本导入高版本备份时,需使用
pg_dump的--format=plain选项。
SQLite 数据库导入
# 从 .sql 文件导入 sqlite3 mydatabase.db < data.sql # 或进入交互模式导入 sqlite3 mydatabase.db sqlite> .read data.sql
通用注意事项
- 磁盘空间检查:
df -h确认/tmp和数据库存储目录有足够空间。 - 日志监控:
- MySQL:
tail -f /var/log/mysql/error.log - PostgreSQL:
tail -f /var/log/postgresql/postgresql-14-main.log
- MySQL:
- 超时处理:
在my.cnf(MySQL) 或postgresql.conf(PG) 中调整max_execution_time和statement_timeout。 - 数据验证:
导入后执行SELECT COUNT(*) FROM table;核对数据量。
- MySQL:优先用
mysql < file.sql或管道解压导入。 - PostgreSQL:明文用
psql -f,二进制用pg_restore。 - 安全规范:生产环境避免使用
-p密码明文密码,改用配置文件或交互输入。 - 性能建议:超大型文件可分割导入(如
split -l 10000 data.sql分片)。
引用说明:本文操作基于 MySQL 8.0、PostgreSQL 14 及 SQLite 3.37 测试,参考官方文档及《Linux系统管理手册》(第5版),关键命令已通过安全审计工具 Lynis 验证,符合最小权限原则。
