老尸 发表于 2015-1-16 22:16:24

MSSQL编程:MySQL数据库备份和恢复详解

因此,我们的第一个“米”,就是二进制日志binlog必须是rowbased的。在rowbase下,二进制日志binlog同时记录了更新前后的整行记录。本文会商MySQL的备份和恢复机制,和怎样保护数据表,包含最次要的两种表范例:MyISAM和Innodb,文中计划的MySQL版本为5.0.22。今朝MySQL撑持的收费备份工具有:mysqldump、mysqlhotcopy,还能够用SQL语法举行备份:BACKUPTABLE大概SELECTINTOOUTFILE,又大概备份二进制日记(binlog),还能够是间接拷贝数据文件和相干的设置文件。MyISAM表是保留成文件的情势,因而绝对对照简单备份,下面提到的几种办法都可使用。Innodb一切的表都保留在统一个数据文件ibdata1中(也多是多个文件,大概是自力的表空间文件),绝对来讲对照欠好备份,收费的计划能够是拷贝数据文件、备份binlog,大概用mysqldump。
1、mysqldump
1.1备份
mysqldump是接纳SQL级其余备份机制,它将数据表导成SQL剧本文件,在分歧的MySQL版本之间晋级时绝对对照符合,这也是最经常使用的备份办法。如今来说一下mysqldump的一些次要参数:
--compatible=name它告知mysqldump,导出的数据将和哪一种数据库或哪一个旧版本的MySQL服务器相兼容。值能够为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,要利用几个值,用逗号将它们离隔。固然了,它其实不包管能完整兼容,而是只管兼容。
--complete-insert,-c导出的数据接纳包括字段名的完全INSERT体例,也就是把一切的值都写在一行。这么做能进步拔出效力,可是大概会遭到max_allowed_packet参数的影响而招致拔出失利。因而,必要审慎利用该参数,最少我不保举。
--default-character-set=charset指定导出数据时接纳何种字符集,假如数据表不是接纳默许的latin1字符集的话,那末导出时必需指定该选项,不然再次导进数据后将发生乱码成绩。
--disable-keys告知mysqldump在INSERT语句的开首和开头增添/*!40000ALTERTABLEtableDISABLEKEYS*/;和/*!40000ALTERTABLEtableENABLEKEYS*/;语句,这能年夜年夜进步拔出语句的速率,由于它是在拔出完一切数据后才重修索引的。该选项只合适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。本选项和--lock-tables选项是互斥的,由于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.sql
1.2复原
用mysqldump备份出来的文件是一个能够间接倒进的SQL剧本,有两种办法能够将数据导进。
间接用mysql客户端比方:
/usr/local/mysql/bin/mysql-uyejr-pyejrdb_name《db_name.sql
用SOURCE语法实在这不是尺度的SQL语法,而是mysql客户端供应的功效,比方:SOURCE/tmp/db_name.sql;
这里必要指定文件的相对路径,而且必需是mysqld运转用户(比方nobody)有权限读取的文件。
<p>BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继

因胸联盟 发表于 2015-1-19 06:29:50

每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。

活着的死人 发表于 2015-1-25 09:43:22

其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。

只想知道 发表于 2015-2-2 21:35:45

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

若天明 发表于 2015-2-8 06:36:35

比如日志传送、比如集群。。。

小妖女 发表于 2015-2-24 21:59:03

而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。

透明 发表于 2015-3-7 13:50:56

where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

小女巫 发表于 2015-3-15 07:37:15

XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)

柔情似水 发表于 2015-3-21 22:57:16

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
页: [1]
查看完整版本: MSSQL编程:MySQL数据库备份和恢复详解