理论知识:所有的备份都放在非数据库本地,建议多备份副本。冗余: 数据有多份冗余,但不等备份,只能防止机械故障还来的数据丢失,例如主备模式、数据库集群
备份考虑的因素:
数据的一致性
服务的可用性
分类
逻辑备份:备份建表,建库,插入等操作执行SQL语句
物理备份:直接复制数据库文件,适用于大型数据库环境
备份方式分类:
完全备份
增量备份:节约空间磁盘占用量少
差异备份:想恢复哪一天就恢复哪一天
最简单的方法可以是用物理备份:可以使用tar cf 打包压缩命令 恢复时解压即可
1 [root@localhost mysql]# cd /var/lib/mysql
2 [root@localhost mysql]# ls
auto.cnf ib_logfile1 my1log.000006 my1log.000014 mysql.sock.lock
ca-key.pem ibtmp1 my1log.000007 my1log.000015 performance_schema
ca.pem iii my1log.000008 my1log.000016 private_key.pem
client-cert.pem my1log.000001 my1log.000009 my1log.000017 public_key.pem
client-key.pem my1log.000002 my1log.000010 my1log.000018 server-cert.pem
ib_buffer_pool my1log.000003 my1log.000011 my1log.index server-key.pem
ibdata1 my1log.000004 my1log.000012 mysql sys
ib_logfile0 my1log.000005 my1log.000013 mysql.sock uuu
3 [root@localhost mysql]# tar cf /opt/mysql.tar.gz /var/lib/mysql/*
4 [root@localhost mysql]# ll -h /opt/mysql.tar.gz
-rw-r--r--. 1 root root 137M 8月 15 19:43 /opt/mysql.tar.gz
注意若有配置文件有参数修改需要注释掉然或删掉后重启服务,在重新加载在恢复参数 。
模拟数据丢失:
[root@localhost mysql]# systemctl stop mysqld 停止服务
[root@localhost mysql]# rm -rf /var/lib/mysql* 删除数据
[root@localhost mysql]# rm -rf /var/log/mysqld.log 删除数据
[root@localhost mysql]# systemctl start mysqld 重启服务
[root@localhost mysql]# cat /var/log/mysqld.log |grep password 重新查找数据库密码
以上操作可以得到一个全新的数据库,在使用我们打包的备份的数据文件,解压数据库就会恢复。
binlog日志备份:
开启了binlog日志等同于开启了备份,他是数据自带的系统备份。
如何开启binglog日志:去配置文件:/etc/my.cnf 尾部添加参数
log-bin=mybinlog
server_id=1
重启服务systemctl restart mysql
这样就开启binlog日志备份了
如何查看binlog日志存放 ls /var/lib/mysql
查看日志情况:mysqlbinlog /var/lib/mysql/mybinlog.00001
可以查看到我们创建库或表的记录过程
在库中查看命令 :show binlog events;
如何恢复: mysqlbinlog --start-position=154 --stop-position=291/var/lib/mysql/mylog.000001 | mysql -u root -p密码 按字段恢复
第二种:按时间段恢复 :mysqlbinlog --start-datetime='2023-8-15 21:12:47' --stop-datetime='2023-8-15 23:16:55' /var/lib/mysql/mylog.000001 | mysql -u root -p密码
恢复8月15号21点到23点 binlog存放位置 + 数据库用户密码 就可恢复备份。
mysqldump备份
mysqldump 可以进行单个库,表,多个库表的备份。
语法格式:备份:mysqldump -u root -p密码 qf(库名) > qf.sql 对qf这个库进行备份
验证删除qf 库
恢复:mysql -u root -p密码 qf < qf.sql (数据的导入)
备份一个表:mysqldump -u root -p密码 qf t1 > qft1.sql
备份多个库:mysqldump -u root -p密码 -B 库名 库名 > aa.sql -A代表所有库
恢复多个库 :mysql -u root -p密码 -D 库名 库名 < aa.sql
注意:为了保证数据一致性 应在恢复时停止对外服务 停止 binlog日志 语法格式:set sql_log_bin=0; 1代表开启 。