|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因此,我们的第一个“米”,就是二进制日志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做复制的中继 |
|