mysql - 如何将 load_file 与 Azure Database for MySQL 结合使用

标签 mysql sql azure-sql-database

我正在尝试将图像数据加载到 Azure 数据库 MySQL 上的行列中。这是我试图通过 MySQL Workbench 运行的 SQL 语句...

insert into pm1.c1 (id,source,image) values ('1','a',load_file('/usr/csuser/clouddrive/a.jpg'));

它产生了良好的结果,但图像列为空。挑战是从服务器实例授予对文件的访问权限。我发现一篇博客文章似乎让我走上了正轨......

https://techcommunity.microsoft.com/t5/azure-database-for-mysql/backup-azure-database-for-mysql-to-a-blob-storage/ba-p/803830

这涉及运行创建 Blob 存储的云 shell。我将 a.jpg 图像上传到文件共享。当然无法从 MySQL 服务器访问,因此结果为空。

显然我需要某种类型的 UNC 语法来引用 load_file 调用中的文件。无法弄清楚那可能是什么。 Azure 存储连接字符串希望您在服务器上安装卷,但据我所知,无法连接到运行 MySQL 实例的主机。

最佳答案

来自MySQL文档load_file() :

读取文件并以字符串形式返回文件内容。使用此功能:

  1. 该文件必须位于服务器主机上,您必须指定 文件的完整路径名,并且您必须具有 FILE 权限。
  2. 该文件必须能够被服务器读取并且其大小小于 max_allowed_pa​​cket 字节。
  3. 如果 secure_file_priv 系统变量设置为非空 目录名,要加载的文件必须位于该目录中 目录。 (在 MySQL 8.0.17 之前,该文件必须可供所有人读取, 不仅仅是服务器可读。)

如果文件不存在或由于不满足上述条件之一而无法读取,则函数返回 NULL。

其他更多详细信息:

MySQL LOAD_FILE函数是需要满足几个条件才能成功执行的。

  • 您尝试加载的文件必须存在于同一主机中 MySQL 服务器正在运行的地方。例如,如果您的 MySQL 服务器是 安装在 example.com 上,文件必须仅存在于 example.com 上。
  • 必须指定文件的完整路径名。所以,如果你的文件是 位于用户的主目录中,假设用户名是 w3r,您 必须指定“/home/w3r/somefile.txt”
  • 执行该命令的用户必须具有 FILE 权限。您可以 使用以下“GRANT FILE on dbname.*”向用户授予 FILE 权限 发送至用户@localhost”。
  • 相关文件必须可供所有人读取。如果您尝试加载 用户主目录层次结构中不存在的文件, 确保您拥有该文件的读取权限。
  • MySQL 服务器有一个 max_allowed_pa​​cket 变量。有问题的文件必须 不超过该变量中指定的值。您可以检查以下值 max_allowed_pa​​cket 带有“显示变量,例如 '%max_allowed_pa​​cket%';';您必须拥有 MySQL root 权限 执行这个命令。您更改 max_allowed_pa​​cket 的值 你的 MySQL 配置文件。打开你的 my.ini 或 my.cnf 文件,找到 max_allowed_pa​​cket=some_value 行并将值更改为您的 所需的一个,例如,如果您想将 valle 设置为 50MB, 写入 50MB。
  • MySQL 有一个 secure_file_priv 变量。如果该变量的值为 设置为非空目录名,要加载的文件必须是 位于该目录中。您可能会找到 secure_file_priv 变量 及其值,并且可以在您的 MySQL 配置文件中更改它。

引用:MySQL LOAD_FILE() functionHow the LOAD_FILE() Function Works in MySQL

希望这有帮助。

关于mysql - 如何将 load_file 与 Azure Database for MySQL 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59699527/

相关文章:

mysql - 查询缓存不起作用

mysql - 如何在 mysql 中按字段和自动 ID 进行分组

sql - 当 WHERE 子句返回高比例的行时,Azure SQL 查询性能会显着降低

Hibernate + SQL Azure = 找不到数据类型 bool 值

c# - Azure SQL : How to determine if table was altered or created and by whom

mysql - 如果字段之一不存在则返回 null mysql

php - 如何用 PHP 重构这些 MySQL 查询?

MySQL 多表连接 + FK

sql - 使用 SQL 从表中获取数据

不再支持复合键上的 MySQL auto_increment?