【MySQL】MySQL之备份
物理备份
物理备份的原理是基于文件的拷贝,属于纯I/O型的备份方案。这种备份比较适合大型、重要、出现故障时需要快速恢复的场景,最大优点是备份和恢复的速度更快。
物理备份又分为冷备份和热备份。
冷备份(脱机备份)
冷备份又称为脱机备份,是指在数据库服务停止运行时进行的备份。其实就是停掉数据库服务,cp数据文件的方法。进行备份的操作是:停掉MySQL服务,在操作系统级别备份MySQL的数据文件和日志文件到备份目录。
热备份(联机备份)
热备份又称为联机备份,是指在数据库服务运行期间执行的备份操作。其优点在于,备份执行过程中不会影响其他客户端访问MySQL服务,其他会话仍能正常读取数据。在MySQL中,对于不同的存储引擎,热备份方法也有所不同,下面主要介绍MyISAMySQL和InnoDB两种常用的存储引擎的热备方法。
1、MyISAM存储引擎
MyISAM存储引擎的热备份本质是将要备份的表加读锁,然后在cp数据文件到备份目录,常用以下两种方法:
- 使用mysqlhotcopy工具;
- 手工锁表cp:首先数据库中所有表加读锁flush tables for read,然后cp数据到备份目录。
2、InnoDB存储引擎
可以用以下方法进行备份:
- ibbackup;
- Xtrabackup;
逻辑备份
MySQL数据库的逻辑备份保存的是数据库逻辑结构(create database、create table语句)以及其所存储的数据(转换成insert语句或数据文本)。该方式最大的优点是灵活,缺点是执行恢复时的性能较差,综合来看,逻辑备份比较适合小型的、便于在其他服务器进行恢复的场景。可以通过以下方法实现:
- mysqldump命令:可参考:MySQL逻辑备份之MySQLDump
- select...into outfile ...:可参考:MySQL之导入和导出
全量备份
全量备份指的是备份MySQL数据库中的所有数据,可通过冷备或热备实现。
增量备份
MySQL中的增量备份必须借助Binlog实现,也就是说,必须在Mysql服务启动时指定--log-bin参数(也可在my.inf指定),Binlog是二进制日志,无法直接打开,可通过专用工具mysqlbinlog查看其内容。
1、查看Binlog参数;
mysql> select version();
+------------+
| version() |
+------------+
| 5.7.21-log |
+------------+
1 row in set (0.01 sec)
mysql> show variables like '%log_bin%' ;
+---------------------------------+-----------------------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------------------+
| log_bin | ON |
| log_bin_basename | /usr/local/mysql/binlog/mysql-bin |
| log_bin_index | /usr/local/mysql/binlog/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-----------------------------------------+
6 rows in set (0.00 sec)
mysql>
2、以逻辑方式创建完整备份;
mysql> system mysqldump -uroot -p -A -R -x --default-character-set=utf8 | gzip > /usr/local/mysql/backup/whole_db_bak_`date +%F`.sql.gz
Enter password:
mysql> system ls -l /usr/local/mysql/backup/
total 208
-rw-r--r--. 1 root root 212685 Mar 14 16:36 whole_db_bak_2018-03-14.sql.gz
mysql>
注:也可使用脱机备份进行数据库的全备。
3、将全备后的Binlog定期备份至指定目录即完成了MySQL之增量备份;