所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
Linux 管理 虚拟服务器

MySQL 数据库的导入和导出:完整指南

高效的数据库管理是任何可靠Web应用程序的基础。无论您是执行常规备份、在服务器之间迁移数据,还是设置新环境,了解如何导入和导出MySQL数据库是每个开发人员和系统管理员必不可少的技能。

本综合指南将引导您了解管理MySQL数据库所需的每种方法、命令和故障排除步骤——从命令行到phpMyAdmin。

为什么MySQL导入和导出操作很重要

MySQL数据库导出和导入有多个关键目的:

  • 备份和灾难恢复 — 保护您的数据免受意外删除或服务器故障
  • 服务器迁移 — 在托管环境之间移动数据库而不会丢失数据
  • 开发和暂存 — 克隆生产数据库用于测试目的
  • 版本控制 — 在主要应用程序更新前快照您的数据库状态

为了使这些操作顺利运行,您的托管基础设施很重要。具有NVMe存储、完整根访问权限和高I/O吞吐量的VPS托管环境确保即使大型数据库转储也能快速可靠地完成。

1. 先决条件:开始前您需要什么

在深入导出或导入之前,请确认您已准备好以下内容:

  • MySQL服务器访问权限具有足够的用户权限(SELECTLOCK TABLESSHOW VIEWTRIGGER用于导出;CREATEINSERTALTER用于导入)
  • MySQL客户端已安装在您的本地计算机或服务器上
  • 终端或SSH客户端用于命令行操作
  • phpMyAdmin(可选)如果您更喜欢图形界面
  • 足够的磁盘空间用于.sql转储文件,特别是对于大型数据库

> 专业提示:如果您在多个项目中管理多个数据库,请考虑使用带cPanel的VPS以获得简化的、基于GUI的数据库管理体验。

2. 导出MySQL数据库

导出MySQL数据库会生成一个.sql文件,其中包含完整的数据库架构(结构)和数据。此文件稍后可用于恢复或迁移您的数据库。

方法1:使用MySQL命令行(mysqldump)

mysqldump实用程序是导出MySQL数据库最可靠和广泛使用的工具。它直接从终端工作,并支持多种选项。

步骤1:打开您的终端

通过SSH连接到您的服务器或打开本地终端会话。

步骤2:运行mysqldump命令

mysqldump -u username -p database_name > export_file.sql

替换占位符如下:

占位符描述
username您的MySQL用户名(例如,root或专用数据库用户)
database_name您要导出的数据库的名称
export_file.sql输出文件的所需名称和路径

步骤3:输入您的MySQL密码

系统将提示您输入密码。身份验证后导出将立即进行。

示例:

mysqldump -u root -p my_wordpress_db > /home/backups/wordpress_backup_2024.sql

有用的mysqldump标志:

# Export all databases
mysqldump -u root -p --all-databases > all_databases.sql

# Export only the database structure (no data)
mysqldump -u root -p --no-data database_name > structure_only.sql

# Compress the output on the fly
mysqldump -u root -p database_name | gzip > export_file.sql.gz

# Export specific tables only
mysqldump -u root -p database_name table1 table2 > partial_export.sql

方法2:通过phpMyAdmin导出

phpMyAdmin为数据库导出提供了用户友好的图形界面,对于那些不想使用命令行的人来说是理想的。

步骤1:登录phpMyAdmin

打开您的浏览器并导航到您的phpMyAdmin安装(例如,https://yourdomain.com/phpmyadmin)。

步骤2:选择您的数据库

在左侧边栏中,单击您要导出的数据库。

步骤3:导航到导出选项卡

单击顶部导航菜单中的导出选项卡。

步骤4:选择您的导出方法

  • 快速 — 使用默认设置导出整个数据库。适合大多数用例。
  • 自定义 — 允许您选择特定表、输出格式、压缩和其他选项。

步骤5:选择SQL格式

确保格式设置为SQL(默认值)。您也可以根据需要选择CSV、XML或其他格式。

步骤6:单击执行

phpMyAdmin将生成.sql文件并将其下载到您的本地计算机。

3. 导入MySQL数据库

导入.sql文件会将之前导出的数据库恢复到MySQL服务器。这是迁移、恢复和部署的标准方法。

方法1:使用MySQL命令行

步骤1:确保目标数据库存在

导入前,目标数据库必须已存在。如果不存在,请创建它:

mysql -u root -p -e "CREATE DATABASE new_database_name;"

步骤2:运行导入命令

mysql -u username -p database_name < import_file.sql

替换占位符:

占位符描述
username您的MySQL用户名
database_name要导入到的目标数据库
import_file.sql您的.sql文件的路径

示例:

mysql -u root -p my_wordpress_db < /home/backups/wordpress_backup_2024.sql

导入压缩文件:

gunzip < export_file.sql.gz | mysql -u root -p database_name

步骤3:验证导入

命令完成后,登录MySQL并验证数据:

mysql -u root -p
USE database_name;
SHOW TABLES;

方法2:通过phpMyAdmin导入

步骤1:登录phpMyAdmin

在您的浏览器中打开phpMyAdmin。

步骤2:选择或创建目标数据库

  • 如果数据库已存在,请在左侧边栏中单击它。
  • 如果不存在,请单击顶部菜单中的数据库,输入新数据库名称,然后单击创建

步骤3:导航到导入选项卡

单击顶部导航菜单中的导入选项卡。

步骤4:选择您的文件

单击选择文件并从您的本地计算机中选择.sql文件。

步骤5:配置导入设置

  • 字符集:确保它与您的数据库编码匹配(通常是utf8mb4
  • 部分导入:用于恢复中断的导入
  • 格式:应自动设置为SQL

步骤6:单击执行

phpMyAdmin将开始导入过程。在关闭选项卡之前,请等待绿色成功确认消息。

> 注意:phpMyAdmin有默认文件上传大小限制(通常为2MB–128MB)。对于较大的数据库,请使用命令行方法或按照下面故障排除部分中的说明调整PHP设置。

4. 高级导出和导入技术

使用Cron作业自动化MySQL备份

对于生产环境,手动导出是不够的。使用cron作业自动化您的数据库备份:

# Open the crontab editor
crontab -e

# Add this line to run a daily backup at 2:00 AM
0 2 * * * mysqldump -u root -pYourPassword database_name | gzip > /backups/db_$(date +%F).sql.gz

这确保您始终拥有最近的备份,无需手动干预。

在服务器之间迁移数据库

要直接从一个服务器迁移数据库到另一个服务器而不创建中间文件:

mysqldump -u root -p database_name | ssh user@remote_server "mysql -u root -p remote_database"

这通过SSH将转储输出直接传输到远程MySQL实例——在高带宽VPS托管环境中高效快速。

处理大型数据库

对于超过几GB的数据库,请考虑这些优化:

# Use single-transaction for InnoDB tables (avoids table locks)
mysqldump --single-transaction -u root -p database_name > export.sql

# Disable foreign key checks during import for speed
mysql -u root -p database_name -e "SET foreign_key_checks = 0;"
mysql -u root -p database_name < import_file.sql
mysql -u root -p database_name -e "SET foreign_key_checks = 1;"

5. 故障排除常见MySQL导入/导出错误

错误1049:未知数据库

ERROR 1049 (42000): Unknown database 'database_name'

原因:目标数据库不存在。

解决方案:导入前创建数据库:

mysql -u root -p -e "CREATE DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

错误2002:无法连接到MySQL服务器

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

原因:MySQL服务未运行或套接字路径不正确。

解决方案:检查并重启MySQL服务:

# Check MySQL status
sudo systemctl status mysql

# Start MySQL if it's stopped
sudo systemctl start mysql

# For MariaDB
sudo systemctl start mariadb

错误1044:访问被拒绝

ERROR 1044 (42000): Access denied for user 'username'@'localhost' to database 'database_name'

原因:MySQL用户缺少足够的权限。

解决方案:授予必要的权限:

mysql -u root -p
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

phpMyAdmin文件大小限制超出

原因:.sql文件超过phpMyAdmin的上传限制。

解决方案:编辑您的PHP配置文件(php.ini):

upload_max_filesize = 256M
post_max_size = 256M
max_execution_time = 600
memory_limit = 512M

保存后,重启您的Web服务器:

sudo systemctl restart apache2
# or
sudo systemctl restart nginx

或者,切换到命令行导入方法,它没有文件大小限制。

导入中途停止(超时)

原因:大型导入超过PHP或MySQL超时限制。

解决方案:对大型文件使用命令行,或增加MySQL的超时:

SET GLOBAL wait_timeout = 28800;
SET GLOBAL interactive_timeout = 28800;

6. MySQL导出和导入的安全最佳实践

保护您的数据库转储与创建它们一样重要。遵循这些最佳实践:

  • 加密敏感转储 — 使用GPG在存储或传输前加密导出的文件:
  gpg --symmetric --cipher-algo AES256 export_file.sql
  • 限制文件权限 — 确保转储文件不是世界可读的:
  chmod 600 export_file.sql
  • 使用专用MySQL用户 — 避免为常规导出使用root。创建具有最小所需权限的备份用户。
  • 在服务器外存储备份 — 将转储上传到远程位置或对象存储以防止服务器级故障。
  • 保护您的连接 — 始终为远程MySQL连接使用SSL/TLS。将其与有效的SSL证书配对以保护传输中的数据。

7. 为MySQL操作选择正确的托管环境

您的MySQL导入和导出操作的性能在很大程度上取决于您的托管基础设施。以下是不同环境的比较:

托管类型最适合MySQL性能
共享Web托管小型网站、低流量受限;共享资源
VPS托管大多数Web应用、开发人员优秀;专用资源
专用服务器高流量、企业数据库最大;完整硬件控制

对于大多数开发人员和成长中的企业,VPS提供了性能、控制和成

管理
管理
Linux 操作系统