mysql 数据库的备份和恢复

陌路散爱 提交于 2019-12-02 17:39:46

下面的操作以XSCJ库为例.

一、使用SQL语句备份和恢复数据表结构

备份XSCJ数据库中的KC表中数据到D盘FILE目录中,要求字段值如果是字符就用双引号标注,字段值之间用逗号隔开,每行以“?”为结束标志。最后将备份后的数据导入到一个和KC表结构一样的空表COURSE表中。

首先导出数据:

USE XSCJ;

SELECT * FROM kc

  INTO OUTFILE 'f:/FILE/kc.txt' CHARACTER SET utf8

  FIELDS  TERMINATED BY ','

  OPTIONALLY ENCLOSED BY '"'

  LINES TERMINATED BY '?';

文件备份完后可以将文件中的数据导入到COURSE表中,使用以下命令:

LOAD DATA INFILE 'f:/FILE/kc.txt'

  INTO TABLE kc CHARACTER SET utf8

  FIELDS  TERMINATED BY ','

  OPTIONALLY ENCLOSED BY '"'

  LINES TERMINATED BY '?';

二、使用客户端程序备份和恢复数据

1、备份数据库

(1)

使用mysqldump备份XS表和KC表。具体命令如下:

mysqldump -h localhost -uroot -proot XSCJ XS KC > d:\twotables.sql

说明:如果是本地服务器,-h选项可以省略。在MySQL的bin目录下可以看到,已经保存了一个.sql格式的文件,文件中存储了创建XS表和KC表的一系列SQL语句。

注意:若在命令中没有表名,则备份整个数据库。

mysqldump -h localhost -uroot -proot XSCJ XS KC > d:\twotables.sql

(2)

备份XSCJ数据库和mysql数据库到D盘FILE文件夹下。

mysqldump -uroot -proot --databases XSCJ mysql>D:/FILE/data.sql

说明:命令执行完后,在FILE文件夹下的data.sql文件被创建了,其中存储了XSCJ数据库和mysql数据库的全部SQL语句。

(3)

备份MySQL服务器上的所有数据库。使用如下命令:

mysqldump -uroot -proot --all-databases>all.sql

虽然用mysqldump导出表的结构很有用,但是在恢复数据时,如果数据量很大,众多SQL语句将使恢复的效率降低。可以通过使用--tab=选项,分开数据和创建表的SQL语句。

(4)

将XSCJ数据库中所有表的表结构和数据都分别备份到D盘FILE文件夹下。命令如下:

mysqldump -uroot -proot xscj --tab=D:\FILE

其效果是在目录FILE中生成6个文件,分别是xs.txt、xs.sql、kc.txt、kc.sql、xs_kc.txt和xs_kc.sql。

2、恢复数据库

mysqldump程序备份的文件中存储的是SQL语句的集合,用户可以将这些语句还原到服务器中以恢复一个损坏的数据库。

(1)

假设XS表结构损坏,备份文件在D盘FILE目录下,现将包含XS表结构的.sql文件恢复到服务器中。命令如下:

mysql -uroot -proot XSCJ<D:\FILE\xs.sql

(2)

使用mysqlimport恢复数据

mysqlimport客户端可以用来恢复表中的数据,它提供了LOAD DATA INFILE语句的一个命令行接口,发送一个LOAD DATA INFILE命令到服务器来运作

恢复XSCJ数据库中表XS的数据,保存数据的文件为XS.txt,命令如下:

mysqlimport -uroot -proot XSCJ d:\file\XS.txt

mysqlimport也需要提供-u、-p选项来连接服务器。值得注意的是,mysqlimport是通过执行LOAD DATA INFILE语句来恢复数据库的,所以上例中备份文件未指定位置的默认是在MySQL的DATA目录中。如果不在则要指定文件的具体路径。

LOAD DATA INFILE 'D:/file/xs.txt'

  INTO TABLE xs CHARACTER SET gbk

  FIELDS TERMINATED BY '\t' ENCLOSED BY ''

  LINES TERMINATED BY '\n'

三、使用MySQL界面工具进行备份和恢复

四、日志文件概述

1.错误日志   记录启动、运行或停止mysqld时出现的问题。

My.ini配置信息:

#log-error=d:/mysql_log_err.txt

2.

查询日志    记录建立的客户端连接和执行的语句。

My.ini配置信息:

#log=d:/mysql_log.txt

3.

更新日志   记录更改数据的语句。不赞成使用该日志。

My.ini配置信息:

#Enter a name for the update log file. Otherwise a default name will be used.

#log-update=d:/mysql_log_update.txt

4.

二进制日志    记录所有更改数据的语句。还用于复制。

My.ini配置信息:

log-bin=“d:/mysql_log_bin”

5.

慢日志    记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。

My.ini配置信息:

#long_query_time =1

#log-slow-queries= d:/mysql_log_slow.txt

是否启用了日志

mysql>show variables like 'log_%';

怎样知道当前的日志

mysql> show master status;

显示二進制日志數目

四、使用二进制日志文件

1、启用日志

二进制日志可以在启动服务器的时候启用,这需要修改C:\Program Files\MySQL文件夹中的my.ini选项文件。打开该文件,找到[mysqld]所在行,在该行后面加上以下格式的一行:

log-bin="D:/mysql_data/Data/bin_log"

保存,重启服务器。重启服务器的方法可以是:

net stop mysql

再启动服务器:

net start mysql

此时,MySQL安装目录的bin目录下多出两个文件:bin_log.000001和bin_log.index。bin_log.000001就是二进制日志文件,以二进制形式存储,用于保存数据库更新信息。当这个日志文件大小达到最大,MySQL还会自动创建新的二进制文件。bin_log.index是服务器自动创建的二进制日志索引文件,包含所有使用的二进制日志文件的文件名。

使用mysqlbinlog实用工具可以检查二进制日志文件。

例如,运行以下命令可以查看bin_log.000001的内容:

mysqlbinlog bin_log.000001

由于二进制数据可能非常庞大,无法在屏幕上延伸,可以保存到文本文件中:

mysqlbinlog bin_log.000001>D:/FILE/lbin-log000001.txt

【例】 假设用户在星期一下午1点使用mysqldump工具进行数据库XSCJ的完全备份,备份文件为xscj.sql。从星期一下午1点开始用户启用日志,bin_log.000001文件保存了从星期一下午1点到星期二下午1点的所有更改。假如数据库崩溃。现要将数据库恢复到星期一下午1点时的状态,在DOS窗口输入以下命令:

(1)mysql -uroot -proot XSCJ<file.sql

(2)使用以下命令将数据库恢复到星期二下午时的状态:

mysqlbinlog bin_log.000001 | mysql -uroot -proot

自动清除日志文件

方法1:在配置文件中设置:

Expire_logs_days  =10

方法2:在运行时设置

Set global Expire_logs_days=10

由于日志文件要占用很大的硬盘资源,所以要及时将没用的日志文件清除掉。以下这条SQL语句用于清除所有的日志文件:

RESET MASTER;

如果要删除部分日志文件,可以使用PURGE MASTER LOGS语句。

语法格式为:

PURGE {MASTER | BINARY} LOGS TO 'log_name‘

例如:PURGE BINARY LOGS TO ‘bin_log.000004’,将此之前的日志全部删除

PURGE {MASTER | BINARY} LOGS BEFORE 'date‘

例如:PURGE BINARY LOGS BEFORE '2012-03-16 15:26:00'

说明:第一个语句用于删除特定的日志文件,log_name为文件名。第二个语句用于删除时间date之前的所有日志文件。MASTER和BINARY是同义词。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!