数据库备份类型:
物理与逻辑角度:
物理备份:冷备份(数据库关闭)、热备份、温备份(数据库锁定)
逻辑备份:逻辑组件备份
备份策略角度:
完全备份:完整数据库,速度慢
差异备份:基于完全备份,恢复:需要完全备份和最近一次差异备份。
增量备份:基于完全备份,恢复:需要完全备份和每次的增量备份。
环境准备:
[root@localhost mysql]# source /etc/profile
冷备份:
[root@localhost mysql]# systemctl stop mysqld ##关闭mysql
[root@localhost mysql]# tar zcvf /mysql.bak-$(date +%F).tar.gz /usr/local/mysql/data ##复制备份数据
[root@localhost mysql]# systemctl start mysqld ##启动数据库
冷恢复:
[root@localhost mysql]# systemctl stop mysqld ##关闭mysql
[root@localhost mysql]#tar zxf /data-....tar.gz -C /usr/local/mysql/ ##恢复数据
[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
恢复所有库
[root@localhost mysql]# mysql -u root -p < /all-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中数据
[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