首先,由于数据库特殊,怕导不成功,所以先测试导入部分数据库到华为云先
一,数据库部分:
1,首先,确认源数据库的版本以及字符集,购买相应华为云数据库
1)可以通过以下查询语句获取版本号:
select @@VERSION
2)可以通过以下查询语句获取字符集
select SERVERPROPERTY(N'collation')
2,设置源数据库备份模式
- 仅进行全量备份迁移时,对数据库的恢复模式没有要求。
- 进行全量+增量备份迁移时,数据库备份文件的恢复模式需要设置为“完整”。具体操作方法如下:(本次使用全量+增量模式)
通过Microsoft SQL Server Management Studio 数据库管理软件登录到本地数据库中心,选择需要迁移的数据库,单击鼠标右键,选择“属性”,选择“选项 > 恢复模式”,将恢复模式设置为“完整”即可。
3,开始备份源数据
4,在华为云数据复制服务(DRS)还原数据库
1)打开DRS控制管理后台,选择【备份迁移管理】,点击右上角【创建迁移任务】
2)选择【备份来源文件】 -》【自建obs桶】=》勾选需要还原的备份,点击【下一步】
3)这边如果选择【最后一次备份】的话,数据库会直接开放使用,如果选择否则处于不可用状态,可以继续增量备份,点击下一步就行
问题集锦:
1,这里遇到一个问题,在obs创建桶以后,上传文件,直接上传的话,最大只能5G,如果需要上传超过5G的文件需要下载华为云obs browser+就可以了
2,导入其他库得时候有一个任务失败了,但是数据库表创建成功,数据也有,查询了一下数据量也没错,但是任务失败了,错误提示如下。在咨询了华为客服以及多方技术人员之后,得到答复。所以之后尝试一下关掉db_owner再备份数据库。这里只是先记录一下,同时附上一个好用的查询语句,查所有的表和表数据条数。
使用以下sql可以快速输出所有表以及表数据条数
SELECT s.name,a.name, b.rows
FROM sys.tables AS a
INNER JOIN sysindexes AS b ON a.object_id = b.id
LEFT JOIN sys.schemas as s on a.schema_id = s.schema_id
WHERE (a.type = 'u') AND (b.indid IN (0, 1))
ORDER BY b.rows DESC
到这里数据库迁移部分应该是可以了。
3,还原备份的时候会自动创建用户,但是不会创建登录名。为了方便创建和用户名一样的登录名。
华为云有一篇文章:https://support.huaweicloud.com/bestpractice-drs/drs_04_0008.html
可以先在源数据库执行如下代码,获取所有的登录名和用户,并且生成相关的语句,复制这些语句去华为云数据库执行一下,就会一键创建登录名关联用户。ps 如果有冲突的话,建议删除特定用户再重新手动创建就可以了,某些登录角色需要增加db_owner,需要手动处理一下,不然代码跑不通
SELECT 'IF (SUSER_ID('+QUOTENAME(SP.name,'''')+') IS NULL) BEGIN CREATE LOGIN ' +QUOTENAME(SP.name)+
CASE
WHEN SP.type_desc = 'SQL_LOGIN' THEN ' WITH PASSWORD = ' +CONVERT(NVARCHAR(MAX),SL.password_hash,1)+ ' HASHED,SID=' +CONVERT(NVARCHAR(MAX),SP.SID,1)+',CHECK_EXPIRATION = '
+ CASE WHEN SL.is_expiration_checked = 1 THEN 'ON' ELSE 'OFF' END +', CHECK_POLICY = ' +CASE WHEN SL.is_policy_checked = 1 THEN 'ON,' ELSE 'OFF,' END
ELSE ' FROM WINDOWS WITH'
END
+' DEFAULT_DATABASE=[' +SP.default_database_name+ '], DEFAULT_LANGUAGE=[' +SP.default_language_name+ '] END;' as CreateLogin
FROM sys.server_principals AS SP LEFT JOIN sys.sql_logins AS SL
ON SP.principal_id = SL.principal_id
WHERE SP.type ='S'
AND SP.name NOT LIKE '##%##'
AND SP.name NOT LIKE 'NT AUTHORITY%'
AND SP.name NOT LIKE 'NT SERVICE%'
AND SP.name NOT IN ('rdsadmin','rdsbackup','rdsuser','rdsmirror','public')
二,站点迁移部分
因为我们有二十几个站点要迁移,一个个新建站点太慢了,于是使用了iis的【共享配置】服务,点击选择【导出配置】,输入【密码】等确认导出就行。
在目标服务器的iis上选择启用共享配置,然后把文件导入,密码输入一下就行了,这样所有的站点就会自动创建好,相关的应用池也会创建好,重定向文件也会配置好,剩下的只需要把站点文件放入对应的目录就行了。
每个站点要创建不同的权限,在输入名称中写入【iis apppool\应用程序池站点名称】,创建用户,并且给【读取的权限】。
这里遇到的问题合集:
1)新服务器上没有安装iis 所以要先安装iis 以及相关的程序,尤其是【重写工具】,初次安装好了以后站点运行不起来,后来检查是发现web服务器里的功能少装了【http重定向】等,最后使用命令重启iis
站点配置完了,权限配置完了以后,要把web.config等配置文件中的数据库地址换成新的数据库内网ip,这边遇到一个特殊的项目,使用Orchard一个开源的内容框架搭建的帮助中心,它的数据库文件在如下图所示目录。
所有准备工作处理完了以后,在新服务器上做127.0.0.1的host ,把19个域名都解析到本地,在本地打开看看是否都能打开正常,然后就准备更改域名解析,把原来的ip地址换成新的服务器地址。
这里遇到一个问题,在新服务器上本地打开网站都能正常打开,但是公网无法访问,且一直都是504超时。由于首页界面能打开就没有检查端口问题。后来经过重重检查才发现是华为云安全组80端口没开。(首页界面能打开是因为有cdn缓存)
因为这个问题,这边学习了一下排查问题的步骤,以后再遇到此类问题就按照这些步骤排查一下。
1)服务器本机host解析到本地后,如果网站能在服务器本机上打开成功,暂时说明网站部署上没有什么问题,应该是别的配置没有做好
2)在自己电脑上做host解析,将网站解析到本地。查看是否能打开。(这时我是打不开的,所以问题出现在这里)。执行telnet xxx 80发现连接失败。检查服务器防火墙是否开了80端口,默认是开启的,不大放心的话,就增加一条入站规则。再次链接发现还是不行,查看云服务器防火墙。发现云服务器防火墙的80端口没有开,于是增加准入规则后再执行命令行就能链接成功了
3)这些都没问题,再去检查域名解析是否配置有问题
添加80端口开放
添加80端口开放成功
成功链接
这边学习了一下网站设置里的流程,浏览器访问请求cdn,再到云服务器防火墙,再到目标服务器防火墙,再到目标服务器站点。
再做个小笔记,这边学习了一下CDN配置。
ppps:这边还有一个问题就是站点历史附件太碎太小太多了,500G,哪怕带宽买再好都跑不满贷款,所以这边用了三种方式同步传输,1,在目标服务器上使用ftp向源服务器拉取数据,2,在源服务器上使用ftp向目标服务器推数据,3,将部分文件打包压缩通过华为用obs上传,再下载。
最后的最后,这回由于这个网站用户很少,所以很自信的是一次性全站迁移,如果用户量大,不建议如此粗鲁的迁移,还是要一个站点一个站点的校验迁移。