win10系统mysql用workbench导出数据库出错

win10系统mysql用workbench导出数据库出错,第1张

在MySQL WorkBench的Server Administrator中双击要连接的数据库

点击左边的Data Export,在右边的数据库列表中选择要导出的数据库;

Export to Dump Project Folder是每张表导出一个.sql文件,Export to Self-Contained File是整个数据库导出一个.sql文件,这里选择Export to Self-Contained File,选择.sql文件保存路径,下面还有是否导出存储过程,是否忽略数据等选项;

点击Start Export按钮,导出数据库

打开导出的.sql文件,可见已经导出了整个数据库。

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/bin>mysqldump

-uroot

-p

jluibmclub>

d:

jluibmclub

.sql

报错信息:mysqldump:

Got

error:

1049:

Unknown

database

'

jluibmclub

'

when

selecting

the

database

,识别不了

jluibmclub

这个数据库。

但是我在:

mysql>

show

databases

显示:

+---------------+

|

Database

|

+---------------+

|

jpa

|

+---------------+

mysql>use

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,输入:mysql>use

目标数据库名

如我输入的命令行:mysql>use

news

4,导入文件:mysql>source

导入的文件名

如我输入的命令行:mysql>source

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

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

1.Win32下MySQL的备份与还原

项目上 MySQL 还原 SQL 备份经常会碰到一个错误如下,且通常出现在导入视图、函数、存储过程、事件等对象时,其根本原因就是因为导入时所用账号并不具有SUPER 权限,所以无法创建其他账号的所属对象。ERROR 1227 (42000) : Access deniedyou 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. 根据输出信息知道备份是否正常进行,防止备份中遇到元数据锁无法获取然后一直卡住的情况。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6257418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存