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數據庫里的數據,一切正常,數據遷移成功。