简单介绍
备份类型 | 备份方式 | |
热备份:备份期间不需服务停机,业务不受影响; 温备份:备份期间仅允许读的请求; 冷备份:备份期间需要关闭Mysql服务或读写请求都不受影响; |
完全备份:full backup备份全部数据集;增量备份:incrementalbackup 上次完全备份或增量备份以来改变的数据;差异备份:differentialbackup 上次完全备份以来改变的数据;完全+增量备份方式恢复用到的备份文件:完全备份+增量备份+二进制文件; 完全+差异备份方式恢复用到的备份文件:完全备份+增量备份+二进制文件; |
|
逻辑备份
优点 |
缺点 | |
备份与恢复数据比较简单; InnoDB与MyISAM的物理备份容易跨平台、操作系统和Mysql版本; 恢复速度比较快,不需要重新构建索引; |
InnoDB的原始文件会比逻辑备份大得多; 物理备份不是总可以跨平台、操作系统及Mysql版本; 文件名大小写敏感和浮点格式有可能会有问题 |
|
备份对象:
数据文件、配置文件、代码:存储过程,存储函数、触发器等、二进制日志、事务日志、服务器配置、管理脚本、任务计划等。
Mysqldump增量备份
使用Mysqldump备份工具实现完全备份,并结合二进制日志实现增量备份。
特点:逻辑备份工具、支持InnoDB热备份、MyISAM温备份;备份与恢复较慢
一、备份数据库
mysqldump -uroot -p123.com --lock-all-tables --flush-logs --databases test > /mysqlbackup/test_`date +%F`.sql --lock-all-tables:备份时为所有表请求加锁 --flush-log:备份之前刷新日志
二、备份二进制文件
在test库中创建一个表,增加数据,模拟增量备份,并查看当前二进制日志位置。
cp /usr/local/mysql/data/mysqld-bin.00000* /mysqlbackup
mysql> create table abc (number INT(11), name varchar(100)); mysql> show master status; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | mysqld-bin.000004 | 221 | | | +-------------------+----------+--------------+------------------+
三、查看二进制文件和完整备份后LOG_POS值在什么位置
less /mysqlbackup/test_2013-09-29.sql #前几行可以看到在106 -- Position to start replication or point-in-time recovery from -- CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000005', MASTER_LOG_POS=106;
四、二进制增量备份
1>.完整备份后到现在备份:
mysqlbinlog --start-position=106 /var/lib/mysql/mysqld-bin/mysql/mysqld-bin.000005 > /mysqlbackup/test_incremental.sql --start-position:从哪个位置开始导出二进制日志 --stop-position:从哪个位置结束,到末尾可以不指定
2>.向数据库添加一条记录,然后删除数据库,再恢复到当前数据
mysql>create table abd (number INT(1),name varchar(10)); mysql> show master status; #查看二进制所在位置 +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | mysqld-bin.000005 | 527 | | | +-------------------+----------+--------------+------------------+
五、恢复数据到当前数据,需要恢复完整备份+增量备份+增量备份后删除之前的二进制文件
mysqlbinlog /var/lib/mysql/mysqld-bin.000005 #查看二进制,看在什么时候做的,文件最后下面看出在446 # at 446 #130929 11:04:16 server id 1 end_log_pos 527 Query thread_id=10 exec_time=0 error_code=0 SET TIMESTAMP=1380467056/*!*/; drop database test /*!*/;
六、导出之前删除数据库至增量备份后的二进制文件
mysqlbinlog --start-position=220 --stop-position=446 /var/lib/mysql/mysqld-bin.000005 > /mysqlbackup/test_446.sql mysql> source/backupn/test_2013-09-06.sql #恢复完整备份 mysql> source/backup/test_incremental.sql #恢复增量备份 mysql> source/backup/test_446.sql #恢复增量后至删除前的数据 mysql> use test; mysql> show tables;查看数据恢复成功!
Mylvmbackup快速完整备份
mylvmbackup 是一个工具,用于快速创建完整的物理备份MySQL服务器的数据文件,备份数据时,将锁定 MySQL 所有的表,并将缓存中数据写到磁盘,然后执行 LVM 快照后解锁。
使用LVM逻辑卷快照功能实现几乎热血备份的完全备份,并结合二进制日志实现增量备份。
特点:几乎接近于热备份、物理备份、备份与恢复较快。
必须mysql数据库存放目录是LVM卷下,如果要做增量备份,bin-log日志也要在LVM卷下,而且LVM卷要有空间给快照备份。
修改mysql和bin-log日志位置:
vi /etc/my.cnf datadir=/myvg/data bin-log=/myvg/binlog/mysqld-bin
mysql有以下几种日志:
错误日志: -log-err
查询日志: -log
慢查询日志: -log-slow-queries
更新日志: -log-update
二进制日志: -log-bin
一、创建LVM卷
1>.创建物理卷 pvcreate /dev/sdb 2>.创建卷组 vgcreate myvg /dev/sdb 3>.创建逻辑卷 lvcreate -n mylv -L 19G myvg 4>.格式化文件系统 mkfs.ext4 /dev/myvg/mylv 5>.挂载使用 mount /dev/myvg/mylv/ /data
二、安装使用Mylvmbackup
wget http://www.lenzg.net/mylvmbackup/mylvmbackup-0.14-0.noarch.rpm yum install -y perl-TimeDate perl-Config-IniFiles perl-DBD-MySQL #安装依赖包 rpm -ivh mylvmbackup-0.14-0.noarch.rpm
1、修改主配置文件
vi /etc/mylvmbackup.conf [mysql] user=root password=123.com host=localhost port=3306 socket=/tmp/mysql.sock mycnf=/etc/my.cnf [lvm] vgname=myvg #卷组的名字 lvname=mylv #逻辑卷的名字 lvsize=5G #备份时创建的snapshot的大小 [fs] mountdir=/opt/snap_mnt #snapshot的mount位置 backupdir=/backup #备份打包后的存放位置 relpath=mysqldata #如果只是想备份逻辑卷下的某个目录的话,则要指出来 [tools] lvcreate=/usr/sbin/lvcreate lvremove=/usr/sbin/lvremove mount=/bin/mount tar=/bin/tar umount=/bin/umount [misc] prefix=backup #备份打包文件的命名前缀 suffix=_mysql #定义备份文件名后缀
2、备份数据库并验证备文件
[root@202 ~]# mylvmbackup 20130906 11:55:33 Info: Running: lvremove -f /dev/myvg/mysql_snap Logical volume "mysql_snap"successfully removed 20130906 11:55:34 Info: DONE: Removing snapshot 出现以上信息表示备份成功,最后删除快照卷! [root@202 ~]# ls /mysqlbackup/ backup-201309029_115532_mysql.tar.gz
完整备份成功!