mysqldump 无法实现不完全恢复

有点像oracle的没开归档模式的

这是一种备份 另一种把库所在的目录 打个包

类似于oracle归档的一种,开启二进制日志,可以实现不完全恢复,恢复到任意时间点

vi /etc/my.cnf

log-bin=binary-log

重启mysql数据库

然后在

/var/lib/mysql目录下就可以看到二进制日志binary-log.000001

my.cnf记载了 mysql数据的存放位置

总结:也就是说mysqlbinlog是一种辅助,如果需要不完全恢复,则需要借助mysqlbinlog来恢复

mysqldump

备份整个数据库

mysqldump -u root -ppassword databasename

>data.sql

//输入root密码即可

例如:在命令行输入

mysqldump -uroot -p123456

bugs>data.sql

备份某个或多个表

mysqldump -u root -p databasename table1name

table2name >data.sql

//输入root密码即可

只备份数据结构

mysqldump -u root -p databasename –no-data

>data.sql(未必好用,需要验证)

//输入root密码即可

恢复

mysql -u root -p –database=databasename

//输入root密码即可

导入数据库

常用source 命令

进入mysql数据库控制台,

如mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source

d:\wcnc_db.sql

经过验证此种方法可以恢复某个数据库里的所有数据,某些表

Mysql提供了mysqlbinlog命令来查看日志文件,如mysqlbinlog xxx-bin.001 |

more。在记录每条变更日志的时候,日志文件都会把当前时间给记录下来,以便进行数据库恢复。

l 日志文件的停用

可以使用SET SQL_LOG_BIN=0命令停止使用日志文件,然后可以通过SET SQL_LOG_BIN=1命令来启用。

如果遇到灾难事件,应该用最近一次制作的完整备份恢复数据库,然后使用备份之后的日志文件把数据库恢复到最接近现在的可用状态。

使用日志进行恢复时需要依次进行,即最早生成的日志文件要最先恢复:

mysqlbinlog xxx-bin.00001 | mysql –u root –p

mysqlbinlog xxx-bin.00002 | mysql –u root –p

mysqlbinlog的输出是可重复执行的,可以直接作为mysql程序的输入,若服务器崩溃后,可以利用mysqlbinlog的这个功能对二进制日志进行恢复,如mysqlbinlog binlog.000001 | mysql。此外,也可以将mysqlbinlog的输出重定向到一个文件中,删除不需要的SQL后再交给mysql去执行。需要注意的是,在恢复过程中,不要将多个日志文件同时交给不同的mysql客户端执行,因为恢复时需要保持二进制日志中的SQL语句的执行顺序。下边是一种可选的方式:mysqlbinlog binlog.000001 binlog.000002 |

mysql,或者将多个二进制文件拷贝到单个文件再执行。

此外,mysqlbinlog还提供了读取远程机器的二进制日志的功能,其用法比较简单,只需要指定--read-from-remote-server选项即可,当然,远程主机的连接信息也是必要的,包括:--host, --password, --port, --protocol,

--socket, 以及 –user等

选项

功能描述

--help

打印帮助信息并退出

--character-sets-dir

指定字符集的安装目录

--database

只列出该数据库的日志项(该选项只用于本地日志)

--debug

打印调试级别的日志。典型的选项是'd:t:o,file_name'

--disable-log-bin

关闭二进制日志(例如从日志中恢复时或者指定了--to-last-log选项时)。使用该选项时,mysqlbinlog会调用mysql的SET

SQL_LOG_BIN=0语句关闭二进制日志。

--force-read

当碰到不能识别的事件时,打印警告信息并忽略

--hexdump

以16进制格式打印日志到输出

--host

指定日志文件所在的主机地址

--local-load

为LOAD DATA INFILE指定一个本地临时目录

--offset=N

指定读取的事件偏移量(忽略前N个事件)

--password

连接到服务器时使用的密码

--port

连接到服务器时使用的TCP/IP端口

--position

该选项已经废除,使用--start-position替换

--protocol

指定使用的连接协议={TCP|SOCKET|PIPE|MEMORY}

--read-from-remote-server

指定从远程服务器读取日志,不指定该选项时,--host, --password, --port, --protocol,

--socket, 以及--user等选项都被忽略。

--result-file

将输入结果定向到该选项指定的文件中

--short-form

只显式执行的SQL语句,不显式其他附加信息

--socket

本机连接时使用,指定使用的unix的socket文件或windows的命名管道

--start-datetime

指定开始读取的起始日志时间,如--start-datetime="2005-12-25 11:25:56"

--stop-datetime

指定读取结束的日志时间,碰到第一个大于等于该时间的事件为止

--start-position=N

从第一个等于该序号的事件开始读取

--stop-position=N

到第一个等于该序号的事件时结束

--to-last-log

不要在请求的日志文件结束后结束,而要到最后一个日志文件的结束处为止,若mysqlbinlog和mysql服务器在同一台机器,由于mysqlbinlog也会生成二进制文件,所以可能导致死循环,所以通常用于远程主机。

--user

连接远程主机时使用的用户名

--version

打印程序版本并退出

下边是一个二进制文件的打印示例:

# at 4

#070813 14:16:36 server id 1 log_pos

4 Query thread_id=2 exec_time=0 error_code=0

use config_center3;

SET TIMESTAMP=1186985796;

UPDATE t_client_info SET f_sync = 1, f_version=13, f WHERE

f_ip_addr = '192.168.64.49';

上述输出包括如下要素:

l Position

位于文件中的位置,即第一行的(#at 4)和第二行的(log_pos 4),说明该事件记录从文件第4字节开始。

l Timestamp

事件发生的时间戳,即第二行的(#070813 14:16:36)

l Exec_time

事件的执行花费时间

l Error_code

错误码

l Type

事件类型:

类型

名称

描述

00

UNKNOWN_EVENT

This event should never be present in the log.

01

START_EVENT_V3

This indicates the start of a log file written by MySQL 4

or earlier.

02

QUERY_EVENT

The most common type of events. These contain statements

executed on the master.

03

STOP_EVENT

Indicates that master has stopped.

04

ROTATE_EVENT

Written when the master switches to a new log

file.

05

INTVAR_EVENT

Used mainly for AUTO_INCREMENT values and when the

LAST_INSERT_ID() function is used in the statement.

06

LOAD_EVENT

Used for LOAD DATA INFILE in MySQL 3.23.

07

SLAVE_EVENT

Reserved for future use.

08

CREATE_FILE_EVENT

Used for LOAD DATA INFILE statements. This indicates the

start of execution of such a statement. A temporary file is created

on the slave. Used in MySQL 4 only.

09

APPEND_BLOCK_EVENT

Contains data for use in a LOAD DATA INFILE

statement. The data is stored in the temporary file on the

slave.

0a

EXEC_LOAD_EVENT

Used for LOAD DATA INFILE statements. The contents

of the temporary file is stored in the table on the slave. Used in

MySQL 4 only.

0b

DELETE_FILE_EVENT

Rollback of a LOAD DATA INFILE statement. The

temporary file should be deleted on slave.

0c

NEW_LOAD_EVENT

Used for LOAD DATA INFILE in MySQL 4 and

earlier.

0d

RAND_EVENT

Used to send information about random values if the

RAND() function is used in the statement.

0e

USER_VAR_EVENT

Used to replicate user variables.

0f

FORMAT_DESCRIPTION_EVENT

This indicates the start of a log file written by MySQL 5 or

later.

10

XID_EVENT

Event indicating commit of an XA transaction.

11

BEGIN_LOAD_QUERY_EVENT

Used for LOAD DATA INFILE statements in MySQL 5 and

later.

12

EXECUTE_LOAD_QUERY_EVENT

Used for LOAD DATA INFILE statements in MySQL 5 and

later.

13

TABLE_MAP_EVENT

Reserved for future use.

14

WRITE_ROWS_EVENT

Reserved for future use.

15

UPDATE_ROWS_EVENT

Reserved for future use.

16

DELETE_ROWS_EVENT

Reserved for future use.

l Master ID

创建二进制事件的主机服务器ID

l Master Pos

事件在原始二进制文件中的位置

l Flags

目前,有如下标志被使用,其余的保留以便将来使用:

类型

名称

描述

01

LOG_EVENT_BINLOG_IN_USE_F

Log file correctly closed. (Used only in

FORMAT_DESCRIPTION_EVENT.) If this flag is set (if the

flags are, for example, '01 00') in a

FORMAT_DESCRIPTION_EVENT, the log file has not been

properly closed. Most probably this is because of a master crash

(for example, due to power failure).

02

Reserved for future use.

04

LOG_EVENT_THREAD_SPECIFIC_F

Set if the event is dependent on the connection it was executed

in (for example, '04 00'), for example, if the event

uses temporary tables.

08

LOG_EVENT_SUPPRESS_USE_F

Set in some circumstances when the event is not dependent on the

default database.