mysqldump命令详解

mysqldump命令是什么样的?我们一起来看一下:mysqldump命令是MySQL数据库中的一个备份工具,它可以用标准SQL语言将MySQLServer中的数据库导出并保存到文件中。
mysqldump命令备份的工作原理:一般来说,使用mysqldump备份数据库的过程,实际上就是直接从mysql库中以逻辑SQL语句的形式输出数据或者产生备份文件的过程。
语法格式:mysqldump(options)参数说明:1.-b可以指定多个库,并添加库构建语句和using语句2.-compact去掉注释,适合调试输出3.-备份所有库和表4、-f刷新二进制日志,相当于--flush-log5,--master-data,binlog日志名及对应位置点6、-x、--添加lock-tables锁定表7、-l只读锁定表8、-d只备份表结构9、-t只备份数据10is、--single-transaction适合innodb事务数据库备份11、--opt起到优化作用,-add-drop-table、-add-lock、-create-options,-skip-opt导出数据时,与12类似。
-c,在13中插入后添加列名。
--Where:导出数据时添加条件。
参考示例:1、导出整个数据库mysqldump-u用户名-p数据库名。
、导出一个表mysqldump-u用户名-p数据库名表名导出文件名mysqldump-linuxde-psmgp_apps_linuxdeuserslinuxde_users.sql3导出一个数据库结构mysqldump-linuxde-p-d--add-drop-tablesmgp_apps_linuxdelinuxde_db.sql。

实现MySQL数据库的备份与还原的几种方法

MyISAM文件以文件格式保存,因此易于备份。
Innodb中的所有文件都存储在同一个数据文件ibdata1中(可能是多个文件,或者独立的表空间),这是一种更简单的备份方案。
1.使用典型实用程序(例如cp、tar或cpio)直接备份数据库副本。
当您使用直接备份方法时,必须确保该表尚未被使用。
如果服务器在复制时更改表,则副本为空。
确保副本完整性的最佳方法是下载服务器、复制文件,然后重新启动服务器。
如果您不想关闭服务器,请在进行表扫描时关闭服务器。
如果服务器正在运行,则必须对复制文件应用相同的限制,并且必须使用相同的密集协议作为“安静”服务器。
完成MySQL数据库的备份后,您需要重新启动服务器(如果您关闭了服务器)或锁定表(如果您让服务器保持运行状态)。
要使用直接复制文件将数据库从一台计算机复制到另一台计算机,只需将文件复制到另一台主机服务器上的相应数据目录即可。
确保文件为MyIASM格式或两台计算机具有相同的硬件结构,否则您的数据库内容将位于不同的计算机上。
您还应该确保在安装数据库文件时另一台计算机上的服务器不会访问它们。
2.使用mysqldump备份数据库。
mysqldump使用SQL级别的备份机制mysqldump程序备份数据库的速度很慢,但是它生成的文本文件很容易移植。
mysqldump参数的主要部分:1)--兼容=名称告诉mysqldump数据库或旧版本的MySQL服务器与导出的数据兼容。
值可以是ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等。
当然,不保证兼容性,但支持。
2)--complete-insert,-e使用完整INSERT方法导出数据包括字段名,即将所有值写在一行中。
这样做可以提高插入效率,但可能会受到max_allowed_pa​​cket参数的影响而导致插入失败。
因此,这个模块要谨慎使用,但我不推荐使用。
3)--default-character-parts=charset指定再次导出数据到data时使用哪些字符。
4)-添加禁用键告诉mysqldump;和;该选项仅适用于MyISAM表。
5)-Extended-insert=true|false默认情况下,mysqldump切换到-complete-insert模式,因此如果您不想使用它,只需使用此选项并将其值设置为false即可。
6)--hex-blob使用十六进制格式导出一串二进制字段。
如果数据是二进制的,则应使用此选项。
受影响的字段类型为BINARY、VARBINARY和BLOB。
7)--锁定所有文件-x在开始导出之前,我们要求锁定所有数据库中的所有文件,以便安全地存储数据一致性。
这是全局读锁,单事务选项会自动关闭。
8)锁定表与所有表相同,但数据库中所有表最近导出的表数据会被立即锁定。
该选项仅适用于MyISAM表。
如果表是Innodb,则可以使用单事务选项。
9)--no-create,-t只导出数据,不添加创建语句。
10)--no-data,-d不导出任何数据,只导出数据库表结构。
11)。
实时时间表,设置选项该选项可以让mysqldump快速导出数据,并且可以快速导入导出的数据。
该选项默认启用,但可以使用--skip-option禁用。
请注意,如果您在没有任何屏幕选项或选项的情况下运行mysqldump,则整个将记录一组结果。
如果导出大型数据库,可能会出现问题。
12)--quick,-q该选项在导出大文件时很有用。
它强制mysqldump从服务器搜索记录并立即输出,以缓存所有获得的记录。
13)--routines,-R导出存储过程和例程函数。
14)--single-transaction该选项在导出数据之前提交BEGINSQL语句。
START不会阻塞任何应用程序,并且可以确保导出期间数据库的正确状态。
它仅适用于事务数据库,例如InnoDB和BDB。
此选项和表选项是互斥的,因为LOCKTABLES隐式提交任何挂起的事务。
要导出大文件,应在合成中使用快速选项。
--triggers也是导出的触发器。
默认情况下给出此选项,使用--skip-triggers禁用它。
备份:使用Mysqldump备份数据库,实际上就是将数据库转储到一系列create和insert语句中。
mysqldump的使用方法如下:%mysqldump--opttestdb|gzip>/data/backup/testdb.bak#--选项会让dump过程,生成的备份文件会更小,下面的管道操作会压缩dataHome%mysqldump--opttestdbmytable1,mytable2|gzip>/data/backup/testdb_mytable.bak#数据库模式下可以添加数据表的名称,只导出定义的数据表。
drop-table选项将在备份文件中创建的每个表之前添加一条DROPTABLEIFEXIST语句。
这使得更新数据表变得更容易,而不会导致“数据表”错误。
您还可以使用mysqldump命令直接将数据库传输到另一台服务器,而不生成备份文件。
重复执行定期远程数据库更新。
%mysqladmin-hremote_hostcreatetestdb%mysqldump--opttestdb|mysql-hremote_hosttestdb还可以通过ssh远程调用服务器上的程序,如:%sshremote_hostmysqladmincreatetestdb%mysqldump--opttestdb|sshremote_hostmysqltestdb通过直接系统文件复制后端数据库。
通过备份,确保没有人修改数据库。
最好的方法是关闭服务器。
如果无法关闭,请尝试将数据文件锁定为只读模式。
以下是一些示例:%cp-rdb/backup/db#将db数据库备份到/backup/db目录%cptable_name.*/backup/db#仅备份到table_name数据库%scp-rdbremotehot:/usr/local/mysql/data#使用scp将数据库直接复制到远程服务器。
直接将数据复制到远程主机时,必须注意两台机器的硬件结构相同,否则全部复制。
可移植数据表是数据表的一种。
或者/usr/local/mysql/bin/mysqldump-uroot-proot\--defaultcharacter-set=utf8--opt-extended-insert=false--rit。
.sql使用以下SQL来调用Innodb表:/usr/loci/mysql/bin/mysqldump-uroot-proot\--defaultcharacter-set=utf8-opt-extendedinsert=false\-felis-R--hex。
-blob--single-transactionontestdb>testdb.sql另外,如果要进行在线备份,还可以使用如下参数:/usr/local/mysql/bin/mysqldump-uroot-proot\--default-character-set=utf8--optmaster-data=1\--single-transaction--flush-logstestdb>testdb.sql首先只请求串口表,然后刷新binlog,然后客户端将导出的语句文件添加到binlog中,指向当前备份位置。
如果将此文件恢复到服务器,则可以使用此方法。
恢复:带有mysqldump的文件由可直接注入其中的SQL脚本支持。
直接使用mysql客户端,例如:/usr/local/mysql/bin/mysql-uroot-proottestdb3.使用mysqlhotcopy备份数据库使用mysqlhotcopy工具,是一个脚本PerlDBI可以返回数据库而不包括服务器。
使用LOCKTABLES、FLUSHTABLES和cp或scp进行快速数据库备份。
它是返回数据库或单个表最快的方式,但只能在数据库文件(包括数据文件定义文件、数据文件和索引表)所在的机器上运行。
mysqlhotcopy只能用于备份MyISAM,并且只能运行在类Unix和NetWare系统上。
它的主要优点是:直接复制文件,比mysqldump更快。
数据锁定可以自动执行,无需服务器进行备份锁定。
可以重建日志以使备份​​文件和日志文件匹配。
背景:mysqlhotcopy支持一次复制多个数据库,并且支持正则表达式。
以下是一些示例:/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=root\testdb/tmp(示例testdb数据库目录位于/tmp)/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=root\testdb_1testdb_2testdb_n/tmp/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=root\testdb./regex//tmpRestore:Mysqlhotcopy返回整个数据库目录。
使用它,您可以直接将其复制到mysqld指定的datadir(这是/usr/local/mysql/data/)。
问题,如本例所示:cp-rftestdb/usr/local/mysql/data/chown-Rnobody:nobody/usr/local/mysql/data/(将testdb目录的所有者更改为当前mysqld用户)4.SQLuse语句备份数据库BACKUPTABLE语法实际上类似于基本的mysqlhotcopy操作表。
可以实现在线备份,但性能不太理想,不推荐。
我只复制文件结构和数据文件,但不同时复制索引,所以恢复比较慢。
备份:BACKTABLEtbl_testTO'/tmp/testdb/';#Tbl_test数据库到/tmp/testdb/pretorium,将立即为这些表创建testdb目录,备份目录也必须是服务器可写的。
执行该语句时,内存中的数据会先写入磁盘,然后将数据列表中各数据文件的.frm(文件结构定义文件)和.MYD(数据)文件写入到磁盘中。
王子的背影.MYI(索引)文件不会被复制,因为它可以用其他两个文件重建。
备份BACKUPTABLE语句时,数据表被锁定在可能与当前数据表不同的行中。
例如:mysql>LOCKTABLEStb1READ,tb2READ;mysql>BACKUPTABLEtb1,tb2TO'backup/db';mysql>unlocktables;请注意,您必须具有执行此SQL的权限,并且/tmp/testdb/目录必须可由mysqld用户写入。
SELECTINTOOUTFILE可以将数据导出到纯文本文件。
例如:SELECT*INTOOUTFILE'/tmp/testdb/tbl_test.txt'FROMtbl_test;注意,必须有FILE权限才能执行这个SQL,并且文件/tmp/testdb/tbl_test.txt必须是mysqld用户Scapus可写的,已经存在的文件不能被覆盖,以避免安全问题。
恢复:由于文件是使用BACKUPTABLE方法备份的,因此可以运行上述命令来恢复数据表。
示例:RESTORETABLEFROM'/tmp/testdb/';对于使用SELECTINTOOUTFILE方法备份的文件,可以使用LOADDATAINFILE语句来恢复数据表。
示例:LOADDATAINFILE'/tmp/testdb/tbl_name.txt'INTOTABLEtbl_name;在加载数据之前,数据表必须已经存在。

mysql如何备份和还原数据库

MySQL目前支持的免费备份工具包括:mysqldump和mysqlhotcopy。
还可以使用SQL语法进行备份:BACKUPTABLE或SELECTINTOOUTFILE,或者备份二进制日志(binlog),或者直接复制数据文件和相关配置文件。
MyISAM表以文件的形式存储,使得备份相对容易。
可以使用以上几种方法。
Innodb中的所有表都存储在同一个数据文件ibdata1中(可以是多个文件,也可以是独立的表空间文件),安全性相对较难。
免费的解决方案可以是复制数据文件和备份binlog。
1、mysqldump1.1备份mysqldump采用SQL级别的备份机制。
它将数据表导出到SQL脚本文件。
这也是最常用的备份方法。
现在我们来谈谈mysqldump的一些主要参数:•--pressed=name它告诉mysqldump导出的数据将与哪个数据库或旧版本的MySQL服务器兼容。
值可以是ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等。
要使用多个值,请用逗号分隔它们。
当然不能保证完全兼容,但会尝试兼容。
•--complete-insert,-c使用完整的INSERT方法导出数据,包括字段名称,即h.所有值都写在一行中。
这样可以提高插入效率,但可能会受到max_allowed_pa​​cket参数的影响而导致插入错误。
所以这个参数一定要谨慎使用,至少我不推荐使用。
•--default-character-set=charset指定导出数据时使用哪个字符集。
如果数据表不使用默认的latin1字符集,导出时必须指定该选项,否则再次导入数据后会出现乱码。
•--disable-keys告诉mysqldump使用/*!40000ALTERTABLEDISABLEKEYS*/语句;在INSERT语句的开头和结尾处,因为插入所有数据后,稍后会重建索引。
该选项仅适用于MyISAM表。
•--extended-insert=true|false默认情况下,mysqldump启用--complete-insert模式。
因此,如果您不想使用它,只需使用此选项并将其值设置为false即可。
•--hex-blob以十六进制格式导出二进制字符串字段。
当存在二进制数据时必须使用此选项。
受影响的字段类型为BINARY、VARBINARY和BLOB。
•--lock-all-tables,-x在开始导出之前,发送请求锁定所有数据库中的所有表,以确保数据一致性。
这是全局读锁,并且--single-transaction和--lock-tables选项会自动禁用。
•--lock-tables与--lock-all-tables类似,但锁定当前导出的数据表,而不是一次性锁定数据库中的所有表。
此选项仅适用于MyISAM表。
如果是innodb表,可以使用--single-transaction选项。
•--no-create-info,-t只导出数据,不添加CREATETABLE语句。
•--no-data,-d不导出数据,只导出数据库表结构。
•--opt这只是一个快速选项,相当于添加--add-drop-tables--add-locking--create-option--disable-keys--extended-insert--lock-tables--quick-同时选项-set-charset。
该选项允许mysqldump快速导出数据以及导出的数据可以再次快速导入。
该选项默认启用,但可以使用--skip-opt禁用。
请注意,如果运行mysqldump时未指定--quick或--opt选项,则整个结果集将存储在内存中。
导出大型数据库时可能会出现问题。
•--quick、-q该选项在导出大型表时很有用。
它强制mysqldump从服务器查询记录并直接输出,而不是在获取所有记录后将它们缓存在内存中。
•--routines,-R导出存储过程和用户​​定义函数。
•--single-transaction该选项在导出数据之前提交BEGINSQL语句。
BEGIN不会阻塞应用程序,并且可以保证导出过程中数据库状态的一致。
它仅适用于InnoDB和BDB等事务表。
此选项和--locktable选项是互斥的,因为LOCKTABLES会导致所有挂起的事务隐式提交。
要导出大表,应结合使用--quick选项。
•--triggers也导出触发器。
默认情况下启用此选项。
使用--skip-triggers禁用它们。
其他参数的详细信息请参见手册。
我通常使用以下SQL来备份MyISAM表:/usr/local/mysql/bin/mysqldump-uyejr-pyejr--default-character-set=utf8--opt--extended-insert=false\--triggers-R--hex-blob-xdb_name>db_name.sql使用以下SQL获取要备份的Innodb表:/usr/local/mysql/bin/mysqldump-uyejr-pyejr--default-character-set=utf8--opt--extended-insert=false\--triggers-R--hex-blob--single-transactiondb_name>db_name.sql1.2恢复withmysqldump中保存的文件是一个SQL脚本,可以直接填写。
有两种导入数据的方法。
•直接使用MySQL客户端,例如:/usr/local/mysql/bin/mysql-uyejr-pyejrdb_name事实上,这不是标准的SQL。
语法,而是MySQL客户端提供的函数,例如:SOURCE/tmp/db_name.sql;这里需要指定文件的绝对路径,并且必须是MySQL用户运行的文件(例如nobody)。
有阅读权限。
2.mysqlhotcopy2.1备份mysqlhotcopy是一个PERL程序,最初由TimBunce编写。
它使用LOCKTABLES、FLUSHTABLES和cp或scp来快速保护数据库。
这是备份数据库或单个表最快的方法,但只能在数据库文件(包括数据表定义文件、数据文件和索引文件)所在的计算机上完成。
mysqlhotcopy只能用于备份MyISAM,并且只能运行在类Unix和NetWare系统上。
mysqlhotcopy支持同时复制多个数据库,还支持正则表达式。
下面是一些示例:root#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=yejr-p=yejrdb_name/tmp(将db_name数据库目录复制到/tmp)root#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=yejr-p=yejrdb_name_1...db_name_n/tmproot#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=yejr-p=yejrdb_name./regex//tmp有关如何使用它的更多信息,请参阅手册或要显示mysqlhotcopy帮助,请调用以下命令:perldoc/usr/local/mysql/bin/mysqlhotcopy请注意,如果要使用mysqlhotcopy,则必须具有SELECT和RELOAD权限(以运行FLUSHTABLES)以及读取目录datadir/db_name必须有。
2.2恢复mysqlhotcopy备份的整个数据库目录。
可以直接复制到mysqld指定的数据目录(这里是/usr/local/mysql/data/)。
权限问题,如下例:root#cp-rfdb_name/usr/local/mysql/data/root#chown-Rnobody:nobody/usr/local/mysql/data/(将db_name目录的所有者更改为运行mysqld用户)3.SQL语法备份3.1BACKUPTABLE的备份语法其实和这个类似mysqlhotcopy的工作原理。
锁定表,然后复制数据文件。
可以进行在线备份,但效果不太理想,不推荐。
它只复制表结构文件和数据文件,但不会同时复制索引文件,因此恢复速度较慢。
示例:BACKTABLEtbl_nameTO'/tmp/db_name/';请注意,您必须具有FILE权限才能执行此SQL,并且/tmp/db_name/目录必须可由mysqld用户写入。
导出的文件不得覆盖现有文件,以避免安全问题。
SELECTINTOOUTFILE将数据导出到普通文本文件。
您可以调整字段间距以使处理此数据更加容易。
示例:SELECTINTOOUTFILE'/tmp/db_name/tbl_name.txt'FROMtbl_name;请注意,您必须具有FILE权限才能执行此SQL,并且文件/tmp/db_name/tbl_name.txt必须可由mysqld用户写入,并且导出的文件不能写入。
为了避免安全问题,不能覆盖预先存在的文件。
3.2要恢复使用BACKUPTABLE方法备份的文件,可以执行RESTORETABLE语句来恢复数据表。
示例:RESTORETABLEFROM'/tmp/db_name/';权限要求与上述类似。
对于使用SELECTINTOOUTFILE方法备份的文件,可以使用LOADDATAINFILE语句来恢复数据表。
示例:LOADDATAINFILE'/tmp/db_name/tbl_name.txt'INTOTABLEtbl_name;权限要求与上述类似。
导入数据之前,需要先创建数据表(如果存在的话)。
如果您担心数据重复,可以添加REPLACE关键字来替换现有记录或使用IGNORE关键字来忽略它们。
添加:shell>mysqldump--quickdb_name|gzip>db_name.contents.gz(本例中创建的文件为压缩格式)。
恢复/传输到另一台计算机的命令如下:Shell>gunzipBinlog方式相对更灵活,省心省力,还可以支持增量备份。
开启binlog后需要重启mysqld。
首先,关闭mysqld,打开my.cnf,添加以下行:server-id=1log-bin=binloglog-bin-index=binlog.index,然后启动mysqld。
binlog.000001和binlog.index是运行过程中产生的。
前一个文件是MySQL,记录了所有的数据更新操作,后一个文件是所有binlog的索引,不能轻易删除。
关于Binlog的更多信息,请参见手册。
如果需要进行备份,可以先执行一条SQL语句让mysqld停止写入当前的binlog,然后直接备份文件。
这样就可以达到增量的目的达到备份:FLUSHLOGS;由于这是备份复制系统中的从属设备,因此您还应该备份master.info和relay-log.info文件。
可以使用MySQL提供的mysqlbinlog工具查看受保护的binlog文件,例如:例如:/usr/local/mysql/bin/mysqlbinlog/tmp/binlog.000001。
该工具可以查看指定数据库下的所有SQL语句。
而且还可以限定时间范围,非常方便。
有关详细信息,请参阅手册。
恢复时,可以使用类似如下的语句:/usr/local/mysql/bin/mysqlbinlog/tmp/binlog.000001|mysql-uyejr-pyejrdb_name。
直接使用mysqlbinlog输出的SQL语句作为输入来执行。
如果您有一台不活动的计算机,不妨使用此方法对其进行备份。
由于从机的性能要求相对较低,增量备份性价比高,并且可以分担部分数据查询压力。
5、数据文件直接备份相比之前的方法,数据文件备份是最直接、最快、最方便的。
缺点是增量备份基本不可能。
为了保证数据的一致性,在保存文件之前必须执行以下SQL语句:FLUSHTABLESWITHREADLOCK;即内存中的所有数据刷新到磁盘,同时对数据表进行锁定,保证复制过程中不会写入新的数据。
使用这种方法备份的数据也非常容易恢复。
只需将它们复制回原始数据库目录即可。
请注意,对于Innodb类型表,还必须备份日志文件(ib_logfile*文件)。
因为如果Innodb表损坏了,可以依靠这些日志文件来恢复。
6、备份策略对于中等业务量的系统,备份策略可以设置为:第一次全量备份、每天一次增量备份、每周一次全量备份等。
对于重要、繁忙的系统,可能需要一次备份。
每天一次完整备份,每小时一次或更频繁的是增量备份。
为了实现在线备份和增量备份而不影响在线业务,最好采用主从复制(replication)机制在从机上创建备份。
7、数据维护和容灾作为一名DBA(我还不是哈哈),最重要的任务之一就是保证数据表安全、稳定、高速可用。
因此,您的数据表需要定期维护。
下面的SQL语句非常有用:CHECKTABLE或REPAIRTABLE,检查或管理MyISAM表OPTIMIZETABLE,优化MyISAM表ANALYZETABLE,分析MyISAM表。
当然,上述所有命令最初都可以通过myisamchk工具执行,这里不详细解释。
通过执行以下语句可以对Innodb表进行碎片整理并提高索引速度:ALTERTABLEtbl_nameENGINE=Innodb;这实际上是一个NULL操作,表面上什么也不做,但实际上是重新整理碎片。
常用的MyISAM表可以使用上述恢复方法进行恢复。
如果索引损坏,可以使用myisamchk工具重建索引。
这对于Innodb表来说并不那么容易,因为所有表存储在表空间中。
然而,Innodb有一个检查机制,称为FuzzyCheckpoint。
只要保存日志文件,就可以使用日志文件修复错误。
您可以在my.cnf文件中添加以下参数,让mysqld在启动时自动检查日志文件:innodb_force_recovery=4有关此参数的信息,请参阅手册。
有点长,慢慢读可能会有所帮助。