参考网页:
本网站依赖于另外一个网站,导致很多地方束手束脚。为尽可能保持独立,采用转换数据库的方式,共享数据,尽可能保持本网站的独立。
另外一个网站,下面称为原网站。原网站是采用 ASP.NET 开发,数据库使用的是 MSSQL,运行在 Windows Server 2008 R2。本网站采用的 PHP 的 Yii2 框架,数据库为 MySQL,运行在 Centos 6.x。而且数据库结构迥异,设计风格也不一致。为了对原网站升级,而不影响已经习惯于原网站的人。决定同时运行两个网站,定时把原网站的数据更新到本网站。
基本思路:
这里有网络室,而且都是 XP 电脑,配置内存只有 2G,且无法更改系统。为了模拟这两个网站,决定选择网络室的两台电脑,安装虚拟机,分别安装不同的操作系统 win7 和 centos,通过共享文件夹,实现转换数据库。解决电脑性能不足的问题。
centos 操作系统,安装在虚拟机中,是无法直接成功安装 VirtualBox 的插件的。看提示需要联网,安装一些文件。但是网络室不能直接连接互联网。于是配置好 centos 操作系统,然后导出 .ovf 1.0 版本的虚拟机文件,复制到网络室电脑上。
考虑到方便阅读和测试,采用 PHP 而非 C# 。采用 PHP 7.0,提高运行效率。决定定时更新的数据直接保存为 数组(array) 序列化文本形式,并设定一些信息协调读和写,而不是直接把 MSSQL 数据转换为 MySQL 数据。中间加入了数据处理部分。
尽可能的保持原网站不受影响。则本网站做了大量修改。但是测试需要在不联互联网的电脑上进行,中间需要 git 来回记录改动源码。正在努力更新中。
只带有一张光盘,内有:
- PHP 执行文件夹一个;
- backup_mssql.php 文件,以及 readme.md 文件,用于执行数据备份功能;
- run_everyday.bat,用于每天执行的命令;
- run_everyhour.bat, 用于每小时执行的命令;
- VirtualBox-5.0.26-108824-Win.exe;
- Oracle_VM_VirtualBox_Extension_Pack-5.0.26-108824.vbox-extpack;
- VBoxGuestAdditions.iso(非必需);
- centos6.8.ova;
其他工作:
- 在 D 盘新建一个文件夹, phpwebsite;
- 把光盘所有的内容复制到该文件夹;
- 新建文件夹 backup_data,用于存放定时命令产生的文件;
- 安装 VirtualBox-5.0.26-108824-Win.exe
- 安装 Oracle_VM_VirtualBox_Extension_Pack-5.0.26-108824.vbox-extpack;
- 打开 VirtualBox,导入 centos6.8.ova 文件;
- 查看已有网站的数据库用户密码,修改 backup_mssql.php 中用户密码;
- 在 cmd 运行 run_everyday.bat 一次,使网站可以运行;
- 配置 Windows Server 2008 R2 每天在 02:00 执行 run_everyday.bat 命令;
- 配置 Windows Server 2008 R2 在白天 05:00-23:00 每小时整点执行 run_everyhour.bat 命令;
- 配置 centos 的 NAT 转发,需要申请 端口号(port) (最好可以申请到 3 个端口,一个用于前台,一个后台,一个 ssh 远程登录);
- VirtualBox 中,centos6.8 电脑开机;
- 确保虚拟机操作系统内部记录的 mac 地址跟虚拟机设置的 mac 地址一致,否则容易引起无法打开网络;
- 执行读取备份数据库的命令
<后续添加>
; - 导入组织用户,其中系统自带了一个超级管理员用户;
- 为干部科和军务科设定相应权限;
- 在其他电脑打开本网站后台网页,点击定时命令,确保定时命令执行,能够访问网页;
由于本人电脑限制,只能制作 32bit 的虚拟机。该文件是整个工作的核心,下面详述制作过程。
要求:
- 需密码登录,特定机器登录,不许 root 登录;
- pub
结果:
- 首次可以在任意连接到该计算机的电脑上登录
- 登录用户名:phpwebsite 密码:(%$#&2016Yii2
- 登录后立刻修改只可以从特定 IP 的地址登录该计算机
由于已经设定备份程序的时间,则服务器读取备份文件的时间可以设置如下:
- 03:00 读取每天备份的文件;
- 05:05-23:05 的每小时 xx:05 读取每小时备份的文件,考虑到 5 分钟之内,足够备份成功。
内有重大错误。对于 dateAfterDateAfterDays 获得日期甲过了乙天后的日期,当乙为负数或者零的时候,会出现死循环,导致系统崩溃。应该加一条判断语句,纠正该错误。
- 修改人员信息;(完成)
- 提供提示消息,有多少人要申报晋职晋衔;
- 其他待测试信息。
- 人员在位状态信息需要大批量修改,测试难度相当大。
在后台新建一个用户,直接复制自 common/models/user.php 接下来则把 backend/所有 common/models/User 修改为 backend/models/User; 这个亟需解决。 参考网页:
You have to set different cookies for frontend and backend in config/main.php file. For Eg.:
In backend:
'components' => [
'session' => [
'name' => 'BACKENDID', //Set name
'savePath' => __DIR__ . '/../tmp', //create tmp folder and set path
],
],
In Frontend:
'components' => [
'session' => [
'name' => 'FRONTENDID',
'savePath' => __DIR__ . '/../tmp',
],
],
That's it.
实际做法如下
分别打开 ./frontend/config/main.php, ./backend/config/main.php
在前端 ./frontend/config/main.php 输入
'components' => [
'session' => [
'name' => 'FRONTENDID',
],
],
在后端 ./backend/config/main.php 输入
'components' => [
'session' => [
'name' => 'BACKENDID', //Set name
],
],
方便测试后,查找工作异常。
虚拟机内部是指 centos 6.8 操作系统内的网卡物理地址,也即
vim /etc/sysconfig/network-scripts/ifcfg-eth0
弹出类似这样的物理地址:HWADDR=00:11:22:33:44:55
。
虚拟机外部地址,或者说虚拟机本身地址,通过右击选择 设置
-> 网络
-> 网卡1
-> 高级
-> MAC地址
看到的地址 001122334455
。
这两者除却 ‘:’
应当一样。
前期方案,内容很杂,如果非虚拟机安装,会非常痛苦,需要安装各种驱动和软件,还要测试能否运行。不是很好用。现在发现可以直接在 centos 连接 ms sql server。考虑把定时备份代码的内容全部拿到虚拟中来,则可大幅度简化代码。但是由于原始代码已经完成,现在改版,相当于增大了工作量。 还有 32 位系统的各种问题,无法解决。但是电脑只能导出 32 位系统,无法安装64位虚拟机。还无法解决该问题。现在先凑合使用。 已经解决的问题
- 安装成功 ms sql ODBC
- 测试 bash 可以链接网站数据库,并输出结果,但编码混乱 未解决问题
- PHP 链接失败
- 编码问题没有解决
- 由原来代码更改而来,工作量很大
- 各种版本混乱问题,怎么解决?
这个貌似只可以手工更新了。