开启维护模式
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 没有正确配置
查看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
修改php.ini
安装php73报错
完全卸载php
查看当前php已安装的包
rpm -qa|grep php70w-pecl-apcu-devel
基本只需要卸载几个名为common的包即可,其他同版本依赖会被全部删除,删除php71w-common,71w版本的依赖包全部会被删除。
例如
yum remove php71w-common
yum remove php74w-common
安装redis扩展
yum install php-redis
继续报错
尝试升级报错
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
安装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
有时,升级后文件不显示。重新扫描文件可以帮助:
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
您的网页服务器未正确设置以解析“/.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;
您的安装没有设置默认电话区域。这是在没有国家代码的情况下验证配置文件设置中的电话号码所必需的。要允许没有国家/地区代码的号码,请在您的配置文件中添加带有相应 ISO 3166-1 代码 ↗ 的地区的“default_phone_region”。
cd /data/nextcloud/config
vim config.php
'default_phone_region' => 'CN',
管理用户报错
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 或更早版本[]
- 确保在 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
等待完成。
————————————————
完成后,再次刷新管理后台的【概览】页,相关警告提示消失。
由上图看出文件格式为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命令,将其拷出,粘贴到记事本。
在复制时,会把命令前后的竖杠符号“|”也一并复制了,在记事本中用替换工具将其替换掉。
点击【全部替换】,所有竖杠将消失。
在记事本中全选并复制所有命令,并粘贴到ssh中,此时,数据库将逐一执行转换工作,如下图所示,静待完成。
再次查看Nextcloud数据库文件格式是否已更改为Barracuda,命令中“数据库名称”更换为你的Nextcloud数据库名称,记得保留后面的“%”符号。SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "数据库名称%";
此时,所有数据库文件格式已成功转换为Barracuda。
在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等待完成。
完成后,再次刷新管理后台的【概览】页,相关警告提示消失。
————————————————
重新启动 MariaDB 服务器。
查看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
修改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,
在我删除它之后,一切顺利。