赞
踩
备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。
本质:导出的是SQL语句文件
优点:不论是什么存储引擎,都可以用mysqldump备成SQL语句
缺点:速度较慢,导入时可能会出现格式不兼容的突发情况,无法做增量备份和累计增量备份。
提供三种级别的备份,表级,库级和全库级
逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库,效率相对较低。
数据一致,服务可用。:如何保证数据一致,在备份的时候进行锁表会自动锁表。锁住之后在备份。
语法:
- 本身为客户端工具:
- 远程备份语法: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
- 本地备份语法: # mysqldump -u用户名 -p密码 数据库名 > 备份文件.sql
-
- _-A, --all-databases_
- 备份所有库
-
- -B, --databases bbs test mysql 备份多个数据库
-
- --no-data,-d
- 不导出任何数据,只导出数据库表结构。
备份表
- 语法: # mysqldump -u root -p1 db1 t1 > /db1.t1.bak
- [root@mysql-server ~]# mkdir /home/back #创建备份目录
- [root@mysql-server ~]# mysqldump -uroot -p'qf123' company employee5 > /home/back/company.employee5.bak
- mysqldump: [Warning] Using a password on the command line interface can be insecure.
- 备份多个表:
- 语法: mysqldump -u root -p1 db1 t1 t2 > /db1.t1_t2.bak
- [root@mysql-server ~]# mysqldump -uroot -p'qf123' company new_t1 new_t2 > /home/back/company.new_t1_t2.bak
备份库
- 备份一个库:相当于将这个库里面的所有表全部备份。
- 语法: # mysqldump -u root -p1 db1 > /db1.bak
- [root@mysql-server ~]# mysqldump -uroot -p'qf123' company > /home/back/company.bak
- 备份多个库(-B):
- 语法:mysqldump -u root -p1 -B db1 db2 db3 > /db123.bak
- [root@mysql-server ~]# mysqldump -uroot -p'qf123' -B company testdb > /home/back/company_testdb.bak
- 备份所有的库:
- 语法:# mysqldump -u root -p1 -A > /alldb.bak
- [root@mysql-server ~]# mysqldump -uroot -p'qf123' -A > /home/back/allbase.bak
恢复数据库和表
为保证数据一致性,应在恢复数据之前停止数据库对外的服务,停止binlog日志 因为binlog使用binlog日志恢复数据时也会产生binlog日志。
恢复库
- 登陆mysql创建一个库
- mysql> create database company;
- 恢复:
- [root@mysql-server ~]# mysql -uroot -p'qf123' company < /home/back/company.bak
恢复表
- 登陆到刚才恢复的库中将其中的一个表删除掉
- mysql> show databases;
- mysql> use company
- mysql> show tables;
- +-------------------+
- | Tables_in_company |
- +-------------------+
- | employee5 |
- | new_t1 |
- | new_t2 |
- +-------------------+
- mysql> drop table employee5;
- 开始恢复:
- mysql> set sql_log_bin=0; #停止binlog日志(可选)
- Query OK, 0 rows affected (0.00 sec)
- mysql> source /home/back/company.employee5.bak; -------加路径和备份的文件
- 恢复方式二:
- # mysql -u root -p1 db1 < db1.t1.bak
- 库名 备份的文件路径
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- 1.备份表结构:
- 语法:mysqldump -uroot -p123456 -d databasename tablename > dump.sql
- [root@mysql-server ~]# mysqldump -uroot -p'qf123' -d company employee5 > /home/back/emp.bak
- 恢复表结构:
- 登陆数据库创建一个库
- mysql> create database t1;
- 语法:# mysql -u root -p1 -D db1 < db1.t1.bak
- [root@mysql-server ~]# mysql -uroot -p'qf123' -D t1 < /home/back/emp.bak
直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本
简单的讲,完整备份就是不管三七二十一,每次都把指定的备份目录完整的复制一遍,不管目录下的文件有没有变化;增量备份就是每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件进行备份;差异备份就是每次都将第一次完整备份以来有变化的文件进行备份。
安装xtrabackup
- 安装xtrabackup
- # wget http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
- # rpm -ivh percona-release-0.1-4.noarch.rpm
- [root@mysql-server yum.repos.d]# vim percona-release.repo
完全备份流程
- 创建备份目录:
- [root@mysql-server ~]# mkdir /xtrabackup/full -p
- 备份:
- [root@mysql-server ~]# innobackupex --user=root --password='123' /xtrabackup/full
-
- 可以查看一下:
- [root@mysql-server ~]# cd /xtrabackup/full/
- [root@mysql-server full]# ls
- 2019-08-20_11-47-49
- =======================================================
- 完全备份恢复流程
- 1. 停止数据库 systemctl stop mysqld&&systemctl stop firewalld&&setenforce 0
- 2. 清理环境
- 3. 重演回滚--> 恢复数据
- 4. 修改权限
- 5. 启动数据库
- 1.关闭数据库:
- [root@mysql-server ~]# systemctl stop mysqld
- [root@mysql-server ~]# rm -rf /var/lib/mysql/*
- [root@mysql-server ~]# rm -rf /var/log/mysqld.log #可选操作
- [root@mysql-server ~]# rm -rf /var/log/mysql-slow/slow.log #可选操作
- 2.恢复之前的验证恢复:
- [root@mysql-server ~]# innobackupex --apply-log /xtrabackup/full/2019-08-20_11-47-49
- 3.确认数据库目录:
- 恢复之前需要确认配置文件内有数据库目录指定,不然xtrabackup不知道恢复到哪里
- # cat /etc/my.cnf
- [mysqld]
- datadir=/var/lib/mysql
- 4.恢复数据:
- [root@mysql-server ~]# innobackupex --copy-back /xtrabackup/full/2019-08-20_11-47-49
- 5.修改权限:
- [root@mysql-server ~]# chown mysql.mysql /var/lib/mysql -R
- 启动数据库:
- [root@mysql-server ~]# systemctl start mysqld
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
增量备份流程
原理:每次备份上一次备份到现在产生的新数据
- 完整备份:周一
- [root@mysql-server ~]# rm -rf /xtrabackup/*
- [root@mysql-server ~]# innobackupex --user=root --password='123' /xtrabackup
- [root@mysql-server ~]# cd /xtrabackup/
- [root@mysql-server xtrabackup]# ls
- 2019-08-20_14-51-35
- [root@mysql-server xtrabackup]# cd 2019-08-20_14-51-35/
- [root@mysql-server 2019-08-20_14-51-35]# ls
- backup-my.cnf ib_buffer_pool mysql sys testdb xtrabackup_info
- company ibdata1 performance_schema test xtrabackup_checkpoints xtrabackup_logfile
-
-
- 增量备份:周二 —— 周三
- 在数据库中插入周二的数据:
- mysql> insert into testdb.t1 values(2); #模拟周二
- [root@mysql-server ~]# innobackupex --user=root --password='123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2019-08-20_14-51-35/
- [root@mysql-server ~]# cd /xtrabackup/
- [root@mysql-server xtrabackup]# ls
- 2019-08-20_14-51-35 2019-08-20_15-04-29 ---相当于周二的增量备份
-
- 在数据库中插入周三的数据:
- mysql> insert into testdb.t1 values(3); #模拟周三
- [root@mysql-server ~]# innobackupex --user=root --password='123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2019-08-20_15-04-29/ #基于前一天的备份为目录
- [root@mysql-server ~]# cd /xtrabackup/
- [root@mysql-server xtrabackup]# ls
- 2019-08-20_14-51-35 2019-08-20_15-04-29 2019-08-20_15-10-56 ---相当于周三的增量备份
-
- 查看一下备份目录:
- [root@mysql-server ~]# ls /xtrabackup/
- 2019-08-20_14-51-35 2019-08-20_15-04-29 2019-08-20_15-10-56
- 全备周一 增量周二 增量周三
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
增量备份恢复流程
1. 停止数据库
2. 清理环境
3. 依次重演回滚redo log--> 恢复数据
4. 修改权限
5. 启动数据库
6. binlog恢复
- [root@mysql-server ~]# systemctl stop mysqld
- [root@mysql-server ~]# rm -rf /var/lib/mysql/*
- 依次重演回滚redo log:
- [root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_14-51-35
- 周二 --- 周三
- [root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_14-51-35 --incremental-dir=/xtrabackup/2019-08-20_15-04-29
- [root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_14-51-35 --incremental-dir=/xtrabackup/2019-08-20_15-10-56/
- 恢复数据:
- [root@mysql-server ~]# innobackupex --copy-back /xtrabackup/2019-08-20_14-51-35/
- 修改权限
- [root@mysql-server ~]# chown -R mysql.mysql /var/lib/mysql
- [root@mysql-server ~]# systemctl start mysqld
- 登陆上去看一下:b
差异备份区别增量备份就是差异备份针对上一次全部备份,增量备份区别上一次增量备份
差异备份恢复流程
1. 停止数据库
2. 清理环境
3. 重演回滚redo log(周一,某次差异)--> 恢复数据
4. 修改权限
5. 启动数据库
6. binlog恢复
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。