1 备份种类(3种)
1)全量备份
全量备份即在某个时间点将该应用的所有数据进行拷贝
2)增量备份
增量备份是指在一次全量备份或上一次增量备份后,备份所有修改或增加的文件,缺点是恢复数据时需要先恢复之前全量备份和增量备份的数据(若该数据丢失,可能导致这次增量恢复失败),并且它们必须沿着从全量备份到依次增量备份的时间顺序逐个反推恢复
3)差异备份
差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。
2.mysqldump备份数据
简介: mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。
1)检查是否有安装mysqldump
mysqldump --help
通常有三种使用 mysqldump 的方法——为了转储一组一个或多个表、一组一个或多个完整数据库或整个 MySQL 服务器——如下所示:
mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases
首先先介绍一下各参数(options)意义
1.登录选项:
-h, –host: 指定连接的服务器名称或者IP(远程连接需选)。
-u, -user:指定用户(必选)
-p:表示要使用密码(必选)
2.备份选项:
-d, –no-data: 只导出表结构,不导出表数据。(-d 数据库名)
-t, –no-create-info: 只导出数据,而不添加CREATE TABLE 语句。(-t 数据库名)
--all-databases:备份所有数据库(保留创建库语句)
--databases db1 db2:备份指定的数据库(保留创建库语句)
--single-transaction:对事务引擎执行热备(该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储 引擎,仅InnoDB。)
--flush-logs:全库导出建议使用,刷新日志即新建一个binlog文件,之后的操作数据的语句将写入这,方便恢复的时候寻找
--master-data=2 该选项要求有RELOAD权限,并且必须启用二进制日志
其中参数–master-data=[0|1|20: 不记录
1:记录为CHANGE MASTER语句
2:记录为注释的CHANGE MASTER语句
–master-data=2 选项将会在输出SQL中记录下完全备份后新日志文件的名称,
用于日后恢复时参考,例如输出的备份SQL文件中含有:
CHANGE MASTER TO MASTER_LOG_FILE=’MySQL-bin.000002′, MASTER_LOG_POS=106;
--quick:在备份大表时指定该选项,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。
2)全量备份
1.备份所有库(在命令行操作,最后的文件需要指定路径)
mysqldump -uroot -p --all-databases --single-transaction --flush-logs --master-data=2 > xxx.sql
2.备份指定数据库
mysqldump -urrot -p --databases testdb --single-transaction --flush-logs --master-data=2 > xxx.sql
3.备份的数据库中有大量数据的表(添加--quick)
mysqldump -uroot -p --databases bigtable --single-transaction --quick --flush-logs --master-data=2 > big.sql
4.只导出数据,不导出表结构
mysqldump -t dbName -u username -p > backup.sql
5.导出表结构和数据
mysqldump -u username -p dbName table > backup.sql
3) 增量备份(拷贝binlog文件)
cp bin_log.000005 /backcup/
3. 恢复数据
1.恢复全备数据,执行
mysql -u root -p < all.sql
2. 恢复增量数据,执行(dbname为数据库名字)
mysql -u root -p dbname < add.sql
使用binlog恢复
# 查询 BINLOG 位置
show VARIABLES like 'datadir';
# 查看 master 正在写入的 BINLOG 信息
show master status\G;
# 查询 BINLOG 的信息
mysqlbinlog -vv mysql-bin.000009 | less
# 查询 BINLOG 的信息
show binlog events in "mysql-bin.000003";
#通过binlog恢复数据(注意binlog中是否从创建库语句开始执行,若是,则需先删除数据库)
mysqlbinlog --start-position=219 --stop-position=578 /var/lib/mysql/mysql-bin.000013 | mysql -u root -p
#通过binlog恢复数据
mysqlbinlog --start-position=1999 --stop-position=2018 --database=db_name mysql-bin.000034 | mysql -u root -p db_name
#导出 BINLOG 日志,用于分析和排查 sql 语句(-v 解释行信息)
mysqlbinlog --base64-output=decode-rows -v
--start-datetime="2021-9-9 17:21:14"
--database dbname
mysql-bin.000034 > /var/local/mysql/binlog.sql
# 通过 BINLOG 导出的 sql 进行恢复。
mysql -u root -p db_name < binlog.sql