mysql的4字节字符支持_解决Nextcloud提示“所使用的数据库为MySQL但没有对4字节字符的支持……”的问题-开启MySQL 4字节支持...

在Nextcloud 15或更高版本中,系统支持文件名或评论中使用4字节字符(比如emoji表情),但由于大多数用户是由Nextcloud旧版本升迁到新版本,数据库并没有更新相关设置。会导致【安全及设置警告】中提示”所使用的数据库为MySQL但没有对4字节字符的支持。为正确处理文件名或评论中使用的4字节字符(比如emoji表情),建议开启MySQL的4字节字符支持。“。

f8f205be0b35658a9a51fd9bd26f471d.png

可通过开启MySQL的4字节字符解决问题,具体步骤如下:

在开启MySQL的4字节符前,先把当前Nextcloud数据库备份一下,以备不时之需。

执行如下命令,其中密码是数据库root用户的密码,数据库是Nextcloud的数据库,数据将备份到/var/tmp下,备份文件格式为gzip,备份存放目录及备份文件名称可自行设定。mysqldump -uroot -p密码 数据库 | gzip > /var/tmp/data`date +%Y-%m-%d_%H%M%S`.sql.gz

查看/var/tmp,备份文件已生成。

302b142cc5307a7ab45c3886973b10e8.png

1. 确认MySQL或MariaDB版本(下面以MariaDB为例)

ssh连接服务器,用数据库root用户进入MariaDB查询版本号mysql =u root -p

此时会看到MariaDB版本号

b70237d7f5ceed0122a040979f3ce142.png

或者进入MariaDB后,输入status,可查看更详细的信息。

79e4e455ec8831f1d52b192fefc159f6.png

2. 修改MySQL或MariaDB数据库InnoDB设置

a. MySQL 8.0或更高版本:

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

innodb_file_per_table = 1

b. 低于MySQL 8.0版本:

修改MySQL配置文件,在 [mysqld]下添加如下配置项。[mysqld]

innodb_large_prefix = true

innodb_file_format = barracuda

innodb_file_per_table = 1

c. MariaDB 10.3或更高版本:

修改/etc/mysql/mariadb.conf.d/50-server.cnf配置文件, 在 [mysqld]下添加如下配置项。[mysqld]

innodb_file_per_table = 1

d. MariaDB 10.2或更早版:(本事例中,MariaDB版本为10.1.38)

修改/etc/mysql/mariadb.conf.d/50-server.cnf配置文件, 在 [mysqld]下添加如下配置项。[mysqld]

innodb_large_prefix = true

innodb_file_format = barracuda

innodb_file_per_table = 1

21d4e3f978711b7f081e2629e11391d8.png重启数据库服务。service mysqld restart

3. 开启MySQL 4字节支持

a. 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等待完成。

9a1ab3f4baa0b53378a6a48d10aa8361.png

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

b. MariaDB数据库root用户登入MySQLmysql -u root -p查看Nextcloud数据库文件格式是否已更改为Barracuda,命令中“数据库名称”更换为你的Nextcloud数据库名称,记得保留后面的“%”符号。SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "数据库名称%";

d394aa94774d4a066635baae43812b32.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命令,将其拷出,粘贴到记事本。bd1f91938b06eb018837b77a945ab5ad.png

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

de4a6c01e40536372251488c4a643ead.png

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

0d10fe41361f447a203c8750ab30cbbf.png

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

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

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

1d437ce52d93de6420f0283c17878538.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等待完成。

9a1ab3f4baa0b53378a6a48d10aa8361.png

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值