数据备份的方式:
物理备份:拷贝存放库和表文件的目录 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
检查数据是否恢复正常