(转)解决mysqldump: Got error: 1290以及secure-file-priv option简解

本文介绍了解决MySQL备份过程中出现的1290错误的方法,通过调整secure_file_priv参数来允许mysqldump命令正常执行。并提供了如何在配置文件中设置此参数的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自http://blog.itpub.net/31386161/viewspace-2130313/

今天有个网友问,在用mysqldump备份时候遇到1290的错误
下面是是我模拟他的报错信息
[root@potato Desktop]# mysqldump -uroot -proot -S /tmp/mysql.sock --tab=/data/mysql/mytest_3306/data/backup lala
Warning: Using a password on the command line interface can be insecure.
mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement when executing 'SELECT INTO OUTFILE'

可以很清楚地从提示看到是因为mysql服务启用了–secure-file-priv,所以才无法执行。
那么–secure-file-priv又是什么东东,应该如何解决才能是它可以备份呢?
--secure-file-priv=name :
Limit LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE() to files within specified directory

可以看到secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。

当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出

当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下

当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

查看数据库当前该参数的值
root@localhost:mysql.sock 00:14:52 [(none)]>show global variables like '%secure%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_auth | ON |
| secure_file_priv | NULL |
+------------------+-------+
2 rows in set (0.00 sec)

清楚地看到secure_file_priv 的值是NULL,说明此时限制导入导出的
所以应该改变该参数
可是查看了mysql.cnf中居然没有对这个参数进行设定,就说明这个参数默认便是null
所以再mysql.cnf中的[mysqld]加入secure_file_priv =
再重启mysql服务
然后再查一下此时参数的值

root@localhost:mysql.sock 00:28:30 [(none)]>show global variables like '%secure%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_auth | ON |
| secure_file_priv | |
+------------------+-------+
2 rows in set (0.00 sec)

已经是我们要的结果
开始进行导出
[root@potato Desktop]# mysqldump -uroot -proot -S /tmp/mysql.sock --tab=/data/mysql/mytest_3306/data/backup lala
Warning: Using a password on the command line interface can be insecure.

可以看到成功了


ps:

偷懒用了phpstudy 一键安装,一开始去C:/里面找的mysql里面的my.ini就是错误的。这个路径C:\phpStudy\MySQL才是对的。

打开后发现没有secure_file_priv这个选项,直接添加一个空的即可。

<think>嗯,用户遇到了在Linux系统中使用MySQL时出现的错误1290,具体是关于--secure-file-priv选项的问题。我需要先理解这个错误的根本原因。 首先,记得MySQL--secure-file-priv选项是用来限制LOAD DATA INFILE和SELECT ... INTO OUTFILE这些语句的文件读写路径的。如果用户尝试导出或导入文件到一个未被允许的目录,就会触发这个错误。那用户可能是在执行类似SELECT INTO OUTFILE或者LOAD DATA INFILE的命令时遇到了问题。 接下来,我需要考虑如何查看当前MySQLsecure_file_priv设置。通常可以通过登录MySQL后执行SHOW VARIABLES LIKE 'secure_file_priv';来获取这个值。如果这个值被设置为某个特定目录,用户必须在该目录下操作。如果值为NULL,说明禁止所有文件操作,这时候可能需要修改配置文件。 用户可能需要修改MySQL的配置文件,比如my.cnf或my.ini,在[mysqld]部分添加或修改secure-file-priv的路径。修改后需要重启MySQL服务,比如用systemctl restart mysql。之后再次检查该变量是否生效。 另外,如果用户无法修改全局配置,临时解决方案可以是使用已经允许的目录,比如默认的/var/lib/mysql-files/。或者,如果有权限的话,将文件移动到该目录下进行操作。 还要考虑到权限问题,确保MySQL用户有对目标目录的读写权限。可能需要使用chown或chmod调整权限。 安全方面,修改secure-file-priv可能会降低系统安全性,所以需要提醒用户谨慎处理,尤其是在生产环境中。建议仅在必要时调整,并确保目录权限正确。 用户可能还关心如何彻底解决这个问题,或者是否有其他替代方法。比如是否可以使用其他数据导入导出方式,如mysqldump工具,来避免文件权限问题。这可能是一个补充建议,帮助用户找到替代方案。 最后,生成相关问题时要覆盖常见的情况,比如检查设置、修改配置、替代方法以及安全性考虑,这样用户能全面了解问题及其解决方案。</think>### Linux MySQL错误1290解决方案 当使用$SELECT...INTO\ OUTFILE$或$LOAD\ DATA\ INFILE$语句时,MySQL的$secure_file_priv$系统变量会限制文件读写路径。出现错误代码1290时,可通过以下步骤排查: #### 一、检查当前配置 ```sql SHOW VARIABLES LIKE 'secure_file_priv'; ``` 该命令将显示允许文件操作的目录路径,可能返回三种结果: 1. `/var/lib/mysql-files/`(默认值)[^1] 2. `NULL`(完全禁用文件操作) 3. 自定义路径(如`/tmp/`) #### 二、临时解决方案 1. **使用允许的目录**(以默认路径为例): ```sql SELECT * INTO OUTFILE '/var/lib/mysql-files/output.csv' FROM table; ``` 2. **移动现有文件**: ```bash sudo mv /home/user/data.csv /var/lib/mysql-files/ ``` #### 三、永久解决方案 1. 编辑MySQL配置文件: ```bash sudo vim /etc/mysql/my.cnf ``` 2. 在`[mysqld]`段添加: ``` secure_file_priv = /your/custom/path/ ``` 3. 重启服务: ```bash sudo systemctl restart mysql ``` #### 四、权限验证 确保MySQL用户具有目标目录的读写权限: ```bash sudo chown -R mysql:mysql /your/custom/path sudo chmod 755 /your/custom/path ``` > **安全提示**:放宽$secure_file_priv$限制会增加安全风险,建议生产环境保持默认配置[^2]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值