MySQL心得8-2-使用SQL语句备份和恢复表数据(二)
部分列或文件中字段值顺序与表中列的顺序不同,就必须指定一个列清单,其中可以包含列名或用户变量。
SET子句:SET子句可以在导入数据时修改表中列的值。
例: 备份XSCJ数据库中的KC表中数据到D盘FILE目录中,要求字段值如果是字符就用双引号标注,字段值之间用逗号隔开,每行以“?”为结束标志。最后将备份后的数据导入到一个和KC表结构一样的空表COURSE表中。
首先导出数据:
USE XSCJ;
SELECT * FROM KC
INTO OUTFILE'D:/FILE/myfile1.txt'
FIELDS TERMINATED BY ' , '
OPTIONALLYENCLOSED BY ' " '
LINES TERMINATED BY ' ';
文件备份完后可以将文件中的数据导入到COURSE表中,使用以下命令:
LOAD DATA INFILE 'D:/FILE/myfile1.txt'
INTO TABLE COURSE
FIELDS TERMINATED BY ' , '
OPTIONALLYENCLOSED BY ' " '
LINES TERMINATED BY ' ';
www.2cto.com
注意:在导入数据时,必须根据文件中数据行的格式指定判断的符号。例如,在myfile1.txt文件中字段值是以逗号隔开的,导入数据时一定要使用“TERMINATED BY ','”子句指定逗号为字段值之间的分隔符,与SELECT…INTOOUTFILE语句相对应。
因为MySQL表保存为文件形式,所以备份很容易。但是在多个用户使用MySQL的情况下,为了得到一个一致的备份,在相关的表上需要做一个读锁定,防止在备份过程中表被更新;当恢复数据时,需要一个写锁定,以避免冲突。在备份或恢复完以后要对表进行解锁。
2. 启用日志
二进制日志可以在启动服务器的时候启用,这需要修改C:\Program Files\MySQL文件夹中的my.ini选项文件。打开该文件,找到[
mysqld]所在行,在该行后面加上以下格式的一行:
log-bin[=filename]
说明:加入该选项后,服务器启动时就会加载该选项,从而启用二进制日志。如果filename包含扩展名,则扩展名被忽略。MySQL服务器为每个二进制日志名后面添加一个数字扩展名。每次启动服务器或刷新日志时该数字增加1。如果filename未给出,则默认为主机名。假设这里filename取名为bin_log。若不指定目录,则在MySQL的data目录下自动创建二进制日志文件。由于下面使用mysqlbinlog工具处理日志时,日志必须处于bin目录下,所以日志的路径就指定为bin目录,添加的行改为以下一行:
log-bin=C:/Program Files/MySQL/MySQLServer 5.1/bin/bin_log
保存,重启服务器。重启服务器的方法可以是:
先关闭服务器,
net stop mysql
再启动服务器:
net start mysql
此时,MySQL安装目录的bin目录下多出两个文件:bin_log.000001和bin_log.index。bin_log.000001就是二进制日志文件,以二进制形式存储,用于保存数据库更新信息。当这个日志文件大小达到最大,MySQL还会自动创建新的二进制文件。bin_log.index是服务器自动创建的二进制日志索引文件,包含所有使用的二进制日志文件的文件名。
使用mysqlbinlog实用工具可以检查二进制日志文件。命令格式为: mysqlbinlog[options] log-files... www.2cto.com
说明:log-files是二进制日志的文件名。
例如,运行以下命令可以查看bin_log.000001的内容:
mysqlbinlog bin_log.000001
由于二进制数据可能非常庞大,无法在屏幕上延伸,可以保存到文本文件中:
mysqlbinlogbin_log.000001>D:/FILE/lbin-log000001.txt
使用日志恢复数据的命令格式如下:
mysqlbinlog [options] log-files… |mysql [options]
例: 假设用户在星期一下午1点使用mysqldump工具进行数据库XSCJ的完全备份,备份文件为file.sql。从星期一下午1点开始用户启用日志,bin_log.000001文件保存了从星期一下午1点到星期二下午1点的所有更改,在星期二下午1点运行一条SQL语句:
Flush logs;
此时创建了bin_log.000002文件,在星期三下午1点时数据库崩溃。现要将数据库恢复到星期三下午1点时的状态。首先将数据库恢复到星期一下午1点时的状态,在DOS窗口输入以下命令:
mysqldump -uroot -p123456 XSCJ
使用以下命令将数据库恢复到星期二下午时的状态:
mysqlbinlog bin_log.000001 | mysql-uroot -p123456
再使用以下命令即可将数据库恢复到星期三下午1点时的状态:
mysqlbinlog bin_log.000002 | mysql-uroot -p123456
由于日志文件要占用很大的硬盘资源,所以要及时将没用的日志文件清除掉。以下这条SQL语句用于清除所有的日志文件: www.2cto.com
Reset master;
如果要删除部分日志文件,可以使用purge master logs语句。
语法格式为:PURGE {MASTER |BINARY} LOGS TO 'log_name'
或: PURGE {MASTER | BINARY} LOGS BEFORE 'date'
说明:第一个语句用于删除特定的日志文件,log_name为文件名。第二个语句用于删除时间date之前的所有日志文件。MASTER和BINARY是同义词。
作者 tianyazaiheruan