mysql备份与恢复 mysqldump+binlog xtrabackup

数据备份的方式:

    物理备份:拷贝存放库和表文件的目录  cp  tar

    逻辑备份:备份创建库和表插入记录时的sql语句

数据备份策略:

    完整备份:备份数据库服务器上的所有库、所有表。

    差异备份:备份自完整备份后,生成的新数据。

    增量备份:备份自上一次备份后,生成的新数据。

完整备份+差异备份 

完整备份+增量备份

mysqldump 做完整备份

    mysqldump  -hser_ip  -uusername  -ppassword  数据名 > 目录/x.sql     

    数据库备份文件以.sql结尾

[root@localhost ~]# mysqldump -hlocalhost -uroot -p20140103 mysql  > /root/mysql.sql

数据库名的表示方式:

    数据库名:备份此数据库里的所有表。

    --all-databases :备份服务器上所有数据库里的所有表。

    数据库名  表名: 备份某个数据库里的某个表。

    -B 数据库名1 数据库名2 数据库名N: 对某几个数据库做备份。

    备份文件名不能重名,否则会用当前备份覆盖上一次备份。

数据恢复:

    mysql  -hser_ip  -uusername  -ppassword  数据名 < 备份文件名


使用mysql的binlog日志实现增量备份

    记录在数据库服务器上执行的使数据发生改变的sql语句

启用binlog日志(二进制日志)

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
log-bin=/binlog/plj-bin.log  指定binlog的目录和文件名

    mysql  用户必须对/binlog目录有w权限

    指定路径的时候如果改路径必须将路径和文件名全写

cd  /var/lib/mysql
localhost-bin.000001
localhost-bin.index

格式:mysqlbinlog  [选项]   binlog文件

使用binlog日志恢复数据

    mysqlbinlog  binlog文件  | mysql  -hlocalhost  -uroot  -p

记录方式:[选项]

偏移量

    --start-position=起始位置

    --stop-position=结束位置

时间点

    --start-datetime= ‘YYYY-mm-dd  HH:MM:SS’

    --stop-datetime= ‘YYYY-mm-dd  HH:MM:SS’

手动生成新的binlog日志

    重启数据库服务(不建议);

    mysql  -hlocalhost  -uroot  -ppassword  -e “flush  logs”

-e  在命令行执行sql语句  

    mysqldump  -hlocalhost  -uroot  -ppassword  --flush-logs  库名 > x.sql

删除binlog日志

    登陆状态下                                                 purge  master  logs  to  ‘binlog文件名’; //把指定的binlog文件前的binlog文件全删掉

    reset  master;   //删除所有的binlog文件

Xtrabackup第三方软件做数据备份

    mysqldump  备份和恢复的时候锁表

    binlog 日志  需要自己查看从哪条记录恢复和恢复到哪

    Xtrabackup开源,能在线热备份,在备份的时候不会锁库和表

主要组件

    Xtrabackup:C程序,支持innodb/xtradb

    innobackupex: 以perl脚本封装xtrabackup,还支持myisam能做完整备份和增量备份

语法格式

    xtrabackup_56  选项

    选项决定命令要执行什么样的操作

选项:

    --backup   执行备份操作

    --target-dir  备份的目标文件夹

    --datadir  备份的原始文件夹(mysql数据库位置)

    --prepare  准备恢复数据

    --incremental-basedir 增量备份时,指定参照的完整备份的路径

    --incremental-dir 准备回复目录时,指定增量备份的路径

用xtrabackup做完整备份(表的存储引擎要是innodb)

只备份表中的数据 不备份表结构 恢复的时候必须保证表是存在的

完整备份

[root@localhost ~]# xtrabackup_56 --datadir=/var/lib/mysql/ --backup --target-dir=/dbbak/first

恢复日志信息

[root@localhost ~]# xtrabackup_56 --prepare --target-dir=/dbbak/first/ --datadir=/var/lib/mysql/

拷贝数据文件

[root@localhost ~]# cp /dbbak/first/db100/a.ibd /var/lib/mysql/db100/a.ibd

用xtrabackup做增量备份与增量恢复

第一次完整备份
[root@localhost ~]# xtrabackup_56 --datadir=/var/lib/mysql/ --backup --target-dir=/dbbak/first/
完整备份后的第一次增量备份
[root@localhost ~]# xtrabackup_56 --backup --datadir=/var/lib/mysql/ --incremental-basedir=/dbbak/first --target-dir=/dbbak/two/
完整备份后的第二次增量备份
[root@localhost ~]# xtrabackup_56 --backup --datadir=/var/lib/mysql/ --incremental-basedir=/dbbak/two --target-dir=/dbbak/three/
依次类推

增量恢复

[root@localhost ~]# xtrabackup_56 --prepare --target-dir=/dbbak/first/
[root@localhost ~]# xtrabackup_56 --prepare --target-dir=/dbbak/first --incremental-dir=/dbbak/two/
[root@localhost ~]# xtrabackup_56 --prepare --target-dir=/dbbak/first --incremental-dir=/dbbak/three/

拷贝数据

[root@localhost ~]# cp /dbbak/first/db200/a.ibd /var/lib/mysql/db200/a.ibd

检查数据是否恢复正常






你可能感兴趣的:(MysqlDump,xtrabackup)