备份恢复
备份恢复策略考虑的因素:
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的文件两个版本不一致