实验材料
一台centos7,mysql数据库3306端口打开
1.物理冷备份与恢复(需要关闭mysql服务)
命令如下
[root@CentOS7-02 /]# systemctl stop mysqld
[root@CentOS7-02 /]# mkdir /backup
[root@CentOS7-02 /]# tar zcf /backup/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data/
恢复数据库
[root@CentOS7-02 /]# mkdir bak
[root@CentOS7-02 /]# mv /usr/local/mysql/data/ /bak/
[root@CentOS7-02 /]# mkdir restort
[root@CentOS7-02 /]# tar zxf /backup/mysql_all-2019-08-01.tar.gz -C restort/
[root@CentOS7-02 /]# mv restort/usr/local/mysql/data/ /usr/local/mysql/
[root@CentOS7-02 /]# systemctl start mysqld
2.mysqldump备份与恢复操作(无需关闭mysql服务)
1)备份库中的部分表
[root@CentOS7-02 dump]# mysqldump -u root -p www xuefei > www-xuefei.sql
2)备份一个或多个完整的库
[root@CentOS7-02 dump]# mysqldump -u root -p --databases www > www.sql
3)备份整个mysql服务器中的库
[root@CentOS7-02 dump]# mysqldump -u root -p --opt --all-databases > all.sql
4)查看备份文件
[root@CentOS7-02 dump]# grep -v “^–” www-xuefei.sql
如果备份文件不在当前路径需要加上路径 后面是刚刚的备份文件
如图
5)恢复数据库
恢复表到指定库
[root@CentOS7-02 dump]# mysql -u root -p test < www-xuefei.sql
恢复指定库
[root@CentOS7-02 dump]# mysql -u root -p < www.sql
增量恢复需要依靠二进制文件实现
需要从上一次完整备份开始到最后一次增量备份之间的所有增量备份依次恢复
,如果中间某次备份数据损坏,将导致数据丢失
1.一般恢复
1)录入样例
2)先进行完全备份
[root@CentOS7-02 ~]# mkdir /mysql_bak
[root@CentOS7-02 ~]# mysql -u root -p client user_infro >/mysql_bak/client_userinfro-$(date +%F).sql
[root@CentOS7-02 ~]# ls /mysql_bak/
client_userinfro-2019-08-06.sql
3)开启日志文件
[root@CentOS7-02 ~]# vim /etc/my.cnf 进去找到 如下配置项
[mysqld]
log-bin=/usr/local/mysql/mysql-bin :添加这句话,保存退出
[root@CentOS7-02 ~]# systemctl restart mysqld
[root@CentOS7-02 ~]# ls -l /usr/local/mysql/mysql-bin*
-rw-rw---- 1 mysql mysql 120 8月 6 09:51 /usr/local/mysql/mysql-bin.000001
-rw-rw---- 1 mysql mysql 34 8月 6 09:51 /usr/local/mysql/mysql-bin.index
刷新日志
4)继续录入新的数据并进行增量备份
[root@CentOS7-02 ~]# mysqladmin -u root -p flush-logs
[root@CentOS7-02 ~]# cp /usr/local/mysql/mysql-bin.000002 /mysql_bak/
5)模拟故障误删除
[root@CentOS7-02 ~]# mysql -u root -p -e
mysql: option ‘-e’ requires an argument
[root@CentOS7-02 ~]# mysql -u root -p -e 'drop table client.user_info;'
Enter password:
[root@CentOS7-02 ~]# mysql -u root -p -e 'select * from client.user_info;'
Enter password:
ERROR 1146 (42S02) at line 1: Table ‘client.user_info’ doesn’t exist :表示表已经没了
6)恢复
先完全恢复,在增量
[root@CentOS7-02 mysql_bak]# mysql -u root -p client < /mysql_bak/client_userinfo-2019-08-06.sql
[root@CentOS7-02 mysql_bak]# mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000002 | mysql -u root -p
2)基于位置恢复
1)误删除和完全恢复
[root@CentOS7-02 mysql_bak]# mysql -u root -p -e 'drop table client.user_info;'
[root@CentOS7-02 mysql_bak]# mysql -u root -p client < /mysql_bak/client_userinfo-2019-08-06.sql
基于位置恢复需要查看二进制日志文件
[root@CentOS7-02 mysql_bak]# mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000002
2)**复操作id为’457之前的全部数据,既不恢复孙七的信息,**这是恢复的时从二进制文件开始到指定id的所有操作
[root@CentOS7-02 mysql_bak]# mysqlbinlog --no-defaults --stop-position=‘457’ /mysql_bak/mysql-bin.000002 |mysql -u root -p
3,复赵六的信息,恢复包括孙七后的所有操作,直到二进制文件最后
[root@CentOS7-02 mysql_bak]# mysql -u root -p -e 'drop table client.user_info;'
[root@CentOS7-02 mysql_bak]# mysql -u root -p client < /mysql_bak/client_userinfo-2019-08-06.sql
[root@CentOS7-02 mysql_bak]# mysqlbinlog --no-defaults --start-position=‘457’ /mysql_bak/mysql-bin.000002 |mysql -u root -p
只是参数改成了 --start-position 意识是开始恢复数据的位置
3.基于时间的恢复
日志文件中id下面会有时间
其他都和基于位置方法一样
1)恢复包括孙六和之前的所有
[root@CentOS7-02 mysql_bak]# mysql -u root -p -e 'drop table client.user_info;'
[root@CentOS7-02 mysql_bak]# mysql -u root -p client < /mysql_bak/client_userinfo-2019-08-06.sql
2)恢复包括孙七后的所有
[root@CentOS7-02 mysql_bak]# mysql -u root -p -e 'drop table client.user_info;'
[root@CentOS7-02 mysql_bak]# mysql -u root -p client < /mysql_bak/client_userinfo-2019-08-06.sql
[root@CentOS7-02 mysql_bak]# mysqlbinlog --no-defaults --start-datetime=‘2019-08-06 10:08:52’ /mysql_bak/mysql-bin.000002 |mysql -u root -p
就是stop变start