MySQL增量备份实战
基于 mysql-bin的增备
vim /etc/my.cnf
#在[mysqld]下添加
max_mysql-bin_size = 1024000 //二进制日志最大1M
1、先开启bin-log功能:
方法一:
在/etc/my.cnf文件中的[mysqld]下,添加
[mysqld]
server-id = 1
log-bin = mysql-bin
expire_logs_days = 7
**注意**:
(1)log-bin注意这里的是"-",而不是"_"
(2)设置日志过期时间(expire_logs_days)为7天(重要),每7天自动删除过期日志
方法二:
使用mysqld --log-bin = 文件存放路径/文件前缀,然后重新启动mysql服务。
修改后重启可以在MySQL datadir下看到mysql-bin.000001这样的文件
[root@localhost sql_bak]# ll /var/lib/mysql
总用量 122964
-rw-r-----. 1 mysql mysql 56 8月 17 14:15 auto.cnf
-rw-------. 1 mysql mysql 1680 8月 17 14:15 ca-key.pem
-rw-r--r--. 1 mysql mysql 1112 8月 17 14:15 ca.pem
-rw-r--r--. 1 mysql mysql 1112 8月 17 14:15 client-cert.pem
-rw-------. 1 mysql mysql 1680 8月 17 14:15 client-key.pem
-rw-r-----. 1 mysql mysql 298 8月 17 15:03 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 8月 17 15:04 ibdata1
-rw-r-----. 1 mysql mysql 50331648 8月 17 15:04 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 8月 17 14:15 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 8月 17 15:04 ibtmp1
drwxr-x---. 2 mysql mysql 4096 8月 17 14:15 mysql
-rw-r-----. 1 mysql mysql 177 8月 17 15:03 mysql-bin.000001
-rw-r-----. 1 mysql mysql 154 8月 17 15:04 mysql-bin.000002
-rw-r-----. 1 mysql mysql 38 8月 17 15:04 mysql-bin.index
srwxrwxrwx. 1 mysql mysql 0 8月 17 15:04 mysql.sock
-rw-------. 1 mysql mysql 6 8月 17 15:04 mysql.sock.lock
drwxr-x---. 2 mysql mysql 8192 8月 17 14:15 performance_schema
-rw-------. 1 mysql mysql 1676 8月 17 14:15 private_key.pem
-rw-r--r--. 1 mysql mysql 452 8月 17 14:15 public_key.pem
-rw-r--r--. 1 mysql mysql 1112 8月 17 14:15 server-cert.pem
-rw-------. 1 mysql mysql 1680 8月 17 14:15 server-key.pem
drwxr-x---. 2 mysql mysql 8192 8月 17 14:15 sys
mysql增量恢复的方法:
一般恢复:
mysqlbinlog [--no-defaults] 增量备份文件 | mysql -uroot -p密码
基于时间点的恢复:
从日志开头截止到某个时间点的恢复:
mysqlbinlog [--no-defaults] --stop-datetime='年-月-日 小时:分钟:秒' 二进制日志 | mysql -uroot -p密码
从某个时间点到日志结尾的恢复:
mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小时:分钟:秒' 二进制日志 | mysql -uroot -p密码
从某个时间点到某个时间的恢复:
mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小时:分钟:秒' --stop-datetime='年-月-日 小时:分钟:秒' 二进制日志 | mysql -uroot -p密码
基于位置的恢复:
mysqlbinlog --stop-position='操作id' 二进制日志 | mysql -uroot -p密码
mysqlbinlog --start-position='操作id' 二进制日志 | mysql -uroot -p密码
2、shell脚本增量备份:
[root@localhost ~]# vim /opt/mysql_bak_zengbei.sh
#!/bin/bash
#MYSQL数据库增量备份脚本。
#设置登录变量
MY_USER="root"
MY_PASS="111111"
MY_HOST="localhost"
MY_CONN="-u$MY_USER -p$MY_PASS -h$MY_HOST"
#定义备份路径、工具、二进制日志前缀、二进制日志存放路径
BF_TIME="$(date +%Y%m%d)"
BF_DIR="/mysql_bak/zengbei/$BF_TIME"
CMD="/usr/bin/mysqladmin"
QZ="mysql-bin"
LOG_DIR="/var/lib/mysql"
#拷贝二进制日志
[ -d $BF_DIR ] || mkdir-p $BF_DIR
#日志回滚
$CMD $MY_CONN flush-logs
/bin/cp -p $(ls $LOG_DIR/$QZ.* | awk -v RS="" '{print $(NF-2)}') $BF_DIR
一些常用操作
mysql> show master logs; #查看数据库所有日志文件。
mysql> show mysql-bin events \g; #查看当前使用的mysql-bin文件信息。
mysql> show mysql-bin events in 'mysql-bin.000001'; #查看指定的mysql-bin文件信息。
mysql> flush logs; #将内存中log日志写磁盘,保存在当前mysql-bin文件中,并产生一个新的mysql-bin日志文件。
mysql> flush logs; reset master; #删除所有二进制日志,并重新(mysql-bin.000001)开始记录。
查看mysql-bin日志内容
[root@localhost mysql-bin]# mysqlbinlog /MySQL/my3306/log/mysql-bin/mysql-bin.000001
查看mysql-bin相关参数
mysql> show variables like 'log_bin%';
3、案例:
1.先查看数据库的bin-log文件:
使用:show master logs;
或:
[root@localhost sql_bak]# ll /var/lib/mysql
总用量 122972
-rw-r-----. 1 mysql mysql 56 8月 17 14:15 auto.cnf
-rw-------. 1 mysql mysql 1680 8月 17 14:15 ca-key.pem
-rw-r--r--. 1 mysql mysql 1112 8月 17 14:15 ca.pem
-rw-r--r--. 1 mysql mysql 1112 8月 17 14:15 client-cert.pem
-rw-------. 1 mysql mysql 1680 8月 17 14:15 client-key.pem
-rw-r-----. 1 mysql mysql 289 8月 17 15:25 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 8月 17 15:42 ibdata1
-rw-r-----. 1 mysql mysql 50331648 8月 17 15:42 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 8月 17 14:15 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 8月 17 15:25 ibtmp1
drwxr-x---. 2 mysql mysql 56 8月 17 15:39 ku1
drwxr-x---. 2 mysql mysql 4096 8月 17 14:15 mysql
-rw-r-----. 1 mysql mysql 177 8月 17 15:03 mysql-bin.000001
-rw-r-----. 1 mysql mysql 177 8月 17 15:25 mysql-bin.000002
-rw-r-----. 1 mysql mysql 445 8月 17 15:31 mysql-bin.000003
-rw-r-----. 1 mysql mysql 859 8月 17 15:40 mysql-bin.000004
-rw-r-----. 1 mysql mysql 76 8月 17 15:31 mysql-bin.index
srwxrwxrwx. 1 mysql mysql 0 8月 17 15:25 mysql.sock
-rw-------. 1 mysql mysql 6 8月 17 15:25 mysql.sock.lock
drwxr-x---. 2 mysql mysql 8192 8月 17 14:15 performance_schema
-rw-------. 1 mysql mysql 1676 8月 17 14:15 private_key.pem
-rw-r--r--. 1 mysql mysql 452 8月 17 14:15 public_key.pem
-rw-r--r--. 1 mysql mysql 1112 8月 17 14:15 server-cert.pem
-rw-------. 1 mysql mysql 1680 8月 17 14:15 server-key.pem
drwxr-x---. 2 mysql mysql 8192 8月 17 14:15 sys
2.模拟数据
mysql> create database ku1;
mysql> use ku1;
mysql> create table t_test (c1 int(10), c2 varchar(20)) engine=innodb;
mysql> insert into t_test values (1, 'test1'),(2, 'test2'),(3, 'test3'),(4, 'test4'),(5, 'test5'),(6, 'test6'),(7, 'test7'),(8, 'test8'),(9, 'test9'),(10, 'test10');
3.将全量数据进行备份
mysqldump -uroot -p123456 -B --master-data=2 --single-transaction ku1 >/root/sql_bak/my_bak.sql.gz
#mysqldump -uroot -p123456 -A -B --master-data=2 --single-transaction --events|gzip >/root/sql_bak/my_bak.sql.gz
#gzip -d my_bak.sql.gz
#记录备份的日志位置,将来作为增量还原的起点
[root@localhost sql_bak]# cat my_bak.sql |grep "CHANGE MASTER"
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=859;
4.准备第一份增量数据
mysql> use ku1;
mysql> create table piu2 (c1 int(10), c2 varchar(20));
mysql> insert into piu2 values (11, 'piu21'),(12, 'piu22'),(13, 'piu23'),(14, 'piu24'),(15, 'piu25');
5.将第一份增量数据进行备份
#将日志刷到当前的mysql-bin文件中,也就是mysql-bin.000004,数据库再有新的数据更新会记录在新的mysql-bin(mysql-bin.000005)里面.
mysql> flush logs;
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 177 |
| mysql-bin.000002 | 177 |
| mysql-bin.000003 | 445 |
| mysql-bin.000004 | 1395 |
| mysql-bin.000005 | 154 |
+------------------+-----------+
5 rows in set (0.00 sec)
#拷贝mysql-bin文件
[root@localhost sql_bak]# cp /var/lib/mysql/mysql-bin.000005 .
6.准备第二份增量数据
mysql> use ku1;
mysql> insert into piu2 values (16, 'piu216'),(17, 'piu217'),(18, 'piu218'),(19, 'piu219'),(20, 'piu220');
7.将第二份增量数据进行备份
#将日志刷到当前的mysql-bin文件中,也就是mysql-bin.000005,数据库再有新的数据更新会记录在新的mysql-bin(mysql-bin.000006)里面.
mysql> flush logs;
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 177 |
| mysql-bin.000002 | 177 |
| mysql-bin.000003 | 445 |
| mysql-bin.000004 | 1395 |
| mysql-bin.000005 | 512 |
| mysql-bin.000006 | 154 |
+------------------+-----------+
6 rows in set (0.00 sec)
#拷贝mysql-bin文件
[root@localhost sql_bak]# cp /var/lib/mysql/mysql-bin.000006 .
[root@localhost sql_bak]# pwd
/root/sql_bak
[root@localhost sql_bak]# ll
总用量 16
-rw-r--r--. 1 root root 2229 8月 17 16:03 my_bak.sql
-rw-r-----. 1 root root 154 8月 17 16:19 mysql-bin.000005
-rw-r-----. 1 root root 154 8月 17 16:23 mysql-bin.000006
drwxr-xr-x. 3 root root 22 8月 17 15:08 zengbei
-rwxr-xr-x. 1 root root 583 8月 17 15:09 zl_bak.sh
7.开始还原(全备还原+基于mysql-bin的增备还原)
#模拟数据库故障,即删除全备数据及增备数据库。
mysql> drop database ku1;
Query OK, 2 rows affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
先还原全备数据
mysql>create database ku1;
[root@localhost sql_bak]# mysql -uroot -p123456 ku1 </root/sql_bak/my_bak.sql
mysql> use ku1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------+
| Tables_in_ku1 |
+---------------+
| t_test |
+---------------+
1 row in set (0.00 sec)
mysql> select * from t_test;
+------+--------+
| c1 | c2 |
+------+--------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
| 4 | test4 |
| 5 | test5 |
| 6 | test6 |
| 7 | test7 |
| 8 | test8 |
| 9 | test9 |
| 10 | test10 |
+------+--------+
10 rows in set (0.00 sec)
还原第一个增备文件
从全备文件里的position值:LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=859 开始还原
[root@localhost sql_bak]# mysqlbinlog --start-position=859 /var/lib/mysql/mysql-bin.000004 | mysql -uroot -p123456
#查看数据:
mysql> show tables;
+---------------+
| Tables_in_ku1 |
+---------------+
| piu2 |
| t_test |
+---------------+
2 rows in set (0.00 sec)
mysql> select * from piu2;
+------+-------+
| c1 | c2 |
+------+-------+
| 11 | piu21 |
| 12 | piu22 |
| 13 | piu23 |
| 14 | piu24 |
| 15 | piu25 |
+------+-------+
5 rows in set (0.00 sec)
第一份增量数据还原成功!
还原第二个增备文件(方法同上)
[root@localhost sql_bak]# mysqlbinlog /var/lib/mysql/mysql-bin.000006 | mysql -uroot -p123456
查看数据:
mysql> select * from piu2;
+------+--------+
| c1 | c2 |
+------+--------+
| 11 | piu21 |
| 12 | piu22 |
| 13 | piu23 |
| 14 | piu24 |
| 15 | piu25 |
| 16 | piu216 |
| 17 | piu217 |
| 18 | piu218 |
| 19 | piu219 |
| 20 | piu220 |
+------+--------+
10 rows in set (0.00 sec)
MySQL增量备份实战相关推荐
- Mysql运维管理-Mysql增量备份及分库分表备份数据恢复实战12
1. MySQL数据库的备份与恢复 1.1 Mysqldump的工作原理? 利用mysqldump命令备份的过程,实际上就是把数据从mysql库里以逻辑的sql语句的形式直接输出或者生成备份的文件的过 ...
- C 实现Mysql增量备份_window下mysql数据库增量备份实现教程
mysql增量备份(mysql5.1 之后),linux下mysql增量备份 网上资料很多.这里只说明window下mysql增量备份. 定义: mysql数据库会以二进制的形式,自动把用户对mysq ...
- mysql增量备份二进制日志,mysql增量备份二进制日志shell脚本
mysql增量备份二进制日志shell脚本 mysql增量备份二进制日志shell exit?0 echo?"?"?>>$log_file echo?"End ...
- MYSQL增量备份和全量备份脚本分享
mysql的全量备份与增量备份 全量备份:可以使用mysqldump直接备份整个库或者是备份其中某一个库或者一个库中的某个表. 增量备份:增量备份是针对于数据库的bin-log日志进行备份的,需要开始 ...
- MYSQL增量备份和全量备份脚本
首先配置下mysql增量备份: server-id = 1 log_bin = /var/log/mysql/mysql-bin.log bin ...
- mysql增量备份及恢复解决方案
2019独角兽企业重金招聘Python工程师标准>>> 前言 操作系统崩溃.电源故障.文件系统崩溃和硬件故障等异常状况都可能导致我们正在使用的数据库出现故障而产生数据库中数据不一致的 ...
- mysql增量备份xtrabackup(innobackupex)方式
mysql增量备份xtrabackup(innobackupex)方式 1.首先对数据库进行全备份 当前数据库表数据 数据库全备份 innobackupex --user=admin --passwo ...
- windows mysql增量备份_关于window下mysql数据库增量备份
mysql增量备份(mysql5.1 之后),linux下mysql增量备份 网上资料很多.这里只说明window下mysql增量备份. 定义: mysql数据库会以二进制的形式,自动把用户对mysq ...
- 【转】mysql增量备份恢复实战企业案例
来源地址:http://seanlook.com/2014/12/05/mysql_incremental_backup_example/ 小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但 ...
最新文章
- Python defaultdict 模块和 namedtuple 模块
- 《全栈性能Jmeter》-4JMeter脚本开发
- placeholder调整颜色
- 使用vb6绿色版做一个简易图片浏览器
- 面试官上来就问:Java 进程中有哪些组件会占用内存?
- 存储过程没有执行完后没有释放锁_面试必问---synchronized实现原理及锁升级过程你懂吗?...
- RuoYi-Cloud 部署篇_03(linux环境 Mysql+nginx版本)
- java map函数指针_C 函数指针与回调函数
- nodejs集成sqlite
- 此计算机上的windows防火墙阻止了远程调试_除了防火墙,用PowerShell命令也可以屏蔽网站,这个方法更简单...
- Qt5类之QLine and QLineF
- JAVA 内部类(innerclasses)
- lodop 小票排版_Lodop打印小票
- DNS工作原理及其过程
- [F2F] MyBatis相关面试题
- vivo手机的微信消息不提示问题解决
- 当今十大备份应用软件
- python生成exe启动很慢_python生成exe启动很慢|Win7电脑启动慢如何解决?Win7使用Msconfig.exe解决电脑启动慢的方法...
- win7网站服务器空间怎么清理,window_Win7系统如何清理C盘空间?Win7系统清理C盘空间小技巧, Win7系统清理C盘空间小技 - phpStudy...
- mybatis从入门到精通(刘增辉著)-读书笔记第五章