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.