【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之增量备份;




你可能感兴趣的:(MySQL系列,-----【备份和恢复】)