MySQL迁移数据实践(亲测)

最近打算把阿里RDS上的MySQL数据库的数据迁移到自己的ECS上的数据库。


操作如下:

蜻蜓点水

1、在RDS上备份数据,下载备份数据。例如:数据库名叫 test

2、在ECS上的数据库中建立数据库,名称也叫 test。这里在我自己的服务器上的数据库数据下,就有了 test 这个文件夹。

3、把RDS上备份的数据中的test目录下的文件,得到到我ECS服务器上数据库的test 文件夹下。

4、在MySQL命令提示符下,使用show databases 命令,发现已经有了 test 这个数据库。

5、使用use test 命令,使用这个数据库。

6、使用 show tables , 看到了之前在RDS上test库中的表。但使用select 查询某个表的时候,却提示此表不存在,数据库报“Error " ERROR 1146 (42S02): Table 'database.tablename' doesn't exist" after restoration”。

7、原因是,ECS数据库中有个dbdata1的文件,和RDS中是不同的。把RDS中的dbdata1文件复制到ECS服务器数据库目录下的dbdata1文件,这时再查表,就能查到了。

8、到这一步,看似问题解决了,但不是。我的ECS数据库中,跑着多个数据库。新迁移过来的库是能用的,但我查原来服务器上其他数据库,却报表不存在,数据库报“Error " ERROR 1146 (42S02): Table 'database.tablename' doesn't exist" after restoration”。

9、看来不能这做。

10、换条路径,采用数据导出和导入的方式。

柳暗花明

11、将RDS中,数据导出,生成test.sql文件。整个test数据库中的数据都导出。

12、把ECS数据库中的 test 库删除。drop database test。

13、重新创建数据库test。 create database test charset utf8。

14、把之前导出好的数据库文件test.sql 放到C盘的databasebak 目录下。

15、使用数据库导入命令  source c:\databasebak\test.sql。 数据导入成功。

16、这时,再查看test数据库里的数据,一切正常,数据迁移成功。