mysql-逻辑备份恢复(基于position)

备份恢复

备份恢复策略考虑的因素:

1)确定备份的表的存储引擎是事务型还是非事务型 两种不同的存储引擎备份方式在处理数据一致性方面是不太一样的

2)确定使用全备份还是增量备份 

全备优点:备份保持最新备份 恢复的时候可以花费更少的时间 缺点是如果数据量大 将会花费很多的时间 对系统造成较长的时间的压力。 

增量备份相反 只需要备份每天的增量日志 备份时间少 对负载压力小 缺点:恢复的时候需要备份全备份加上次备份到故障前的所有日志,恢复时间长

3)可以考虑采取复制的方法来做异地备份 记住 复制不能代替备份 对数据库的误操作无能为力

4)做定期备份 备份的周期要充分考虑系统可以承受的恢复时间 备份要在系统负载 较小的时候进行

5)确保MYSQL打开log-bin选项 有BINLOG才可以做完整恢复 基于时间点的恢复 基于位置的恢复

6)经常做备份恢复测试 确保备份是有效的 可以恢复的

逻辑备份和恢复:

逻辑备份是将数据库中的数据备份为一个文本文件 备份的文件可以被查看和编辑 用mysqldump来完成逻辑备份

shell > mysqldump [options] db_name [tables] --    备份指定的数据库或者此数据库中的某些表

shell> mysqldump [options] --database DB1 [DB2 DB3 ...]   --备份指定的一个或者多个数据库

shell>mysqldump [options] --all-database  --备份所有数据库

--example:

全备数据库

[root@mysqldb bin]# /mysql/app/mysql/bin/mysqldump -uroot -p -S /mysql/data/3306/mysql.sock --all-databases > alldatabase.sql

备份数据库itpuxdb

mysqldump -uroot -p -S /mysql/data/3306/mysql.sock itpuxdb > itpux1.sql

--备份数据库的表

[root@mysqldb mysql]# mysqldump -uroot -p -S /mysql/data/3306/mysql.sock itpuxdb dd > itpuxdd.sql

--备份所有表为都好分割的文本 备份到/tmp

mysqldump -uroot -p -S /mysql/data/3306/mysql.sock -T /tmp itpuxdb bm --fields-terminated-by ','

完全恢复

mysql -uroot -p dbname < bakfile

--将备份恢复后数据并不完整 还需要将备份后执行的日志进行重做

mysqlbinlog binlog-file | mysql -uroot -pxxxx

--备份恢复的例子

create table emp1 (id int(10),name varchar(10));

insert into emp values(1,'z1');

insert into emp values(2,'z2');

insert into emp values(3,'z3');

insert into emp values(4,'z4');

--先备份

[root@mysqldb tmp]# mysqldump -uroot -p -S /mysql/data/3306/mysql.sock  itpux  > itpux.dmp

继续添加数据

--

insert into emp values(5,'z5');

insert into emp values(6,'z6');

--(truncate表 逻辑删除)

mysql -uroot -p -S /mysql/data/3306/mysql.sock itpux < itpux.dmp

--由于在二进制文件中 包括了建表 插入的记录  所以无法进行 完整的恢复

--基于完全恢复(失败 binlog有其他数据)

[root@mysqldb bin_log]# mysqlbinlog  binlog.000004  | mysql -uroot -p -S /mysql/data/3306/mysql.sock /tmp/itpux.dmp

--具体查看position位置

[root@mysqldb bin]# ./mysqlbinlog  /log/bin_log/binlog.000004 -vv --base64-output=DECODE-ROWS|grep -n itpux

[root@mysqldb bin]# ./mysqlbinlog  /log/bin_log/binlog.000004 --base64-output=DECODE-ROWS -vv |sed -n '205,216p'

[root@mysqldb tmp]# ./mysqlbinlog  -vv --start-position=3308 --stop-position=3476 /log/bin_log/binlog.000004  > /tmp/restore.sql(放在前面)

[root@mysqldb tmp]# mysql -uroot -p -S /mysql/data/3306/mysql.sock itpux < restore,sql

alias mysqlbinlog=' cd /mysql/app/mysql/bin &&./mysqlbinlog'

mysqlbinlog解析文件的时候报错了

--查看mysqlbinlog的文件两个版本不一致

猜你喜欢

转载自blog.csdn.net/ichglauben/article/details/81290569