我们通常会遇到这样的一个场景,就是需要将一个数据库的数据迁移到一个性能更加强悍的数据库服务器上。这个时候需要我们做的就是快速迁移数据库的数据。
那么,如何才能快速地迁移数据库中的数据呢?今天我们就来聊一聊这个话题。
mysqldump 这是最常见的迁移方式,将数据导出为sql文件,在导入到数据中,在小数据量的数据库和性能较好的服务器中比较实用
#导出
mysqldump -h172.17.16.1 -uroot -p123456aA! s1 s1 --result-file=/opt/s1.sql
#导入
source /opt/s1.sql
迁移较大的数据量,迁移就很慢,甚至导致内存撑爆进而导致迁移失败
我这次就是遇到了这个问题,这次采用了文件迁移的方式
文件迁移
文件迁移顾名思义就是直接迁移数据库的存储文件。这种迁移方式相对于逻辑迁移的方式来说,性能上要高出很多,同时也很少会把内存撑爆;在面对数据量较大的场景下迁移数据,建议使用文件迁移的方式
select * from netty.data order by id into outfile '/var/lib/mysql-files/1.txt';
Query OK, 2564831 rows affected (38.92 sec)
200万条的数据仅仅只需要39s就能导出完成
这种方式主要是将每一条数据都以\n换行的方式直接保存在文件之中,所以要自己先将表的结构创建好。
导入的时候,首先会判断导入的数据表的字段是否与每一行的数据的列数一致,如果一致则一行一行地导入,如果不一致则直接报错。
我们在尝试一下导入的速度
load data infile '/var/lib/mysql-files/1.txt' into table netty.data;
Query OK, 2564831 rows affected (2 min 48.81 sec)
Records: 2564831 Deleted: 0 Skipped: 0 Warnings: 0
速度还是嘎嘎快