广州传10T数据到非洲澳大利亚服务器器,有什么快速迁移的解决方案?

今天小编给大家分享几种比较实用的电脑数据迁移的方案,希望对大家能有所帮助!一、将旧电脑硬盘拆下安装到新电脑上这是最简单粗暴的办法,虽粗暴,可直接有效啊!特别适合要转移数据量特大的,因为我们都知道硬盘的数据量一般都比较大。因此数据传输速度会很慢,为了提高文件的传输速度,一般建议将老电脑的硬盘拆下来直接安装到新电脑上。二、数据上传网盘这个方法应该是很多人都喜欢用的,因为现在基本是人手都有一个网盘,而且网盘的空间够大。先在旧电脑登录网盘,把数据上传至网盘,然后在新电脑再登录,下载需要的数据就好了,暂时用不到的数据可以暂存网盘,方便又安全呀!三、使用U盘或移动硬盘来传送这个方法和第一个方法一样适用于数据容量很大的情况,而且又想传送文件快速一些的,最好选择使用U盘或移动硬盘来传送。四、通过网络共享文件传送就是让两台电脑同在一个局域网,在新电脑上搜索到旧电脑,把旧电脑里的数据共享,然后在新电脑那里就可以拷贝过来了。五、使用PE工具盘引导电脑进入PE系统由于新电脑没有系统,无法启动,需要事先使用老毛桃U盘启动盘制作工具和空白u盘制作一个winpe系统盘,引导新电脑进入PE系统。除了上面的五种方法外,如果你需要转移的数据较小的话,也可以使用像邮箱、QQ传送、蓝牙传送等方法。IT技术分享社区个人博客网站:https://programmerblog.xyz文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识发布于 2021-12-21 08:41
网站搬家对经营网站的站长来说,网站搬家是一件头疼的事,尤其存在大量碎文件的网站来说,简直是噩梦,我之前也是被网站搬家折腾得不行,搬家的时候还损坏过一次数据。然后没有数据备份,损失可想而知。传统网站搬家方案网站搬家三个步骤原始服务器压缩打包传输压缩包到新服务器新服务器解压压缩包但是这种数据传输方式,会面临很多问题。整个搬家过程原始服务器资源会消耗殆尽,影响网站访问搬家过程中网站不能有更新,否则新服务器内容就有部分丢失时间过长,压缩打包传输解压包,看似没啥大问题,但是数据一大消耗的时间呈指数上升Rsync方式传输这种方式看起来比打包传输的方式好,Rsync 对大量碎片文件推荐不高,还有就是如果服务器是window的服务器,我不知道百度云的文件同步功能是否给力。流式非落地打包压缩传输多次迁移服务器之后,我在思考是否可以利用linux 管道符命令 将数据打包、压缩、 传输、解压数据流、最后落盘。最后尝试有下面的命令tar -c /www/wwwroot//test.com/
gzip
ssh -c arcfour128 192.168.10.11 "gzip -d|tar -xC /操作步骤传输依赖老服务器免密登录新服务器在老服务器上执行这个命令 ssh-keygen
之后一路回车下去 就okroot@logstash01 ~]# ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:b0:f5:8a:f6:c3:f5:85:cf:9c:f7:55:28:15:ba:4c:60root@logstash01The key's randomart image is:+--[ RSA 2048]----+
E
.
. . . .
. .
o .
+ . o o .
. S . +.. .
. .. ... .
o... . = ..
. .o
. = o
..
.o|+-----------------+[root@logstash01 ~]#执行执行免密操作在老服务器执行如下命令 192.168.10.11是新站的IP
然后输入yes和输入密码ssh-copy-id 192.168.10.11执行下面命令 将/home/wwwroot/下的www.test.com 这个目录和目录下所有内容 同步到目标服务器 的/home/wwwroot/下nohup `tar -c /home/wwwroot/test.com/
gzip
ssh -c aes128-ctr 192.168.10.11 "gzip -d|tar -xC /" ` &优化防止中断上面的命令发现 断开ssh连接之后 文件传输会断,对以上命令进行修改 创建一个文件rsynct.sh在/www/wwwroot 目录#!/bin/bashtar -c test.com
gzip
ssh -c aes128-ctr 192.168.10.11 "gzip -d|tar -xC /www/wwroot"然后只需要cd 到/www/wwwroot 执行即可
这样执行就可以安稳地断开xshell了cd /www/wwwrootnohup sh rsynct.sh &目标端检查同步进程是否完成ps -ef
grep gzip然后在老服务器检查 那个任务跑完了 需要安装iotopyum install iotop -yitop # 如果没完成会看到 tar -c www.test.com 读取硬盘的进程还在机器性能检查我先建议检查下新老机器的磁盘性能,根据多个场景测试,发现大部分瓶颈都在磁盘的文件读取速度上面,有的机器能跑满带宽,有些机器因为磁盘性能问题 最多也就跑几M的速度。
有些机器IO高的 网站同步速度 100G 数据 仅仅需要半个小时。yum install hdparm -y #安装hparm 软件hdparm -t /dev/sdb
#测试数据盘读取能力分享一些网站和服务器运维的相关经验
问题分析数据库情况如下:数据库采用Sqlserver 2008 R2,单表数据量21亿。无水平或者垂直切分,但是采用了分区表。分区表策略是按时间降序分的区,将近30个分区。正因为分区表的原因,系统才保证了在性能不是太差的情况下坚持至今。此表除聚集索引之外,无其他索引,无主键(主键其实是利用索引来快速查重的)。所以在频繁插入新数据的情况下,索引调整所耗费的性能比较低。
至于聚集索引和非聚集索引等知识,请各位移步google或者百度。
至于业务,不是太复杂。经过相关人员咨询,大约40%的请求为单条Insert,大约60%的请求为按class_id 和in_time(倒序)分页获取数据。Select请求全部命中聚集索引,所以性能非常高。这也是聚集索引之所以这样设计的目的。解决问题由于单表数据量已经超过21亿,并且2017年以前的数据几乎不影响业务,所以决定把2017年以前(不包括2017年)的数据迁移到新表,仅供以后特殊业务查询使用。经过查询大约有9亿数据量。数据迁移工作包括三个个步骤:从源数据表查询出要迁移的数据把数据插入新表把旧表的数据删除传统做法这里申明一点,就算是传统的做法也需要分页获取源数据,因为你的内存一次性装载不下9亿条数据。从源数据表分页获取数据,具体分页条数,太少则查询原表太频繁,太多则查询太慢。SQL语句类似于 SELECT * FROM (
SELECT *,ROW_NUMBER() OVER(ORDER BY class_id,in_time) p FROM
tablexx WHERE in_time <'2017.1.1'
) t WHERE t.p BETWEEN 1 AND 100 把查询出来的数据插入目标数据表,这里强调一点,一定不要用单条插入策略,必须用批量插入。把数据删除,其实这里删除还是有一个小难点,表没有标示列。这里不展开,因为这不是菜菜要说的重点。如果你的数据量不大,以上方法完全没有问题,但是在9亿这个数字前面,以上方法显得心有余而力不足。一个字:慢,太慢,非常慢。可以大体算一下,假如每秒可以迁移1000条数据,大约需要的时间为(单位:分)
900000000/1000/60=15000(分钟)
大约需要10天^ V ^改进做法以上的传统做法弊端在哪里呢?在9亿数据前查询必须命中索引,就算是非聚集索引菜菜也不推荐,首推聚集索引。如果你了解索引的原理,你应该明白,不停的插入新数据的时候,索引在不停的更新,调整,以保持树的平衡等特性。尤其是聚集索引影响甚大,因为还需要移动实际的数据。提取以上两点共同的要素,那就是聚集索引。相应的解决方案也就应运而生:按照聚集索分页引查询数据批量插入数据迎合聚集索引,即:按照聚集索引的顺序批量插入。按照聚集索引顺序批量删除由于做了表分区,如果有一种方式把2017年以前的分区直接在磁盘物理层面从当前表剥离,然后挂载到另外一个表,可算是神级操作。有谁能指导一下菜菜,感激不尽扩展阅读 一个表的聚集索引的顺序就是实际数据文件的顺序,映射到磁盘上,本质上位于同一个磁道上,所以操作的时候磁盘的磁头不必跳跃着去操作。 存储在硬盘中的每个文件都可分为两部分:文件头和存储数据的数据区。文件头用来记录文件名、文件属性、占用簇号等信息,文件头保存在一个簇并映射在FAT表(文件分配表)中。而真实的数据则是保存在数据区当中的。平常所做的删除,其实是修改文件头的前2个代码,这种修改映射在FAT表中,就为文件作了删除标记,并将文件所占簇号在FAT表中的登记项清零,表示释放空间,这也就是平常删除文件后,硬盘空间增大的原因。而真正的文件内容仍保存在数据区中,并未得以删除。要等到以后的数据写入,把此数据区覆盖掉,这样才算是彻底把原来的数据删除。如果不被后来保存的数据覆盖,它就不会从磁盘上抹掉。NetCore 代码(实际运行代码)第一步:由于聚集索引需要class_id ,所以宁可花2-4秒时间把要操作的class_id查询出来(ORM为dapper),并且升序排列
DateTime dtMax = DateTime.Parse("2017.1.1");
var allClassId = DBProxy.GeSourcetLstClassId(dtMax)?.OrderBy(s=>s);
按照第一步class_id 列表顺序查询数据,每个class_id 分页获取,然后插入目标表,全部完成然后删除源表相应class_id的数据。(全部命中聚集索引)
int pageIndex = 1; //页码
int pageCount = 20000;//每页的数据条数
DataTable tempData =null;
int successCount = 0;
foreach (var classId in allClassId)
{
tempData = null;
pageIndex = 1;
while (true)
{
int startIndex = (pageIndex - 1) * pageCount+1;
int endIndex = pageIndex * pageCount;
tempData = DBProxy.GetSourceDataByClassIdTable(dtMax, classId, startIndex, endIndex);
if (tempData == null
tempData.Rows.Count==0)
{
//最后一页无数据了,删除源数据源数据然后跳出
DBProxy.DeleteSourceClassData(dtMax, classId);
break;
}
else
{
DBProxy.AddTargetData(tempData);
}
pageIndex++;
}
successCount++;
Console.WriteLine($"班级:{classId} 完成,已经完成:{successCount}个");
} DBProxy 完整代码: class DBProxy
{
//获取要迁移的数据所有班级id
public static IEnumerable<int> GeSourcetLstClassId(DateTime dtMax)
{
var connection = Config.GetConnection(Config.SourceDBStr);
string Sql = @"SELECT class_id FROM
tablexx WHERE in_time <@dtMax GROUP BY class_id ";
using (connection)
{
return connection.Query<int>(Sql, new { dtMax = dtMax }, commandType: System.Data.CommandType.Text);
}
}
public static DataTable GetSourceDataByClassIdTable(DateTime dtMax, int classId, int startIndex, int endIndex)
{
var connection = Config.GetConnection(Config.SourceDBStr);
string Sql = @" SELECT * FROM (
SELECT *,ROW_NUMBER() OVER(ORDER BY in_time desc) p FROM
tablexx WHERE in_time <@dtMax
AND class_id=@classId
) t WHERE t.p BETWEEN @startIndex AND @endIndex ";
using (connection)
{
DataTable table = new DataTable("MyTable");
var reader = connection.ExecuteReader(Sql, new { dtMax = dtMax, classId = classId, startIndex = startIndex, endIndex = endIndex }, commandType: System.Data.CommandType.Text);
table.Load(reader);
reader.Dispose();
return table;
}
}
public static int DeleteSourceClassData(DateTime dtMax, int classId)
{
var connection = Config.GetConnection(Config.SourceDBStr);
string Sql = @" delete from
tablexx WHERE in_time <@dtMax
AND class_id=@classId ";
using (connection)
{
return connection.Execute(Sql, new { dtMax = dtMax, classId = classId }, commandType: System.Data.CommandType.Text);
}
}
//SqlBulkCopy 批量添加数据
public static int AddTargetData(DataTable data)
{
var connection = Config.GetConnection(Config.TargetDBStr);
using (var sbc = new SqlBulkCopy(connection))
{
sbc.DestinationTableName = "tablexx_2017";
sbc.ColumnMappings.Add("class_id", "class_id");
sbc.ColumnMappings.Add("in_time", "in_time");
.
.
.
using (connection)
{
connection.Open();
sbc.WriteToServer(data);
}
}
return 1;
}
} 运行报告 程序本机运行,开***连接远程DB服务器,运行1分钟,迁移的数据数据量为 1915560,每秒约3万条数据
1915560 / 60=31926 条/秒
cpu情况(不高):
磁盘队列情况(不高):
在以下情况下速度还将提高
源数据库和目标数据库硬盘为ssd,并且分别为不同的服务器迁移程序和数据库在同一个局域网,保障数据传输时候带宽不会成为瓶颈合理的设置SqlBulkCopy参数菜菜的场景大多数场景下每次批量插入的数据量达不到设置的值,因为有的class_id 对应的数据量就几十条,甚至几条而已,打开关闭数据库连接也是需要耗时的单纯的批量添加或者批量删除操作

我要回帖

更多关于 非洲服务器 的文章

 

随机推荐