Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何将数据从一个表复制到同一数据库中的另一个表?_Mysql - Fatal编程技术网

Mysql 如何将数据从一个表复制到同一数据库中的另一个表?

Mysql 如何将数据从一个表复制到同一数据库中的另一个表?,mysql,Mysql,在MySQL中,如何将数据从一个表复制到同一数据库表中的另一个表 我知道将插入select,但这需要花费很长时间,尤其是在实时数据库上,我们不能冒险 有一些条件: 1.表1是源表,表1_存档是目标表。 2.表1\u归档文件已经有数据,因此我们只能追加 我的尝试: time mysqldump --log-error=$logfile --complete-insert --insert-ignore --no-create-info --skip-triggers --user=$dbuser

在MySQL中,如何将数据从一个表复制到同一数据库表中的另一个表

我知道将
插入select
,但这需要花费很长时间,尤其是在实时数据库上,我们不能冒险

有一些条件:
1.表1是源表,表1_存档是目标表。
2.表1\u归档文件已经有数据,因此我们只能追加

我的尝试:

time mysqldump --log-error=$logfile --complete-insert --insert-ignore 
--no-create-info --skip-triggers --user=$dbuser --host=$host $dbname table1  
--where="created < now()-interval 10 month" > $filename
time mysqldump--log error=$logfile--complete insert--insert ignore
--无创建信息--跳过触发器--用户=$dbuser--主机=$host$dbname table1
--where=“created$filename
但是它的名字是table1,所以我不能将它插入table1\u档案中

任何指导都将不胜感激

提前感谢。

“但要做到这一点需要花费很长时间”

有一个小技巧可以避免这种情况,然后,
插入到
会更快:

Insert into table1 select * from table2
诀窍:

step-1: drop all indices from table2
step-2: execute query
step-3: create indices again
“但要做到这一点需要很长时间”

有一个小技巧可以避免这种情况,然后,
插入到
会更快:

Insert into table1 select * from table2
诀窍:

step-1: drop all indices from table2
step-2: execute query
step-3: create indices again

在输出文件中,您需要将表名
table1
更改为
table1\u存档
。不幸的是,
mysqldump
没有任何方法可以做到这一点。您必须使用
sed
动态执行此操作,这将把输出文件中的所有内容从
table1
重命名为
table1\u归档文件

由于您的列也可以包含类似于
table1
的内容,因此最好将它们括在反勾中进行搜索和替换

您还可以使用
gzip
压缩输出文件

这是对我有效的命令

mysqldump -u USER -h  HOST -p --skip-add-drop-table --no-create-info --skip-triggers --compact DB table1 |\
  sed -e 's/`table1`/`table1_archives`/' | gzip >   filename.sql.gz

在输出文件中,您需要将表名
table1
更改为
table1\u存档
。不幸的是,
mysqldump
没有任何方法可以做到这一点。您必须使用
sed
动态执行此操作,这将把输出文件中的所有内容从
table1
重命名为
table1\u归档文件

由于您的列也可以包含类似于
table1
的内容,因此最好将它们括在反勾中进行搜索和替换

您还可以使用
gzip
压缩输出文件

这是对我有效的命令

mysqldump -u USER -h  HOST -p --skip-add-drop-table --no-create-info --skip-triggers --compact DB table1 |\
  sed -e 's/`table1`/`table1_archives`/' | gzip >   filename.sql.gz

永远有多长?您多久归档一次记录?你平均归档多少条记录?每个周末归档一次。每周总共有10L条记录。如果仔细检查,是否可以尝试工作台迁移,它有一些条件(-where),如果工作正常,我将在一台服务器上检查。然后需要在多个服务器上执行相同的操作。永久的时间是多长?您多久归档一次记录?你平均归档多少条记录?每个周末归档一次。每周总共有10L条记录。如果仔细检查,是否可以尝试工作台迁移,它有一些条件(-where),如果工作正常,我将在一台服务器上检查。然后需要在多个服务器上执行相同的操作。亲爱的downvoter,我敢打赌。我用这个技巧迁移了这么多大型数据库。当我开始的时候,花了整整一天的时间,然后我需要取消。(复制100万条记录)。然后我在上面做了,只花了7秒钟。“从表2中删除所有索引”:您能解释一下:什么是索引?drop=delete table in database,所以您将删除表2中数据库中的所有表索引吗?@Eric correct,我使用在插入之前删除每个索引,然后在插入之后重新创建它们。基本上,如果有任何索引(明显不是PK),那么当数据集很大时,插入速度会变慢,变得超出我们的能力范围。ok,:从myTable中删除所有索引(我不理解术语“索引”),插入十亿行,然后重新创建索引..:-):好的:-)亲爱的选民,我敢打赌。我用这个技巧迁移了这么多大型数据库。当我开始的时候,花了整整一天的时间,然后我需要取消。(复制100万条记录)。然后我在上面做了,只花了7秒钟。“从表2中删除所有索引”:您能解释一下:什么是索引?drop=delete table in database,所以您将删除表2中数据库中的所有表索引吗?@Eric correct,我使用在插入之前删除每个索引,然后在插入之后重新创建它们。基本上,如果有任何索引(明显不是PK),那么当数据集很大时,插入速度会变慢,变得超出我们的能力范围。ok,:从myTable中删除所有索引(我不理解术语“索引”),插入十亿行,然后重新创建索引..:-):好的:-)