MySQL 的物理备份、逻辑备份、增量备份
物理备份 ,
冷备 cp 、tar
首先需要两台PC: mysql 121.40.25.207
mysql02 47.98.104.114
( mysql 主机有mysql服务,且已有库表等数据,mysql02 为全新的主机。)
1、mysql主机操作步骤:
查看数据库目录:
ls /var/lib/mysql
拷贝数据库目录:
cp -r /var/lib/mysql /root/mysql.bak
查看备份的数据库目录:
ls /root/mysql.bak
压缩数据库目录进行备份:
tar -zcf /root/mysql.tar.gz /var/lib/mysql/*
查看备份的数据库目录压缩包:
ls /root
将主机1 的数据库目录传至主机2上:
scp -r /root/mysql.bak root@47.98.104.114:/opt/
2、mysql02主机操作步骤:
查看MySQL数据库端口是否启动:
netstat -lntup | grep 3306
如果在运行中,需先暂停数据库服务:
systemctl stop mysqld
删除数据库服务:
rm -rf /var/lib/mysql
将SCP过来的数据拷贝至/var/lib/mysql路径下:
cp -r /opt/mysql.bak/ /var/lib/mysql
查看拷贝后的目录:
ls -l /var/lib/mysql
更改属主属组,将root改为mysql:
chown -R mysql:mysql /var/lib/mysql
再次查看,主要确认更改后的属主属组是否正确:
ls -l /var/lib/mysql
查看MySQL数据库端口是否启动:(此时应该已启动)
netstat -lntup | grep 3306
登录数据库:
mysql -uroot -p
(此时加载的是主机mysql拷贝过来的授权库,则主机mysql管理员信息就记录在主机mysql的数据库中mysql库中的user表里, 所以此时密码应该输入的是主机mysql管理员的密码进行登录)
查看数据库所有库,发现与主机mysql的数据是一致的:
show databases;
热备 Xtrabackup
使用这个工具可以实现物理全备及 增量备份.
逻辑备份 mysqldump
中小企业全量备份策略的首选,备份策略一般是每日进行全量备份,备份会选择在流量低谷时执行,备份时可以选择锁表或者采用事务方式备份。
使用软件自带的备份程序(备份命令)对数据做备份,在执行备份命令时,会根据已有的数据生成对应的命令,把命令存放到指定的备份文件里。恢复时,执行备份文件里的命令恢复数据。
数据备份策略:
完全备份 : 备份所有数据
增量备份 : 备份上次备份后,所有新产生的数据
差异备份 : 备份完全备份后,所有新产生的数据
1、全量备份:
备份的格式:mysqldump -uroot -p 密码 库名 > 目录/xxx.sql
备份单个库:
数据库名
备份所有库:
-all-databases 或 -a
备份单张表:
数据库名 表名
备份多个库:
-b 数据库1 数据库2
恢复的格式: mysql -uroot -p 密码 库名 < 目录/xxx.sql
例如:
首先建立一个目录用来存放备份数据:
mkdir /mybak
其次,进行复制:
mysqldump -uroot -p'admin@123' -A >/mybak/alldb.sql
mysqldump -uroot -p'admin@123' l1 >/mybak/l1.sql
mysqldump -uroot -p'admin@123' l1 t2 >/mybak/l1_t2.sql
mysqldump -uroot -p'admin@123' -B l1 l2 >/mybak/twodb.sql
测试,删除数据库中的库表数据:
drop database l1;
drop database l2;
最后进行数据恢复:
mysql -uroot -p'admin@123' l1 </mybak/l1.sql
mysql -uroot -p'admin@123' l2 </mybak/l2.sql
恢复多个库时不需要提前创建相对应的库,备份文件中有建立库表的sql语句。
mysql -uroot -p'admin@123' </mybak/alldb.sql
2、 增量备份 binlog
使用binlog日志实现数据的增量备份与恢复
binlog日志:
也叫二进制日志,是mysql服务日志的一种,默认是没有开启的。
用于记录除查询之外的所有SQL命令
也可以用来数据备份与恢复
配置mysql主从同步的必要条件
启用binlog日志
vim /etc/my.cnf
[mysqld]
server_id=207
log_bin #默认在 /var/lib/mysql,默认命名主机名-bin。随机六位数
systemctl restart mysqld
#查看日志
mysql> show master status;
ls /var/lib/mysql
#创建自定义目录,这个目录需要提前建立好,并且mysql用户要对这个文件有写入权限
mkdir /mylog
#修改配置:
vim /etc/my.cnf
[mysqld]
server_id=207
log_bin=/mylog/ly
chown mysql /mylog
systemctl restart mysqld
#查看日志
mysql> show master status; #查看日志名称是否发生变化
日志名称发生了变化:之前:mysql-bin.000001
之后:ly.000001
每次重启服务,都会产生一个新的二进制文件。
刷新日志: flush logs;
查看日志:ls /mylog
删除已有的binlog日志:
清理日志:
删除指定编号之前的binlog日志文件
格式:purge master logs to “binlog文件名”;
purge master logs to "ly.000001";
删除所有的binlog日志,重建新日志
reset master;
此时,就会重头开始统计:
show master logs;
查看binlog日志的内容:
mysql> show master status;
+-----------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------+----------+--------------+------------------+-------------------+
| ly.000001 | 154 | | | |
+-----------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
添加数据:
insert into l1.t1 values("jim",26,"B180605","stu5@163.com");
insert into l1.t1 values("xiaoming",27,"B180606","stu6@163.com");
insert into l1.t1 values("xiaobai",23,"B180607","stu7@163.com");
再次查看binlog日志内容,发现偏移量发生改变。
mysql> show master status;
+-----------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------+----------+--------------+------------------+-------------------+
| ly.000001 | 1012 | | | |
+-----------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
查看binlog文件内容:
# mysqlbinlog /mylog/ly.000001
使用binlog日志恢复数据:
命令格式:
mysqlbinlog /路径/日志文件 | mysql -uroot -p'admin@123'
使用binlog日志恢复指定数据:
格式:
通过修改日志格式类型,可以看到sql语句,来决定那些需要备份,哪些不需要备份。
日志格式类型:
statement 报表模式
row 行模式
mixed 混合模式
查看行模式:mysql> show variables like "binlog_format";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.01 sec)
修改日志记录格式:
vim /etc/my.cnf
[mysqld]
添加:
binlog_format=“mixed"
systemctl restart mysqld
清空日志:
reset master
登录数据库,查看binlog,插入数据,在日志文件中能看到刚写入的数据:
mysql> show master status;
+-----------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------+----------+--------------+------------------+-------------------+
| ly.000001 | 154 | | | |
+-----------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> insert into l1.t1 values("luo",28,"B180608","stu8@163.com");
Query OK, 1 row affected (0.01 sec)
mysql> show master status;
+-----------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------+----------+--------------+------------------+-------------------+
| ly.000001 | 454 | | | |
+-----------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> system mysqlbinlog /mylog/ly.000001 | grep -i insert
insert into l1.t1 values("luo",28,"B180608","stu8@163.com")
日志文件通过 偏移量、时间点 区分记录的多条命令
格式:
mysqlbinlog 选项 /路径/日志文件 | mysql -uroot -p 密码
指定偏移量:
–start-position=偏移量开始值 --stop-position=偏移量结束值
指定时间点:
–start-datetime=“yyyy-mm-dd hh:mm:ss” --stop-datetime=“yyyy-mm-dd hh:mm:ss”
例如:
删除刚才添加的那条数据:
mysql> delete from l1.t1 where name="luo";
Query OK, 1 row affected (0.01 sec)
查看命令是否写入成功:
# mysqlbinlog /mylog/ly.000001 | grep -i delete
delete from l1.t1 where name="luo"
日志文件传输,mysql主机拷贝至mysql02主机上:
# scp /mylog/ly.000001 root@47.98.104.114:/tmp
root@47.98.104.114's password:
ly.000001 100% 729 96.2KB/s 00:00
在mysql02主机上查看:
[root@mysql02 ~]# mysqlbinlog /tmp/ly.000001
展示执行sql的binlog信息,截取如下:
# at 454
#221027 18:17:33 server id 207 end_log_pos 519 CRC32 0x32cd22b1 GTID [commit=yes]
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 519
#221027 18:17:33 server id 207 end_log_pos 594 CRC32 0x10f9b1f4 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1666865853/*!*/;
BEGIN
/*!*/;
# at 594
#221027 18:17:33 server id 207 end_log_pos 698 CRC32 0x205df697 Query thread_id=3 exec_time=0 error_code=0
SET TIMESTAMP=1666865853/*!*/;
delete from l1.t1 where name="luo"
/*!*/;
# at 698
#221027 18:17:33 server id 207 end_log_pos 729 CRC32 0x576de941 Xid = 29
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
上述注释:# at 519 为开始偏移量
#221027 为系统时间
# at 698 为语句偏移量698
COMMIT 为提交
这里我们使用的是开始偏移量和语句提交后的偏移量(提交后语句才会生效)
总结:
物理备份与逻辑备份的区别:
MySQL 的物理备份、逻辑备份、增量备份相关推荐
- MySQL-日志、完全备份恢复和增量备份恢复
MySQL-日志.完全备份恢复和增量备份恢复 一.MySQL日志管理 1.MySQL日志文件 错误日志 二进制日志 中继日志 慢查询日志 二.查看日志状态命令 三.备份的重要性 1.造成数据丢失的原因 ...
- oracle每天一次差异备份,Oracle的差异增量备份和累积增量备份(zt)
在rman增量备份中,有差异增量和累积增量的概念 1.概念 差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式 累积增量:是备份上级备份以来所有变化的块 因为累积增量是备份 ...
- 达梦V8累积增量备份和差异增量备份
累积增量备份和差异增量备份差异 BACKUP DATABASE INCREMENT CUMULATIVE(累积) 累积增量备份的基备份,只是一个完全的备份集, 简单理解:从数据库全备起,到当前时刻所有 ...
- oracle 每天 增量备份,Oracle的差异增量备份和累积增量备份
在rman增量备份中,有差异增量和累积增量的概念 1.概念 差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式 累积增量:是备份上级备份以来所有变化的块 因为累积增量是备份 ...
- 累计增量备份策略_RMAN增量备份中的差异增量和累积增量
RMAN 增量备份中的差异增量和累积增量 1 .概念 差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式 累积增量:是备份上级备份以来所有变化的块 因为累积增量是备份上级备 ...
- Oracle 中关于差异增量备份与累积增量备份原理与区别
Rman 一个强大的功能是支持增量备份,增量备份中心思想就是减少备份的数据量,使用增量备份后就可以不用从头开始备份了,只需要备份自上次已备份之后的数据块开始进行数据备份. 关于Oracle 增量备份 ...
- mysql数据库常规备份还原 (常用增量备份)2018_lcf
数据库的资料对于一个企业来说,是一个极其重要的资源, 所以做好数据备份是至关重要的. 下面是主要讲常规备份还原方式, 至于保用第三方专用备份工具会单独写个篇幅. 1-->常见数据备份方式 • 物 ...
- mysql备份工具Xtrabackup增量备份还原图解
Xtrabackup增量备份还原图解 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. XtraBackup是Percona 提供的免费 ...
- mysql的增量备份方法_Mysql 增量备份,全部备份实现方法以及自动化脚本
前情摘要 自己作死干了一件特别蠢的事情(具体略) 然后开始研究如何进行增量备份 增量备份 原理 mysql 有个 binlog 的功能,会记录所有的用户的操作,可以依靠这个,配合全备份,将数据库回滚到 ...
- Mysql 备份工具XtraBackup增量备份
安装:[url]http://donald-draper.iteye.com/admin/blogs/2314832[/url] 全量备份:[url]http://donald-draper.itey ...
最新文章
- 嵌入式处理器分类现状
- Unbuntu 自动重启MySQL
- echarts 地图自定义图标_DMKB08:Echarts 分段设色
- JavaSelenium处理页面Table以及Table中随机位置的数据
- sql与nosql_SQL Server JSON函数:NoSQL与关系世界之间的桥梁
- nfs挂载hdfs,实现云存储
- Visio—如何画矩形虚线边框?
- linux/unix 上那些炫酷的命令行工具(一)
- 自创解决键盘最后退出的问题
- 一个号支持多个移动运营商
- java外文文献_spring框架外文文献 PDF 下载
- 【计算机基础】防火墙
- 地下室计算机房冷量,34平米用多大风管机
- 做电商网站php开发的流程,如何开发电商平台-电商开发第一步
- 微积分中几个重要的不等式:Jensen不等式、平均值不等式、Holder不等式、Schwarz不等式、Minkovski不等式 及其证明
- windows7装机必备软件及设置
- BLAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )-SLAM不学无术小问题
- javascript中getmonth()的问题
- cyk的小学数学题 小学数学
- npm yarn 包管理机制