将mysql数据库导入RDS

7

已经过去了12个小时,我尝试将一个SQL文件导入到RDS中,我使用了以下命令:

mysqldump -u <user> -h <rds_server> -p <database> < filename.sql

但是什么都不起作用,结果我遇到了这个错误。
-- MySQL dump 10.13  Distrib 5.7.22, for Linux (i686)
--
-- Host: xxxxxxxxxx.us-east-2.rds.amazonaws.com    Database: xxxxxxxxxx
-- ------------------------------------------------------
-- Server version   5.6.39-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
mysqldump: Couldn't execute 'SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('informagenie')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME': Lost connection to MySQL server during query (2013)

我是一名有用的助手,可以翻译文本。

我在等待你的帮助!

编辑于2018年5月19日

head -n 10 import_file.sql

完成

-- Database Manager 4.2.5 dump

SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

DROP TABLE IF EXISTS `wp_2_wpmm_subscribers`;
CREATE TABLE `wp_2_wpmm_subscribers` (
  `id_subscriber` bigint(20) NOT NULL AUTO_INCREMENT,

好的,我更正了我的命令,但结果还是一样。MySQL源是5.5版本,目标是5.6...你有什么解决方案吗? - Goms
你不可能得到相同的结果。 - Michael - sqlbot
即使我使用AWS DMS? - Goms
@Goms - 文件的前几行是什么?我们需要看到第8、9、10行。请编辑问题以反映新的命令和错误。 - Rick James
你有大量的表/分区吗?客户端和服务器之间有多远(ping时间)? - Rick James
显示剩余7条评论
1个回答

5
我认为,在您的命令中,您正在做一些根本性错误,或者您甚至无法连接到RDS,这就是为什么您的导入不起作用的原因。我在此列出了一些步骤,这些步骤也将帮助您调试与“连接失败”或“根本没有连接”的问题相关的问题。
  1. 尝试导入我提供的一个简单文件。这是可选步骤,但我建议您这样做。

将下面的SQL语句保存到文件中,并将文件名命名为red_boy.sql

Create database test_red;

use test_red;

CREATE TABLE MyGuests (
 id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
 firstname VARCHAR(30) NOT NULL,
 lastname VARCHAR(30) NOT NULL,
email VARCHAR(50)
);

 INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Red', 'Boy', 'red@example.com'),('Red1', 'Boy', 'red1@example.com'),('Red2', 'Boy', 'red3@example.com'),('Red4', 'Boy', 'red4@example.com');
  1. Execute following command.

    mysql -u <username> -p<password> -h <rds-name.aws-region.rds.amazonaws.com> < red_boy.sql
    
    
    /**Replace <username> <password> and <rds-name.aws-region.rds.amazonaws.com> with full RDS URL.
    
  2. If above two steps executed successfully, then there are no issue with your connection/permission with RDS, you are good to proceed further.

    mysql -u <username> -p<password> -h <rds-name.aws-region.rds.amazonaws.com> < filename.sql
    
除了第三步之外,我在我的RDS上验证了所有上述步骤,并且它是有效的。因此,如果对您无效,则下一步是查看您的文件“filename.sql”,以查看其中的错误。我可以尝试重新回答。
编辑于24/05/2018: 根据@Doms的评论,第3步仍然失败,我发现一个或多个表存在问题,或者连接失败,因为数据量可能很大。
将以下内容保存在一个sh文件中并执行它。它将从源数据库逐个导出表,并将其导入目标数据库。
mysql -h source-database -u source_user -pSource_user_Password source_database --skip-column-names --execute='SHOW TABLES;' > tables.tmp
echo "Start!"
 while read p; do
  echo "Exporting" $p
  mysqldump -h source-database -u source_user -pSource_user_Password source_database $p > $p.sql
  echo "Importing" $p
  mysql -h target-database -u Target_db_user -pTarget_db_password target_db_name < $p.sql
  rm $p.sql
 done <tables.tmp

 rm tables.tmp

@Goms,你尝试了我提到的步骤吗?如果你仍然面临挑战,我可以尝试解决它。 - Red Boy
以上两个步骤都已成功执行,执行后我有一个名为test_red的数据库!但是第三个步骤没有成功!有什么要补充的吗? - Goms
@Goms,问题仅出在 filename.sql 文件上。如果您能从源系统重新导出数据库的话,我建议您这样做。 - Red Boy
非常感谢您的帮助。在我的源服务器上,提供商有可能从mysql 5.5迁移到mysql 5.6...这就是我所做的,然后使用mysql -u <user> -h <rds_server> -p <database> < filename.sql导入成功执行!非常感谢您的支持。 - Goms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接