备份对象: 数据 配置文件 代码:存储过程,存储函数,触发器 OS相关的配置文件,如crontab及相关脚本等 跟复制相关的配置:二进制日志文件 备份工具: mysqldump:逻辑备份工具 InnoDB热备、MyISAM温备、Aria温备 备份和恢复过程慢 mysqldumper:多线程的mysqldump 难实现差异或增量备份 lvm-snapshot: 接近于热备的工具,因为要先请求全局锁,而后创建快照,并在创建快照完成后释放全局锁 使用cp、tar等工具物理备份,备份与恢复速度快 难以实现增量备份,并且请求全局锁需要等待一段时间,在繁忙的服务器上更慢 select clause into outfile '/path/to/somefile'(备份) load data infile '/path/from/somefile' (恢复) 部分备份工具,不会备份关系定义,仅备份表中的数据 逻辑备份工具,快于mysqldump Innobase:商业备份工具,Innobackup Xtrabackup:开源备份工具 InnoDB热备,增量备份 MyISAM温备,不支持增量 物理备份,速度快 mysqldump:适用于数据量较小的情况(注意备份前要加锁) mysqldump [options] [db_name] [tb_name] 备份单个数据库:mysqldump -u 用户名 -h 主机 -p 数据库 > 备份文件 恢复时,如果目标库不存在,需要事先手动备份 mysql -u 用户名 -h 主机名 -p 数据库名 < 备份文件 备份所有库:mysqldump --all-database > 备份文件 备份指定多个库: mysqldump --databases db1 db2 --lock-all-tables:请求锁定所有表之后再备份,对InnoDB,MyISAM,Aria做温备 --single-transaction:能够对InnoDB存储引擎实现热备 备份代码: --events:备份事件调度器代码 --routines:备份存储过程与存储函数 --triggers:备份触发器 备份时滚动日志 --flush-logs:备份前、请求到锁之后滚动日志 复制时的同步位置标记 --master-data=[0|1|2] 0:不记录 1:记录为change master语句 2、记录为注释的change master语句 备份InnoDB存储引擎的数据库:mysqldump --database 数据库 --single-transaction -flush-logs --master-data=2 > 数据文件 备份MyISAM存储引擎的数据库:mysqldump --database 数据库 --lock-all-tables -flush-logs --master-data=2 > 数据文件 恢复时,查看备份文件中记录的标记位置(--master-data=2参数实现,mysqlbinlog文件中的位置) 关闭其他连接,然后使用mysqlbinlog --start-position=标记位置 --end-position=结束标记 binlog文件 > 恢复文件 关闭binlog日志记录([交互]set session sql_log_bin=0) 执行全量备份脚本及binlog中抽出的数据文件 开启binlog日志记录([交互]set session sql_log_bin=1) 滚动二进制文件:mysqldump flush-logs lvm-snapshot: step1: 锁表,保证数据的一致性。flush table with read lock; step2:滚动日志flush logs; step3:查看master二进制当前的状态,以便slave的复制使用,或者其他的恢复使用。show master status; step4: 为mysql数据目录所在的lvm做快照(-p r只读) lvcreate -s -n sqlbak_snap -L 100M -p r /dev/sqlbak/sqlbck_lv step5: 解锁unlock tables; step6: 挂载快照卷到一个目录下 就可以读取里面的数据。当然也可以mv到其他的目录下用来恢复。 step7: 卸载快照卷。删除快照卷 lvremove /dev/sqlbak/sqlbck_lv