|
|
discuz官网放出来的3.4升3.5教程,要反复摸索才能明白。很不方便。特别是对小白。
这里,我说一下升级的具体流程以及因本次gbk等统一升级到utf8可以遇见的大量转码问题的坑 。特别对于老站,很实用。
首先,一定要有一个测试环境 ,用来先测试好升级成功,然后再服务器上面升级。这点很重要。
测试环境 推荐用centos8.5的boot安装盘,不到1g。下载了安装。然后设定一个固定IP地址。之后把该 装的httpd,vsftp什么的都装一下,让他和服务器环境 至。
同时,把mysql设定在7.4版本。
具体怎么降的,网上有。不是本文讨论重点。
这里说的3.4升级3.5,分为三步。
1。升级uc,从1.6升级到1.7
2.升级discuz。
3.清除升级文件。
万事从头起,先来说准备工作。
把dx下载了最新版,然后上传到/d/temp/dx下面,真正需要的文件在/d/temp/dx/upload里面。
另外下载admin升级文件,和uc_admin两个升级文件。也放在/d/temp/下面。这里升级时候会备用。
在这里,我假定www目录为程序所在文件夹目录,bbs为mysql里面数据库文件名。
数据的备份文件在/d/databack里面
好了。先做重置工作。
新建2个备用文件夹,
- <font size="5">mkdir /d/old&mkdir /d/old_1</font>
复制代码
然后初始化测试环境。
- <font size="5">\rm -fr /d/old/*&\rm -fr /d/old_1/*&\rm -fr /d/www/*</font>
复制代码
然后清空并导入备份数据库
- <font size="5">mysql -uroot -p
- drop database bbs;
- create database bbs;
- use bbs;
- source /d/databack/www.sql;
- exit</font>
复制代码
接下来把程序文件也解压出来
- <font size="5">unzip -o /d/databack/www.zip -d /</font>
复制代码 至此,测试环境已经准备完成。
这里需要大量的工作,但是这是该 有的行为,如果在服务器上面直接升级,前面这些都不需要。
好了,下面开始办正事,先升级UC到1.7
- <font size="5">python3 /d/temp/temp.py -d www -n 1</font>
复制代码 到这里,会提示升级准备工作完成,请执行升级文件。
那有人会问了,这个temp.py是从哪里来的?别急,这个python代码我现在贴上来。
- <font size="5">#coding:utf-8
- #by yh6788
- #python3
- #清除firewall-cmd --zone=public --list-rich-rules列表的IP限制
- #
- import optparse
- import sys,os,time
- def start(filedir,dir_dx):
- print('执行开始升级uc程序。')
- os.system('\\rm /d/old/* -r')
- os.system('\\rm /d/old_1/* -r')
- os.system('mkdir /d/old')
- os.popen('\cp /d/%s/uc_server/* /d/old -r'%filedir)
- time.sleep(10)
- os.system('\\rm /d/%s/uc_server/* -r'%filedir)
- os.system('\cp /d/old/data /d/%s/uc_server -r'%filedir)
- os.system('\cp %s/uc_server/* /d/%s/uc_server -r'%(dir_dx,filedir))
- os.system('\cp /d/temp/update_ucenter_adult.php /d/%s/uc_server/install'%filedir)
- os.system('\\rm /d/%s/uc_server/data/upgrade.lock'%filedir)
- os.system('chmod 777 /d/%s -R'%filedir)
- print('UC升级程序准备完事,请执行%s.com/uc_server/install/update_ucenter_adult.php'%filedir)
- def dx(dir_file,dir_dx):
- print('执行dx3.5升级程序')
- os.system('mkdir /d/old_1')
- os.popen('\cp /d/%s/* /d/old_1 -r'%dir_file)
- time.sleep(10)
- os.system('\\rm /d/%s/* -r'%dir_file)
- os.popen('\cp /d/old_1/data /d/%s/ -r'%dir_file)
- os.popen('\cp /d/old_1/config /d/%s/ -r'%dir_file)
- os.popen('\cp /d/old_1/uc_server /d/%s/ -r'%dir_file)
- os.system('mkdir /d/%s/source'%dir_file)
- os.system('mkdir /d/%s/template'%dir_file)
- os.system('mkdir /d/%s/source/plugin'%dir_file)
- os.popen('\cp /d/old_1/source/plugin/* /d/%s/source/plugin -r'%dir_file)
- os.popen('\cp /d/old_1/template/* /d/%s/template -r'%dir_file)
- time.sleep(10)
- os.system('\\rm /d/%s/source/plugin/default -r'%dir_file)
- os.system('\\rm /d/%s/template/default -r'%dir_file)
- os.popen('\cp %s/* /d/%s/ -r'%(dir_dx,dir_file))
- time.sleep(10)
- os.system('\cp /d/temp/update_adult.php /d/%s/install'%dir_file)
- os.system('\\rm /d/%s/data/update.lock'%dir_file)
- os.system('chmod 777 /d/%s -R'%dir_file)
- print('3.5升级程序完成,准备执行%s.com/install/update_adult.php'%dir_file)
-
- def kill(dir_file,dir_dx):
- os.system('\\rm /d/%s/install/update_adult.php'%dir_file)
- os.system('\\rm /d/%s/uc_server/install/update_ucenter_adult.php'%dir_file)
- os.popen('\cp /d/old_1/static/image/common/logo.png /d/%s/static/image/common/'%dir_file)
- print('升级文件删除成功')
- def main():
- a=time.asctime( time.localtime(time.time()) )
- parser = optparse.OptionParser()
- parser.add_option('-d', dest='filedir', type='string', help="文件夹")
- parser.add_option('-n', dest='nb', type='string', help="1,开始,升级uc。2,继续,升级dx。3。升级完成,清理。")
- (options, args) = parser.parse_args()
- if not (options.filedir) or not (options.nb):
- print('缺少参数,返回.\n-d:指定文件夹\n-n:1,开始,升级uc。2,继续,升级dx。3。升级完成,清理。')
- return False
- filedir=options.filedir
- nb=options.nb
- dir_dx='/d/temp/dx/upload'
- if nb=='1':
- start(filedir,dir_dx)
- elif nb=='2':
- dx(filedir,dir_dx)
- elif nb=='3':
- kill(filedir,dir_dx)
-
- else:
- pass
- print(a)
- if __name__ == '__main__':
- main()</font>
复制代码
这个程序本来是123步全集成的,但是问题是小网站还行,文件只有几十M,但是大网站,随便几个G的话,那么cp的时候就会时间过长。这样就会产生一个问题,
就是说os.system()程序执行了,但是不是马上出结果,因为程序复制的慢。但是os的并不是执行一个程序等待完成了再执行下一个指令,而新建一个子进程,发出执行命令,但是不管是不是返回结果,都会执行下一条,这样当cp没完成的,就会产生后面的程序执行出错。
如果放个time.sleep(10)这种的话,倒是可以,但是你并不能判断多久时间,所以只能留足够的时候,这样又没意思。
那么有没有人不想用程序,非要自己手动着来的呢?
也行,这里把指令也列出来。
你看我做了多少准备工作,这里我都有。
- \cp /d/www/uc_server/* /d/old -r
- \rm /d/www/uc_server/* -r
- \cp /d/old/data /d/www/uc_server -r
- \cp /d/temp/dx_back/_server/* /d/www/uc_server -r
- \cp /d/temp/update_ucenter_adult.php /d/www/uc_server/install
- \rm /d/www/uc_server/data/upgrade.lock
- chmod 777 /d -R
复制代码 行了,到这里就执行升级程序,假定固定IP:192.168.0.222,http://192.168.0.222//install/update_adult.php
看见全绿,就可以了。
原来是1.6版本,要升级到1.7版本。好了,这里可以升级了。
我有点事,下午再把后面接上来,特别是第2步,有好多坑。
|
|