mysql无法导出文件问题,mysql数据库导入sql文件不成功解决办法!

本文目录一览:

项目上 MySQL 还原 SQL 备份经常会碰到一个错误如下,且通常出现在导入视图、函数、存储过程、事件等对象时,其根本原因就是因为导入时所用账号并不具有SUPER 权限,所以无法创建其他账号的所属对象。ERROR 1227 (42000) : Access denied; you need (at least one of) the SUPER privilege(s) for this operation常见场景:1. 还原 RDS 时经常出现,因为 RDS 不提供 SUPER 权限;2. 由开发库还原到项目现场,账号权限等有所不同。

处理方式:

1. 在原库中批量修改对象所有者为导入账号或修改 SQL SECURITY 为 Invoker;2. 使用 mysqldump 导出备份,然后将 SQL 文件中的对象所有者替换为导入账号。

二、问题原因我们先来看下为啥会出现这个报错,那就得说下 MySQL 中一个很特别的权限控制机制,像视图、函数、存储过程、触发器等这些数据对象会存在一个 DEFINER 和一个 SQL SECURITY 的属性,如下所示:

–视图定义CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`%` SQL SECURITY DEFINER VIEW v_test

–函数定义CREATE DEFINER=`root`@`%` FUNCTION `f_test()` RETURNS varchar(100) SQL SECURITY DEFINER

–存储过程定义CREATE DEFINER=`root`@`%` PROCEDURE `p_test`() SQL SECURITY DEFINER

–触发器定义CREATE DEFINER=`root`@`%` trigger t_test

–事件定义CREATE DEFINER=`root`@`%` EVENT `e_test`

DEFINER:对象定义者,在创建对象时可以手动指定用户,不指定的话默认为当前连接用户;

SQL SECURITY:指明以谁的权限来执行该对象,有两个选项,一个为 DEFINER,一个为 INVOKER,默认情况下系统指定为 DEFINER;DEFINER:表示按定义者的权限来执行; INVOKER:表示按调用者的权限来执行。

如果导入账号具有 SUPER 权限,即使对象的所有者账号不存在,也可以导入成功,但是在查询对象时,如果对象的 SQL SECURITY 为 DEFINER,则会报账号不存在的报错。ERROR 1449 (HY000): The user specified as a definer (‘root’@’%’) does not exist

改写好处:1. 可以避免还原时遇到 DEFINER 报错相关问题;2. 根据输出信息知道备份是否正常进行,防止备份中遇到元数据锁无法获取然后一直卡住的情况。

Mysql无法导出

你没有重定向输出的目标文件。

如果没有指定目标文件,mysqldump默认将结果print出来。

mysqldump -h localhost -u root -p test backup.sql

求助啊、、、mysql导出文本文件出错了 error 1 (hy000): Can’t creat

出现该问题的原因一般都是向没有权限的文件或是目录写东西,然后报错个人总结

解决方法如下 以select …. into file

为例

1 select ….. into outfile ‘/tmp/target.txt’

2使用数据库目录

select ….. into outfile

‘/var/lib/mysql/target.txt’

root:@localhost[mytest]select * from me into

outfile ‘/var/lib/mysql/target.txt’ ;

Query OK, 3 rows affected (0.00

sec)

3 使用默认目录

root:@localhost[mytest]select * from me into

outfile ‘target.txt’;

Query OK, 3 rows affected (0.00 sec)

4

我们给出我们的分析思路:

首先我们以用户ububu login :

目录的权限是:

ubutu@ubutu-desktop:~$ mkdir

test

ubutu@ubutu-desktop:~$ ls -lai test

总计 8

16423 drwxr-xr-x 2

ubutu ubutu 4096 2010-03-24 19:59 .

8177 drwxr-xr-x 77 ubutu ubutu 4096

2010-03-24 19:59 ..

login mysql

(注意杂mysql中我们是以root用户登录的)

root:@localhost[mytest]select * from me into

outfile ‘/home/ubutu/test/a.txt’;

ERROR 1 (HY000): Can’t create/write to file

‘/home/ubutu/test/a.txt’ (Errcode:

13)

报错:

我们修改目录的权限:

oot@ubutu-desktop:/home/ubutu# chown -R mysql:mysql

test/

root@ubutu-desktop:/home/ubutu# ls -lai test

总计 8

16423

drwxr-xr-x 2 mysql mysql 4096 2010-03-24 19:59 .

8177 drwxr-xr-x 77 ubutu

ubutu 4096 2010-03-24 19:59

..

在继续执行:错误依旧:

我们继续修改:

root@ubutu-desktop:/home/ubutu# chmod a+wx

test/

root@ubutu-desktop:/home/ubutu# ls -lai test

总计 8

16423

drwxrwxrwx 2 mysql mysql 4096 2010-03-24 19:59 .

8177 drwxr-xr-x 77 ubutu

ubutu 4096 2010-03-24 19:59

..

错误仍在继续:

接着我们尝试用操作系统帐户登录:

root@ubutu-desktop:~# mysql

root:@localhost[mytest]select * from me into outfile

‘/home/ubutu/test/a.txt’

– ;

ERROR 1 (HY000): Can’t create/write to

file ‘/home/ubutu/test/a.txt’ (Errcode:

13)

仍是同样的错误,无语了。为了查找错误的原因,我们从上面成功的例子我们看看那文件的权限:

root@ubutu-desktop:/var/lib/mysql#

ls -lai target.txt

2510 -rw-rw-rw- 1 root root 6 2010-03-24 20:07

target.txt(123使用操作系统的一般用户登录,但是mysql的root用户操作得到的结果)

我们看到文件的拳限是:root

,可是面我们使用chmod a+wx 仍然不行,问题处在那呢?难道是selinux ?

然后我们在/etc/apparmor

里面发现了这个:

capability setuid,

network tcp,

/etc/hosts.allow

r,

/etc/hosts.deny r,

/etc/mysql/*.pem r,

/etc/mysql/conf.d/

r,

/etc/mysql/conf.d/* r,

/etc/mysql/my.cnf r,

/usr/sbin/mysqld

mr,

/usr/share/mysql/** r,

/var/log/mysql.log rw,

/var/log/mysql.err

rw,

/var/lib/mysql/ r,

/var/lib/mysql/** rwk,

/var/log/mysql/

r,

/var/log/mysql/* rw,

/var/run/mysqld/mysqld.pid

w,

/var/run/mysqld/mysqld.sock w,

网上一搜,发现:

AppArmor attempts to

protect processes on the server or desktop from security threats. AppArmor

enforces limits on what processes can access on the system. It attempts to

restrict processes to those resources that the process requires to function

only. AppArmor will not only define the system resources a program can access ,

it will also determine the privileges with which it can access those resources.

To protect applications you will need to set up a security profile for each

application that you want to protect.

AppArmor has it’s history connected to

the Linux Security Modules and the SELinux project that was developed by the

National Security Agency. Both SELinux and AppArmor use these modules developed

with security in mind.

ubuntu :

Default enforcement

By default in a

new installation of the following services is done with AppArmor profiles

enforced:

* cups

* bind

* mysql

* slapd (Open

LDAP)

修改后的:

# vim:syntax=apparmor

# Last Modified: Tue Jun 19 17:37:30

2007

#include tunables/global

/usr/sbin/mysqld {

#include

abstractions/base

#include

abstractions/nameservice

#include

abstractions/user-tmp

#include abstractions/mysql

#include

abstractions/winbind

capability dac_override,

capability

sys_resource,

capability setgid,

capability setuid,

network

tcp,

/etc/hosts.allow r,

/etc/hosts.deny r,

/etc/mysql/*.pem

r,

/etc/mysql/conf.d/ r,

/etc/mysql/conf.d/* r,

/etc/mysql/my.cnf

r,

/usr/sbin/mysqld mr,

/usr/share/mysql/** r,

/var/log/mysql.log

rw,

/var/log/mysql.err rw,

/var/lib/mysql/ r,

/var/lib/mysql/**

rwk,

/var/ r,

/var/**

rwk,

/var/log/mysql/ r,

/var/log/mysql/*

rw,

/var/run/mysqld/mysqld.pid w,

/var/run/mysqld/mysqld.sock

w,

}

然后执行命令:

root:@localhost[mytest]select * from me into outfile

‘/var/data/target.txt’;

Query OK, 3 rows affected (0.00

sec)解决,该情况同样使用于你想将现在的数据目录执行更换,而出现的权限问题,即

自定义数据目录。

写的有点乱,边实验边总结哈

mysql怎么导出数据

1、 mysqldump命令备份数据

在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump,首先我们简单了解一下mysqldump命令用法:

#MySQLdump常用

mysqldump -u root -p –databases 数据库1 数据库2 xxx.sql

2、 mysqldump常用操作实例

2.1备份全部数据库的数据和结构

mysqldump -uroot -p123456 -A /data/mysqlDump/mydb.sql

2.2备份全部数据库的结构(加 -d 参数)

mysqldump -uroot -p123456 -A -d /data/mysqlDump/mydb.sql

2.3 备份全部数据库的数据(加 -t 参数)

mysqldump -uroot -p123456 -A -t /data/mysqlDump/mydb.sql

2.4 备份单个数据库的数据和结构(,数据库名mydb)

mysqldump -uroot-p123456 mydb /data/mysqlDump/mydb.sql

2.5 备份单个数据库的结构

mysqldump -uroot -p123456 mydb -d /data/mysqlDump/mydb.sql

2.6 备份单个数据库的数据

mysqldump -uroot -p123456 mydb -t /data/mysqlDump/mydb.sql2

2.7 备份多个表的数据和结构(数据,结构的单独备份方法与上同)

mysqldump -uroot -p123456 mydb t1 t2 /data/mysqlDump/mydb.sql

2.8 一次备份多个数据库

mysqldump -uroot -p123456 –databases db1 db2 /data/mysqlDump/mydb.sql

MySQL数据库导出与导入及常见错误解决

MySQL数据库导出与导入的过程中将会发生众多不可预知的错误,本文整理了一些常见错误及相应的解决方法,遇到类似情况的朋友可以参考下,希望对大家有所帮助

MySQL命令行导出数据库:

1,进入MySQL目录下的bin文件夹:cd

MySQL中到bin文件夹的目录

如我输入的命令行:cd

C:Program

FilesMySQLMySQL

Server

4.1bin

(或者直接将windows的环境变量path中添加该目录)

2,导出数据库:mysqldump

-u

用户名

-p

数据库名

导出的文件名

如我输入的命令行:mysqldump

-u

root

-p

jluibmclub

d:

jluibmclub

.sql

(输入后会让你输入进入MySQL的密码)

(如果导出单张表的话在数据库名后面输入表名即可)

在用命令做数据库备份过程在cmd命令框中输入C:/mysql/binmysqldump

-uroot

-p

jluibmclub

d:

jluibmclub

.sql

;

报错信息:mysqldump:

Got

error:

1049:

Unknown

database

jluibmclub

;’

when

selecting

the

database

,识别不了

jluibmclub

这个数据库。

但是我在:

mysql

show

databases;

显示:

+—————+

|

Database

|

+—————+

|

jpa

|

+—————+

mysqluse

jpa;

显示:

Database

changed

其原因很简单,只要记住一点。没进入mysql环境不算执行sql语句,所以不用在其后加入逗号(“;”)。

如果进入mysql环境mysql

,则输入的语句属于sql语句了,在其最后一定要加上逗号(“;”)。

3、会看到文件news.sql自动生成到d盘下文件,如果不指定盘符默认在bin目录下。

命令行导入数据库:

1,进入MySQL:mysql

-u

用户名

-p

如我输入的命令行:mysql

-u

root

-p

(输入同样后会让你输入MySQL的密码)

2,在MySQL-Front中新建你要建的数据库,这时是空数据库,如新建一个名为news的目标数据库

3,输入:mysqluse

目标数据库名

如我输入的命令行:mysqluse

news;

4,导入文件:mysqlsource

导入的文件名;

如我输入的命令行:mysqlsource

news.sql(如果在bin目录下用相对路径名,如果在其他目录下用绝对目录名);

MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成的。

1.Win32下MySQL的备份与还原

求助:为什么 mysql8.0版本在my.ini中修改了secure_file_priv,重启服务之后,还是无法导出啊

打开my.cnf 或 my.ini,加入以下语句后重启mysql实例

添加配置到[mysqld]下面配置块、限制mysqld 不允许导入|导出

secure_file_priv=NULL

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

secure_file_priv

限制mysqld 的导入|导出只能发生在/tmp/目录下

secure_file_priv=/tmp/

通过RPM包或YUM安装的默认一般为

secure_file_priv=”/var/lib/mysql-files/”

当secure_file_priv的值为右单斜杠时任意有权限的目录

secure_file_priv=”/”

因此问题的排查可以两步:

show global variables like ‘secure_file_priv’; 检查生效路径指向哪里

该路径对于启动mysqld服务进程的用户mysql/root等是否有读写权限

当然首先需要确认mysqld究竟从哪个my.cnf配置文件读取的参数:

mysql –help | egrep ‘/my\.cnf|\.my\.cnf’ | xargs ls -l

原创文章,作者:DJTYY,如若转载,请注明出处:https://www.506064.com/n/324524.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
DJTYYDJTYY
上一篇 2025-01-13 13:23
下一篇 2025-01-13 13:23

相关推荐

  • vue下载无后缀名的文件被加上后缀.txt,有后缀名的文件下载正常问题的解决

    本文旨在解决vue下载无后缀名的文件被加上后缀.txt,有后缀名的文件下载正常的问题,提供完整的代码示例供参考。 一、分析问题 首先,需了解vue中下载文件的情况。一般情况下,我们…

    编程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • Python 常用数据库有哪些?

    在Python编程中,数据库是不可或缺的一部分。随着互联网应用的不断扩大,处理海量数据已成为一种趋势。Python有许多成熟的数据库管理系统,接下来我们将从多个方面介绍Python…

    编程 2025-04-29
  • 为什么用cmd运行Java时需要在文件内打开cmd为中心

    在Java开发中,我们经常会使用cmd在命令行窗口运行程序。然而,有时候我们会发现,在运行Java程序时,需要在文件内打开cmd为中心,这让很多开发者感到疑惑,那么,为什么会出现这…

    编程 2025-04-29
  • Python程序文件的拓展

    Python是一门功能丰富、易于学习、可读性高的编程语言。Python程序文件通常以.py为文件拓展名,被广泛应用于各种领域,包括Web开发、机器学习、科学计算等。为了更好地发挥P…

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

    编程 2025-04-29
  • Python zipfile解压文件乱码处理

    本文主要介绍如何在Python中使用zipfile进行文件解压的处理,同时详细讨论在解压文件时可能出现的乱码问题的各种解决办法。 一、zipfile解压文件乱码问题的根本原因 在P…

    编程 2025-04-29
  • Python将矩阵存为CSV文件

    CSV文件是一种通用的文件格式,在统计学和计算机科学中非常常见,一些数据分析工具如Microsoft Excel,Google Sheets等都支持读取CSV文件。Python内置…

    编程 2025-04-29
  • Python如何导入py文件

    Python是一种开源的高级编程语言,因其易学易用和强大的生态系统而备受青睐。Python的import语句可以帮助用户将一个模块中的代码导入到另一个模块中,从而实现代码的重用。本…

    编程 2025-04-29
  • openeuler安装数据库方案

    本文将介绍在openeuler操作系统中安装数据库的方案,并提供代码示例。 一、安装MariaDB 下面介绍如何在openeuler中安装MariaDB。 1、更新软件源 sudo…

    编程 2025-04-29

发表回复

登录后才能评论