将mysql数据库导入RDS

时间:2018-05-16 11:30:32

标签: mysql amazon-rds

花了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)

我在等你的帮助!

编辑19/05/2018

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,

1 个答案:

答案 0 :(得分:4)

我认为,你在命令中做了一些根本错误的事情,或者你根本无法连接到RDS,这就是你的导入无效的原因。我在这里说明了一些步骤,这些步骤也可以帮助您调试与connection failureno connection at all相关的问题。

  1. 尝试导入我在下面提供的简单文件。它的可选步骤,但我建议你这样做。
  2. 将以下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. 执行以下命令。

      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. 如果上述两个步骤成功执行,那么您与RDS的连接/权限没有问题,您可以继续进行。

      mysql -u <username> -p<password> -h <rds-name.aws-region.rds.amazonaws.com> < filename.sql
      
    3. 上述所有步骤均在我的RDS上完全验证,但步骤3除外,它可以正常运行。因此,如果不适合你,那么下一步是查看你的文件'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