数据库备份类型:
物理与逻辑角度:
物理备份:冷备份(数据库关闭)、热备份、温备份(数据库锁定)
逻辑备份:逻辑组件备份
备份策略角度:
完全备份:完整数据库,速度慢
差异备份:基于完全备份,恢复:需要完全备份和最近一次差异备份。
增量备份:基于完全备份,恢复:需要完全备份和每次的增量备份。
环境准备:
[root@localhost
mysql]# source /etc/profile
冷备份:
[root@localhost
mysql]# systemctl stop mysqld
[root@localhost
mysql]# tar zcvf /mysql.bak-$(date +%F).tar.gz
/usr/local/mysql/data
[root@localhost
mysql]# systemctl start mysqld
热备份:
完全备份:mysqldump
备份mysql库中的user表
[root@localhost
mysql]# mysqldump -u root -p mysql user > /mysql-user.sql
备份mysql库
[root@localhost
mysql]# mysqldump -u root -p --databases mysql > /mysql.sql
备份所有的库
[root@localhost
mysql]# mysqldump -u root -p --all-databases > /all-mysql.sql
完全恢复:
恢复mysql库中的表
[root@localhost mysql]# mysql -u root -p mysql < /mysql-user.sql
恢复库
[root@localhost mysql]# mysql -u root -p < /mysql.sql
增量备份:
1、 开启二进制日志
[root@localhost
mysql]# vim /etc/my.cnf
log_bin=/usr/local/mysql/mysql-bin //第15行
[root@localhost
mysql]# systemctl restart mysqld
[root@localhost
mysql]# ls /usr/local/mysql //查看开启的日志
2、 准备数据
[root@localhost mysql]# mysql -u root -p
mysql> show databases;
mysql> create database client;
mysql> use client;
mysql> create table aaa(aa char(20) not null,bb char(10)
not null,cc char(5),dd char(10));
mysql> insert into aaa
values(‘111111’,‘zhangsan’,‘man’,‘10’);
mysql> insert into aaa
values(‘222222’,‘lisi’,‘man’,‘12’);
mysql> select * from client.aaa;
mysql> exit
先进行一次完全备份:
[root@localhost mysql]# mkdir /mysql_bak
[root@localhost mysql]# mysqldump
-u root -p client aaa >/mysql_bak/aaa-$(date +%F).sql
[root@localhost mysql]# ls
/mysql_bak/
[root@localhost mysql]# mysqladmin
-u root -p flush-logs //刷新日志,生成新的日志文件
继续录入新的数据并进行增量备份
[root@localhost mysql]# mysql -u root -p
mysql> use client;
mysql> insert into aaa
values(‘333333’,‘wangwu’,‘man’,‘18’);
mysql> insert into aaa
values(‘444444’,‘zhaoliu’,‘man’,‘20’);
mysql> select * from aaa;
mysql> exit
[root@localhost mysql]# mysqladmin -u root -p flush-logs
[root@localhost mysql]# ls
[root@localhost mysql]# cp
mysql-bin.000001 /mysql_bak/
[root@localhost mysql]# cp
mysql-bin.000002 /mysql_bak/
[root@localhost mysql]# ls
/mysql_bak/
模拟误删除aaa表
[root@localhost mysql]# mysql
-u root -p -e “drop table client.aaa;”
[root@localhost mysql]# mysql
-u root -p -e “select * from
client.aaa;”
恢复操作
[root@localhost mysql]# mysql -u root -p client <
/mysql_bak/aaa-2019-03-09.sql //恢复完全备份
[root@localhost mysql]# mysql -u root -p -e “select * from client.aaa;”
//查看aaa中数据
69
[root@localhost mysql]# mysqlbinlog --no-defaults
/mysql_bak/mysql-bin.000002 |mysql -u root -p //恢复增量备份
[root@localhost mysql]# mysql -u root -p -e “select * from client.aaa;”
基于位置和时间的恢复
[root@localhost mysql]# mysqlbinlog --no-defaults
/mysql_bak/mysql-bin.000002