Nextcloud13升级Nextcloud23

开启维护模式

sudo -u nginx php occ maintenance:mode --on 

关闭维护模式

sudo -u nginx php occ maintenance:mode --off

备份数据库

mysqldump  -uroot -p nextcloud_db  > nextcloud_db20220826.sql

解压

unzip nextcloud-23.0.3.zip

备份nextcloud配置文件

重命名 nextcloud 目录为 nextcloud-old
上传新版 nextcloud 23.0.0 所有文件到服务器 nextcloud 目录。

rm nextcloud-17.0.1.zip

mv nextcloud-23.0.0.zip /home/cloud 我自己的目录


mv nextcloud nextcloud-old
chown  -R nginx.nginx nextcloud

配置恢复

cp -a  nextcloud-old/config/*  nextcloud/config/ 

文件恢复

mv nextcloud-old/data nextcloud/ 

权限更新(如果权限是对的不用改)

chown  -R nginx.nginx nextcloud
find nextcloud/ -type d -exec chmod 750 {} \;
find nextcloud/ -type f -exec chmod 640 {} \;

升级php74

安装版本库

 yum install epel-release yum-utils -y

安装源remirepo

   yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

配置 PHP 7.4 repository,

    yum-config-manager --enable remi-php74

注意: 可根据自已的版本选择,比如remi-php73或者remi-php72

安装升级php

 yum update php php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysql -y    

报错
卸载

yum remove php70w-pecl-apcu-devel-5.1.9-1.w7.x86_64

验证版本

 [root@george local]# php -v
 PHP 7.4.10 (cli) (built: Sep  1 2020 13:58:08) ( NTS )
 Copyright (c) The PHP Group
 Zend Engine v3.4.0, Copyright (c) Zend Technologies
     with Zend OPcache v7.4.10, Copyright (c), by Zend Technologies

php提示:PHP 的组件 OPcache 没有正确配置

image.png

查看php安装目录

whereis php
which php
php -v 查看版本号
查看编译参数:
1、nginx编译参数:
your_nginx_dir/sbin/nginx -v
2、apache编译参数:
cat your_apache_dir/build/config.nice
3、php编译参数:
your_php_dir/bin/php -i |grep configure
4、mysql编译参数:
cat your_mysql_dir/bin/mysqlbug |grep configure


Linux下查看nginx、mysql、php的安装路径和编译参数
https://blog.51cto.com/qiangsh/1561810
master process 后面的就是 php的目录

ps -ef | grep php
image.png

修改php.ini

安装php73报错


image.png
image.png

完全卸载php
查看当前php已安装的包

rpm -qa|grep php70w-pecl-apcu-devel

基本只需要卸载几个名为common的包即可,其他同版本依赖会被全部删除,删除php71w-common,71w版本的依赖包全部会被删除。
例如

yum remove php71w-common
yum remove php74w-common
image.png

安装redis扩展

yum install php-redis

继续报错


image.png

尝试升级报错

image.png

PHP 内存限制低于建议值 512MB
The current PHP memory limit is below the recommended value of 512MB.

vim /etc/php.ini
memory_limit = 512M

安装libzip扩展

yum install libzip

查看哪些可以安装的PHP扩展

yum search php74-php
image.png

安装zip扩展

yum -y install php-pecl-zip

平滑升级 MariaDB 5.5

备份数据库,如果升级顺利是不要实施备份还原的

mysqldump -u root -p --all-databases > alldb.sql

如果想保留自己的 my.cof 配置,则备份一下这个文件

cp /etc/my.cnf /etc/my.cnf.bak

停止数据库运行

systemctl stop mariadb

卸载 MariaDB 老版本

yum remove mariadb mariadb-server

添加 MariaDB Yum 库
建议使用 MariaDB 官方推荐的 stable 稳定版,
https://downloads.mariadb.org/mariadb/
http://yum.mariadb.org/

添加 MariaDB 官方源

vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.3 CentOS repository list
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

清除 yum 缓存

yum clean all 
yum makecache

升级已有数据库

安装 MariaDB 新版本

yum install mariadb mariadb-server

启动新版 MariaDB

systemctl start mariadb

升级已有数据库

mysql_upgrade -uroot -p 
[root@sg-gop-10-71-12-89 tmp]# mysql_upgrade -uroot -p
Enter password:
Phase 1/7: Checking and upgrading mysql database
Processing databases
mysql
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.host                                         OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.servers                                      OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Upgrading from a version before MariaDB-10.1
Phase 2/7: Installing used storage engines
Checking for tables with unknown storage engine
Phase 3/7: Fixing views
Phase 4/7: Running 'mysql_fix_privilege_tables'
Phase 5/7: Fixing table and database names
Phase 6/7: Checking and upgrading tables
Processing databases
information_schema
performance_schema
Phase 7/7: Running 'FLUSH PRIVILEGES'
OK

配置服务自启动

systemctl enable mariadb

登录数据库验证

mysql -uroot -p

升级过程遇到错误记得先查看日志分析

MariaDB 官方升级文档
Upgrading from MariaDB 5.5 to MariaDB 10.0
https://mariadb.com/kb/en/library/upgrading-from-mariadb-55-to-mariadb-100/

nextcloud登录页面用户输入密码无法登录(闪退)

原因是web、phpnginx和/var/lib/php/session/不是同一个用户路径:/var/lib/php/session/解决办法换成一样的用户(我的用的nginx用户)chown nginx:nginx /var/lib/php/session/之后就可以登陆了

chown nginx:nginx /var/lib/php/session/

页面升级报错

然后升级报不能越版本升级
Exception: Updates between multiple major versions and downgrades are unsupp

修改版本号

准备强制升级

/data/nextcloud/lib/private/Updater.php vim编辑

注释掉检查项

230 private function doUpgrade(string $currentVersion, string $installedVersion): void {
231 // Stop update if the update is over several major versions
232 $allowedPreviousVersions = $this->getAllowedPreviousVersions();
233 # if (!$this->isUpgradePossible($installedVersion, $currentVersion, $allowedPreviousVersions)) {
234 # throw new \Exception('Updates between multiple major versions and downgrades are unsupported.');
235 # }
236 
237 // Update .htaccess files
image.png

有时,升级后文件不显示。重新扫描文件可以帮助:

sudo -u nginx php console.php files:scan --all

有关更多资源,请参阅nextcloud.com 支持页面。

有时,如果使用基于 Web 的升级过程,Nextcloud 可能会卡在升级中。这通常是由于进程耗时过长并遇到 PHP 超时。以这种方式停止升级过程:

sudo -u nginx php occ maintenance:mode --off

开始手动过程:

sudo -u nginx php occ upgrade

如果这不能正常工作,请尝试修复功能:

sudo -u nginx php occ maintenance:repair

数据库丢失了一些索引。由于给大的数据表添加索引会耗费一些时间,因此程序没有自动对其进行修复。您可以在 Nextcloud 运行时通过命令行手动执行 "occ db:add-missing-indices" 命令修复丢失的索引。索引修复后会大大提高相应表的查询速度。

sudo -u nginx php occ db:add-missing-indices

数据库缺少一些主键。由于在大型数据表上添加主键可能需要一些时间,因此程序没有自动添加。通过运行 "occ db:add-missing-primary-keys",这些缺失的主键可以在实例持续运行时手动添加。

sudo -u nginx php occ db:add-missing-primary-keys

数据库缺少一些可选列。 由于在大表上添加列可能会花费一些时间,因此在可以选择时不会自动添加列。 通过运行 “occ db:add-missing-columns”,可以在实例继续运行时手动添加那些缺少的列。 添加列后,某些功能可能会提高响应速度或可用性。

sudo -u nginx php occ db:add-missing-columns

数据库中的一些列缺少对 BigInt 的转换。由于改变大表的列类型可能需要一些时间,所以它们没有被自动改变。通过运行 "occ db:convert-filecache-bigint",可以手动应用这些未决的变化。这个操作需要在实例离线的情况下进行。更多详情请阅读 有关于此的文档页面 ↗。

sudo -u nginx php occ db:convert-filecache-bigint

数据库丢失了一些索引。由于给大的数据表添加索引会耗费一些时间,因此程序没有自动对其进行修复。您可以在 Nextcloud 运行时通过命令行手动执行 "occ db:add-missing-indices" 命令修复丢失的索引。索引修复后会大大提高相应表的查询速度。

sudo -u nginx php occ db:add-missing-indices

该实例缺失了一些推荐的 PHP 模块。为提高性能和兼容性,我们强烈建议安装它们。
intl
sodium

yum -y install php-intl
yum -y install php-sodium

PHP 模块 "gmp" 和/或 "bcmath" 未被启用。如果你使用 WebAuthn 无密码验证,这些模块是必需的。

yum -y install php-gmp
yum -y install php-bcmath

HTTP 请求头 "X-Frame-Options" 没有配置为 "SAMEORIGIN"。这是一个潜在的安全或隐私风险,我们建议您调整这项设置。

cd /etc/nginx/conf.d
vim nextcloud.conf

全部请求头设置

add_header Strict-Transport-Security 'max-age=15552000';
add_header X-Content-Type-Options 'nosniff';
add_header X-Robots-Tag 'none';
add_header X-Frame-Options 'SAMEORIGIN';
add_header X-Download-Options 'noopen';
add_header X-Permitted-Cross-Domain-Policies 'none';
add_header X-XSS-Protection '1;mode=block';
add_header Referrer-Policy "no-referrer";

修改配置后重新加载生效

 systemctl reload nginx
image.png

您的网页服务器未正确设置以解析“/.well-known/webfinger”。
您的网页服务器未正确设置以解析“/.well-known/nodeinfo”。

处理办法
注释掉nextcloud.conf配置中的error_page 403、error_page 404

#error_page 403 /core/templates/403.php;
#error_page 404 /core/templates/404.php;
image.png

您的安装没有设置默认电话区域。这是在没有国家代码的情况下验证配置文件设置中的电话号码所必需的。要允许没有国家/地区代码的号码,请在您的配置文件中添加带有相应 ISO 3166-1 代码 ↗ 的地区的“default_phone_region”。

cd /data/nextcloud/config
vim config.php
'default_phone_region' => 'CN',
image.png

管理用户报错


image.png

an error occured during the request. unable to proceed. nextcloud报错

错误处理方式待验证

MySQL 被用作数据库,但不支持 4 字节字符。要能够在文件名或评论中正确处理 4 字节字符 (如 emoji),建议在 MySQL 中启用 4 字节支持。

官方文档:https://docs.nextcloud.com/server/14/admin_manual/configuration_database/mysql_4byte_support.html

MariaDB 10.3 或更高版本

[mysqld]
innodb_file_per_table=1

MariaDB 10.2 或更早版本[]

  1. 确保在 MySQL 服务器上设置了以下 InnoDB 设置:
[mysqld]
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1

MySQL:数据库root用户登入MySQL。
mysql -u root -p
更改数据库字符集和排序规则。
ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
退出MySQL数据库。exit
在Nextcloud的config.php中把mysql.utf8mb4设为true,进入Nextcloud网站目录,运行如下命令。
sudo -u www-data php occ config:system:set mysql.utf8mb4 --type boolean --value="true"
通过运行修复步骤将Nextcloud所有表转换为新的排序规则。
sudo -u www-data php occ maintenance:repair
等待完成。
————————————————


image.png

完成后,再次刷新管理后台的【概览】页,相关警告提示消失。

由上图看出文件格式为Antelope,因些我们必须对数据库文件格式进行转换。创建批量转换SQL命令并执行转换

进入INFORMATION_SCHEMA数据库USE INFORMATION_SCHEMA;

生成Nextcloud数据库的批量转换SQL命令,命令中“数据库名称”更改为你的Nextcloud数据库名称。SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA,".", TABLE_NAME, " ROW_FORMAT=DYNAMIC;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "数据库名称";

生成以下批量转换SQL命令,将其拷出,粘贴到记事本。


image.png

在复制时,会把命令前后的竖杠符号“|”也一并复制了,在记事本中用替换工具将其替换掉。


image.png

点击【全部替换】,所有竖杠将消失。


image.png

在记事本中全选并复制所有命令,并粘贴到ssh中,此时,数据库将逐一执行转换工作,如下图所示,静待完成。


image.png

再次查看Nextcloud数据库文件格式是否已更改为Barracuda,命令中“数据库名称”更换为你的Nextcloud数据库名称,记得保留后面的“%”符号。SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "数据库名称%";

此时,所有数据库文件格式已成功转换为Barracuda。


image.png

在Nextcloud的config.php中把mysql.utf8mb4设为true,进入Nextcloud网站目录,运行如下命令。sudo -u www-data php occ config:system:set mysql.utf8mb4 --type boolean --value="true"通过运行修复步骤将Nextcloud所有表转换为新的排序规则 。sudo -u www-data php occ maintenance:repair等待完成。


image.png

完成后,再次刷新管理后台的【概览】页,相关警告提示消失。
————————————————

重新启动 MariaDB 服务器。

MySQLmysql -u root -p
查看Nextcloud数据库文件格式是否已更改为Barracuda,命令中“数据库名称”更换为你的Nextcloud数据库名称,记得保留后面的“%”符号。

SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "数据库名称%";
————————————————

MariaDB> SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "nextcloud_db%";

<由上图看出文件格式为Antelope,因些我们必须对数据库文件格式进行转换。创建批量转换SQL命令并执行转换
进入
INFORMATION_SCHEMA数据库
USE INFORMATION_SCHEMA;
生成Nextcloud数据库的批量转换SQL命令,命令中“数据库名称”更改为你的Nextcloud数据库名称。
SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA,".", TABLE_NAME, " ROW_FORMAT=DYNAMIC;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "数据库名称";
————————————————

MariaDB> USE INFORMATION_SCHEMA;
MariaDB> SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` ROW_FORMAT=DYNAMIC;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "nextcloud_db";

这将为 nextcloud 数据库中的每个表返回一个 SQL 命令。这些行可以快速复制到文本编辑器中,替换“|”并将 SQL 命令复制回 MariaDB shell。如果没有出现错误(有疑问,请检查第 2 步),一切都已完成,此处无需执行任何操作。从第 3 步开始,它可以使用 MySQL 指令进行。

但是,有些表可能无法更改。操作失败并显示:“ERROR 1478 (HY000): Table storage engine 'InnoDB' does not support the create option 'ROW_FORMAT'”。在这种情况下,失败的表在步骤 2 中的 SPACE 值为 0。这基本上意味着该表没有自己的索引文件,这是梭子鱼格式所必需的。这可以通过稍微不同的 SQL 命令来解决:

MariaDB> ALTER TABLE `nextcloud`.`oc_tablename` ROW_FORMAT=DYNAMIC, ALGORITHM=COPY;

mysql -u root -p
查看版本号
status


image.png

修改MySQL配置文件(一般存放于/etc/mysql目录下),在 [mysqld]下添加如下配置项。[mysqld]

innodb_file_per_table = 1

更改数据库字符集和排序规则
ALTER DATABASE nextcloud_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
这里的nextcloud修改为自己nextcloud的数据库名

在Nextcloud的config.php中把mysql.utf8mb4设为true,进入Nextcloud网站目录,运行如下命令

sudo -u nginx php occ config:system:set mysql.utf8mb4 --type boolean --value="true"

通过运行修复步骤将Nextcloud所有表转换为新的排序规则

sudo -u nginx php occ maintenance:repair

使用教程来修复排序规则https://confluence.atlassian.com/confkb/mysql-collat ion-repair-database-level-changes-670958163.html 523
然后
从config.php中删除了'mysql.utf8mb4' => true,
在我删除它之后,一切顺利。

你可能感兴趣的:(Nextcloud13升级Nextcloud23)