Php 在laravel上将数百万行数据从一个数据库复制到另一个数据库
使用Laravel Eloquent,我从旧Mysql数据库的一个表中复制了700万行数据,并将这些行放在新Mysql数据库的不同表中。问题是执行此操作几乎花了一天的时间,我需要对将近80M行重新执行此操作。我一次使用1000个数据块。有什么办法吗 更有效率?? 这是我的代码:Php 在laravel上将数百万行数据从一个数据库复制到另一个数据库,php,mysql,laravel-5,laravel-eloquent,Php,Mysql,Laravel 5,Laravel Eloquent,使用Laravel Eloquent,我从旧Mysql数据库的一个表中复制了700万行数据,并将这些行放在新Mysql数据库的不同表中。问题是执行此操作几乎花了一天的时间,我需要对将近80M行重新执行此操作。我一次使用1000个数据块。有什么办法吗 更有效率?? 这是我的代码: DB::connection('oldDataBase')->table('tableToCopy')->chunk(1000, function ($AllData){ foreach
DB::connection('oldDataBase')->table('tableToCopy')->chunk(1000, function ($AllData){
foreach ($AllData as $Data){
DB::connection('newDataBase')->table('table1')->insert(
[
column1 => $Data->columnToCopy,
etc..
]);
DB::connection('newDataBase')->table('table2')->insert(
[
column1 => $Data->columnToCopy,
etc..
]);
DB::connection('newDataBase')->table('table3')->insert(
[
column1 => $Data->columnToCopy,
etc..
]);
}
});
从像laravel这样的SQL客户机进行数据迁移不是一个好主意 如果我必须移动8000万行,我将采取以下步骤:
mysql
或命令行客户机程序中运行mysqldump
,然后通过mysql
客户端程序加载生成的文件
避免为此使用gui风格的mysql客户端程序。坚持使用命令行程序。尽管这些GUI客户端很好,但它们不适合在数十兆字节的.SQL文件中进行流式处理。如果这只是一个一次性副本,那么最好将其作为sqldump进行处理,然后针对新的数据库运行输出脚本。不要通过laravel进行处理。Laravel执行查询,然后转换为对象集合,这些开销肯定会增加。做
mysqldump | mysql-e
或mysqldbcopy
或更简单的像其他表一样创建表
和插入到表中从其他表中选择
谢谢你们的回复,我会按照你们的建议做。谢谢你们的帮助。我会尽量做到这一点。处理和导入CSV文件只是一场噩梦