行唐县网站建设,做条形图的网站,怎么在国外网站买东西,做网站之前要先购买服务器吗数据备份的重要性 1.生产环境中#xff0c;数据的安全至关重要 任何数据的丢失都会导致非常严重的后果。
2.数据为什么会丢失 #xff1a;程序操作#xff0c;运算错误#xff0c;磁盘故障#xff0c;不可预期的事件#xff08;地震#xff0c;海啸#xff09;#x… 数据备份的重要性 1.生产环境中数据的安全至关重要 任何数据的丢失都会导致非常严重的后果。
2.数据为什么会丢失 程序操作运算错误磁盘故障不可预期的事件地震海啸人为操作 数据库备份的分类和备份策略 1.物理备份
物理备份对数据库操作系统的物理文件如数据文件、日志文件等的备份。
物理备份方法
冷备份(脱机备份) 是在关闭数据库的时候进行的 热备份(联机备份) 数据库处于运行状态依赖于数据库的日志文件 温备份数据库锁定表格不可写入但可读的状态下进行备份操作
2逻辑备份
逻辑备份对数据库逻辑组件如表等数据库对象的备份。
即以sql语句的形式把库、表结构、表数据保存下来。 数据库的备份策略
完全备份全量备份每次对数据库进行完整的备份。差异备份备份自从上次完全备份之后被修改过的文件。增量备份只有在上次完全备份或者增量备份后被修改的文件才会被备份。 如何进行物理备份 systemctl stop mysqld
#关闭MySQL1的服务器。因为关闭服务可以避免新的数据插入或者数据覆盖cd usr/local/mysql/cd datacd kgc安装软件包tar Jcvf /opt/mysql_all_$(data %F).tar.xz /usr/local/mysql/data/
#打包data的内容lstar -Jxvf mysql_all_
#解压文件cd usr/local/mysql/rm -rf data
#删库cd /opt/cd usr/local/mysqlcp -a data/ /usr/local/mysql
#保留权限复制systemctl restart mysqld
#重启mysql服务到另外一台库cd /usr/local/mysql/cp -a data/ /opt/
#MySQL2自己先做一个文件备份scp -r root20.0.0.60:/opt/usr/local/mysql/data /opt/
#远程复制到MySQL2cp -a data/ /usr/local/mysql/data
#保留权限复制到MySQL2systemctl restart mysqld
#重启服务登录一下chown -R mysel.mysql kgc kgc1
#递归给两个库更改归属
#看到无法阅读就说明没有给权限的问题 如何把本地数据库迁移上云 1. Xshell与公网IP相连
然后在云服务上进行编译安装
将本地服务器当中需要备份的文件通过sz rz拖入云服务器中 热备份当中的逻辑备份 用到mysql自带的工具 mysqldump
备份命令
备份单个mysqldump -u root -p123456 --databases test /opt/zzr.sql备份多个库mysqldump -u root -p 123456 --databases test test1 /opt/test1.sql备份所有库mysqldump -u root -p123456 -all-databases /opt/test3.sql mysqldump -u root -p --databases kgc /opt/kgc.sqlcd /usr/local/mysql/data/
lsrm -rf kgc
//删库mysql -u root -p /opt/kgc.sql
#会直接报错库会回来但是kgc库里面的表结构消失了。只能使用逻辑删除在命令行删除mysql -u root -p123456 -e show databases;
#-e表示连接指定MySQL之后执行完命令后就自动退出
#进入MySQL执行一次show databases命令后就退出mysql -u root -p -e drop database kgc;
#需要手动数据密码mysql -u root -p /opt/kgc.sql
#手动输入密码对多个库一次性备份
先备份多个库
mysqldump -u root -p --databases kgc kgc1 /opt/kgc_all.sql
#手动输入密码。保存多个库mysql -u root -p -e drop database kgc;
mysql -u root -p -e drop database kgc1;
#手动输入密码。模拟删除库mysqldump -u root -p /opt/kgc_all.sql
#手动输入密码。一次性恢复多个库对全部库一次性备份
mysqldump -r root -p --all-databases /opt/all_database.sql
mysql -u root -p123456 -e show databases;
进入mysql之后自动执行命令结束后自动退出
-e指定连接mysql之后执行完命令自动退出
恢复命令
mysql -u root -p /opt/test.sql 如何只恢复数据表 恢复单个表
先备份
mysqldump -u root -p kgc info1 /opt/kgc_info1.sql
cd /opt
ls
mysql -u root -p -e drop table kgc.info1;
指定库名恢复
mysql -u -root -p kgc /opt/kgc_info1.sqlmysqldump -u root -p kgc info1 info2 /opt/kgc_info1-2.sql
//重定向备份mysql -u root -p -e drop table kgc.info1;
mysql -u root -p -e drop table kgc.info2;
//删表mysql -u root -p kgc /opt/kgc_info1-2.sql
//恢复MySQL1全部数据库的逻辑备份文件恢复到MySQL2。scp root20.0.0.110:/opt/all_database.sql /opt/mysql -u root -p all_database.sql
#用sql语句的方式热备份直接转换。物理冷备份和物理热备份
特点 简单
数据量 占用备份空间较大
mysqldump 这是MySQL自带的备份文件的命令
特点方便简单但是只能基于逻辑上的表结构和表数据恢复。物理删除之后再用逻辑恢复会报错。
也可以作为数据迁移必然会占用更大空间。比较物理备份相对来说占的空间要小得多。 增量备份 mysqldump支持增量备份
没有重复数据备份量小时间短。
mysqldump增量备份恢复表数据之间表会锁定
缺点备份时锁表必然会影响业务超过10G耗时会比较长导致服务不可用
1.mysql提供的二进制日志间接的实现增量备份
二进制文件怎么来
vim /etc/my.cnfserver-id1
log-binmysql-bin
binlog_formstMIXED
wq
MySQL二进制日志记录格式有三种
1、 STATEMNET基于sql语句。是记录修改的sql语句在高并发情况下记录sql语句时的顺序可能会出错。数据恢复可能会导致丢失或者误差。效率比较高但是不适合高并发场景。
2、 ROW基于行。会精准记录每一行的数据准确率高但是回复的时效率低。
3、 MIXED混合模式。既可以根据语句也可也根据行。在正常情况下使用STATEMNET一旦发生高并发会智能的切换到ROW模式虽然效率低但是一定不会出错。
表数据设置多一点select * from info1;
#查看数据是否写入cd /usr/local/mysql/data/
#会生成了两个文件
mysql -bin.index
mysql-bin.000001
表内写入信息后再查看日志文件 mysql-bin.000001
mysqlbinlog --no-defaults --base64-outputdecode-rows -v mysql-bin.000001
#查看新插入表的日志mysqladmin -u root -p flush-logs
#刷新日志.
#此时data目录下会生成一个新的日志文件mysql-bin.000002mysqlbinlog --no-defaults --base64-outputdecode-rows -v mysql-bin.000002
#刷新之后更新的内容会更新在2里面这就是断点如何恢复
mysqlbinlog --no-defaults mysql-bin00000.1 | mysql -u root -p
#增量备份恢复之前表内插入的数据。这个叫断点恢复。此时再对表插入信息。此时新插入的数据再000002里面。只要没有刷新日志就不会出现断点。会先插入再删除。
mysqlbinlog --no-defaults --base64-outputdecode-rows -v mysql-bin.000002如果需要备份新的数据之前需要再刷新一次。
mysqladmin -u root -p flush-logs
#刷新日志.重新在表内插入数据
此时断点之后数据都在新生成的000003里面
mysqlbinlog --no-defaults --base64-outputdecode-rows -v mysql-bin.000002mysqladmin -u root -p flush-logs
#刷新日志断点再删除表内数据这时候删除的操作会保存到000004里面mysqlbinlog --no-defaults --base64-outdecode-rows -v mysql-bin.000003
位置恢复
三种方式
从某一个点开始恢复到最后
从开头恢复到某一个位置
从指定点开始------指定的结束点
删除表内数据测试
基于位置点进行恢复
1、 从某一点开始恢复到最后
格式
mysqlbinlog --no-defaults --start-position位置点 文件名 | mysql -u root -p2、 从开头一直恢复到某个位置
格式
mysqlbinlog --no-defaults --stop-position位置点 文件名 | mysql -u root -p3、 从指定点开始恢复到指定的结束点
格式
mysqlbinlog --no-defaults --start-position位置点 --stop-position位置点 文件名 | mysql -u root -pmysqladmin -u root -p flush-logs
#刷新日志断点删除表内数据此时数据再000005上mysqlbinlog --no-defaults --start-position6171 mysql-bin.000004 | mysql -u root -p查看位置点
#at后面的数字就是位置点。要选择commit后面的位置点
mysqlbinlog --no-defaults --base64-outdecode-rows -v mysql-bin.000004
#查看000004日志内的位置点从开头一直恢复到某个位置
mysqlbinlog --no-defaults --stop-position6106 mysql-bin.000004 | mysql -u root -p
#从头恢复到指定点范围恢复
mysqlbinlog --no-defaults --start-position6106 --stop-position6748 mysql-bin.000004 | mysql -u root -p
#指定位置到指定位置恢复 基于时间恢复
1.从某个时间点开始
mysqlbinlog --no-defaults --start-datetime时间点 文件 | mysql -u root -p
2.从开头到指定的结尾时间点
mysqlbinlog --no-defaults --stop-datetime时间点 文件 | mysql -u root -p
3.指定时间范围
mysqlbinlog --no-defaults --stop-datetime时间点 文件 --stop-datetime时间点 文件 |mysql -u root -p
时间格式2023-11-06 11:44:32
基于时间点恢复
YYY-MM-DD 11:11:11 时间格式要按照标准格式来写
1、 从某个时间点开始
格式mysqlbinlog --no-defaults --start-datettime时间点 文件名 | mysql -u root -p2、 从开头到指定结尾时间点
格式mysqlbinlog --no-defaults --stop-datettime时间点 文件名 | mysql -u root -p3、 指定时间范围
格式mysqlbinlog --no-defaults --start-datettime时间点 --stop-datettime时间点 文件名 | mysql -u root -p从某个时间点开始
mysqlbinlog --no-defaults --start-datetime2023-11-06 11:44:32 mysql-bin.000004 | mysql -u root -p
#从某个时间点开始从开头到指定结尾时间点
mysqlbinlog --no-defaults --stop-datetime2023-11-06 11:44:32 mysql-bin.000004 | mysql -u root -p
#从头开始到某个时间结束指定时间范围
mysqlbinlog --no-defaults --start-datetime2023-11-06 11:44:37 --stop-datetime2023-11-06 11:49:05 mysql-bin.000004 | mysql -u root -p
#从某个时间开始到某个时间结束
日志存放
MySQL 的日志默认保存位置为 /usr/local/mysql/datavim /etc/my.cnf
[mysqld]
##错误日志用来记录当MySQL启动、停止或运行时发生的错误信息默认已开启
log-error/usr/local/mysql/data/mysql_error.log #指定日志的保存位置和文件名##通用查询日志用来记录MySQL的所有连接和语句默认是关闭的
general_logON
general_log_file/usr/local/mysql/data/mysql_general.log##二进制日志(binlog)用来记录所有更新了数据或者已经潜在更新了数据的语句记录了数据的更改可用于数据恢复默认已开启
log-binmysql-bin #也可以 log_binmysql-bin##慢查询日志用来记录所有执行时间超过long_query_time秒的语句可以找到哪些查询语句执行时间长
以便于优化默认是关闭的
slow_query_logON
slow_query_log_file/usr/local/mysql/data/mysql_slow_query.log
long_query_time5 #设置超过5秒执行的语句被记录缺省时为10秒
查询同用日志访问情况
mysql -u root -p
show variables like general%; #查看通用查询日志是否开启show variables like log_bin%; #查看二进制日志是否开启show variables like %slow%; #查看慢查询日功能是否开启
show variables like long_query_time; #查看慢查询时间设置set global slow_query_logON; #在数据库中设置开启慢查询的方法 总结 在生产中通过binlog进行增量恢复是非常好用的方法。
我们只需要对binlog文件进行备份随时可以进行备份和恢复。只能是root用户来进行操作
除非有特殊需要一般不打额外断点具体根据需求来一般是通过脚本按月来设置断点。