备份与恢复
1.1 备份类型
- 按备份方法划分
- hot backup:在线备份
- cold backup:停止数据库备份
- warm backup:在线备份,但会对数据库操作有影响,例如加全局读锁,保证数据一致性
- 按备份文件内容分:
- 逻辑备份:如备份成sql语句
- 物理备份:完全复制数据库物理文件
1.2 备份注意点
- 备份的一致性:即备份的数据在这一时间点上是一致的
- mysqldump –single-transaction: 备份在一个长事务中完成,保证备份的一致性
- 每个公司根据自己的实际情况,编写备份程序,该程序应该方便设置备份方法及监控备份的结果,可以实时通知数据库管理员
- 对于innodb存储引擎的冷备份,只需要备份数据库的frm文件,共享表空间文件,独立表空间文件重做日志文件,定期备份配置文件
- 注意磁盘空间已满会导致备份失败的情况
1.3 备份工具
mysqldump
mysqldump [args] > file_name --all-databases:备份所有库 --database:备份指定库 --single-transaction:保证备份一致性,只对innodb引擎有效,确保没有其他ddl操作,因为一致读不能隔离ddl操作 --lock-tables:不能锁所有表,主要用在myisam引擎,保证备份一致性,与--single-transaction不能同时使用 --lock-all-tables:锁所有表 --add-drop-database:需要与--all-databases或--databases一起用,在create database之前运行drop database --master-data[=#]:为1,文件中记录change master语句,为2,则把change master语句注释,此选项会自动忽略--lock-table选项,如果没有--single-transaction选项,则会自动使用--lock-all-tables --where=where_condition:导出符合给定条件的数据,可以导出多张表,也可使用select... into outfile导出表 此工具不能备份视图
xtrabackup
- percona公司提供的开源mysql热备份工具,也可以实现增量备份
1.4 二进制日志备份与恢复
保证安全正确记录二进制的推荐配置:
[mysqld] log-bin = mysql-bin sync_binlog = 1 innodb_support_xa = 1
备份二进制日志前,可使用flush logs生产新日志,然后备份之前的日志
恢复二进制日志
mysqlbinlog binlog.0000001 | mysql -p test 恢复单个二进制日志 mysqlbinlog binlog.[0-5]* | mysql -p test 恢复多个二进制文件 要恢复多个二进制日志,应该同时恢复,而不是一个一个恢复 也可以下面这样做,导出为sql,然后在导入数据库 mysqlbing binlog.0000001 > /tmp/test.sql --start-position, --stop-position 指定偏移量恢复 --start-datetime, --stop-datatime 指定时间点进行恢复
1.5 复制
- 复制也可以实现备份的效果
- 复制的原理
- 主服务器记录二进制日志,可通过show master status查看主服务器进程信息
- 从服务器把主服务器的二进制日志复制到自己的relay log中,从服务器有一个io线程,负责读取主服务器的binlog,还有一个sql线程,复制执行relay log,可通过show slave status查看从服务器进程信息
- 从服务器重放relay log