Mysql DBA 高级运维学习之路-初步增量恢复mysql数据库

1.开启mysql日志
(1)配置my.cnf配置文件

先把my.cnf配置文件中的log-bin参数打开,并将log-bin的设为mysqlbin_linzhongniao,这样在mysql数据库中更新数据时就会记录到这个日志文件中。这样有一个缺点会导致日志文件很大,但是并没关系,系统可以自动分割我们还可以手动分割。查看mysql日志文件用mysqlbinlog

[[email protected] ~]# grep "log-bin" /data/3306/my.cnf
log-bin = /data/3306/mysqlbin_linzhongniao
(2)配置完my.cnf重启mysql

[[email protected] ~]# /data/3306/mysql restart
Restarting MySQL...
Stoping MySQL....
Starting MySQL......
(3)重启之后就可以在mysql的数据文件下看见mysql日志文件。

它记录了对数据有更改操作的语句,之前如果有就不用配置log-bin。

[[email protected] ~]# ls /data/3306/mysqlbin_linzhongniao.*
/data/3306/mysqlbin_linzhongniao.000001 /data/3306/mysqlbin_linzhongniao.index
/data/3306/mysqlbin_linzhongniao.000002
2.模拟增量恢复不停止数据库方法
(1)查看表数据

mysql> use linzhongniao;
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> select database();
+--------------+
| database() |
+--------------+
| linzhongniao |
+--------------+
1 row in set (0.00 sec)

mysql> show tables;
+------------------------+
| Tables_in_linzhongniao |
+------------------------+
| test |
+------------------------+
1 row in set (0.01 sec)

mysql> select * from test;
+----+-------------+
| id | name|
+----+-------------+
| 1 | linzhogniao |
| 2 | wwn1314 |
| 3 | lisi|
| 4 | woshishei |
| 5 | xiaozhang |
+----+-------------+
5 rows in set (0.00 sec)
(2)将id为1的值改为nishishei

mysql> update test set name=‘nishishei‘ where id=‘1‘;
Query OK, 1 row affected (0.10 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from test;
+----+-----------+
| id | name |
+----+-----------+
| 1 | nishishei |
| 2 | wwn1314 |
| 3 | lisi |
| 4 | woshishei |
| 5 | xiaozhang |
+----+-----------+
5 rows in set (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
(3)然后退出mysql用mysqlbinlog查看一下mysqlbin_linzhongniao.000002日志文件

[[email protected] ~]# mysqlbinlog /data/3306/mysqlbin_linzhongniao.000002

at 183

#181018 20:24:08 server id 1 end_log_pos 299 Query thread_id=1 exec_time=0 error_code=0
use linzhongniao/!/;
SET TIMESTAMP=1539865448/!/;
update test set name=‘nishishei‘ where id=‘1‘
/!/;
看update test set name=‘nishishei‘ where id=‘1这条语句,在恢复的时候要把这条语句删掉,再把数据导进去。因为恢复数据的时候还会往里写数据导致数据缺失,所以先把之前的日志文件备份出来。恢复数据,好的方法就是停库,不能停止数据库可以进行手动切割日志文件这样就会生成一个新的日志文件来存储数据

(4)备份有误操作的日志文件

[[email protected] data]# cp mysqlbin_linzhongniao.000002 /opt/
(5)切割日志文件

[[email protected] ~]# mysqladmin -uroot -p123456 -S /data/3306/mysql.sock flush-log[[email protected] ~]# ll /data/3306/mysqlbin_linzhongniao.00000*
-rw-rw----. 1 mysql mysql 126 Oct 18 20:15 /data/3306/mysqlbin_linzhongniao.000001
-rw-rw----. 1 mysql mysql 468 Oct 18 20:41 /data/3306/mysqlbin_linzhongniao.000002
-rw-rw----. 1 mysql mysql 107 Oct 18 20:41 /data/3306/mysqlbin_linzhongniao.000003
我们看切割完了就出现了mysqlbin_linzhongniao.000003,切割完之后写入数据就往mysqlbin_linzhongniao.000003里面写了,现在我们要处理的就是将mysqlbin_linzhongniao.000002日志文件记录的数据重新导入到数据库中

(6)生成bin.sql文件

在工作中bin-log日志文件中记录了多个库的数据,有多个表和库,在恢复数据的时候只对有误操作的库和表进行操作即可。因为在恢复数据的时候有多个库和表会导致主键重复而不能插入数据,所以在做恢复的时候要指定库和表。备份指定库用mysqlbinlog的-d参数。

[[email protected] ~]# mysqlbinlog -d linzhongniao /opt/mysqlbin_linzhongniao.000002 >bin.sql
编辑bin.sql可以发现在什么时候操作数据库导致数据丢失,我们找到update这条语句,将update这条语句删掉。

[[email protected] ~]# grep -i "update" bin.sql
update test set name=‘nishishei‘ where id=‘1‘
(7)开始增量恢复

[[email protected] data]# mysql -uroot -p123456 -S /data/3306/mysql.sock linzhongniao <bin.sql
[[email protected] data]# mysql -uroot -p123456 -e "select * from linzhongniao.test";
+----+-------------+
| id | name|
+----+-------------+
| 1 | linzhogniao |
| 2 | wwn1314 |
| 3 | lisi|
| 4 | woshishei |
| 5 | xiaozhang |
+----+-------------+
5 rows in set (0.00 sec)

原文地址:https://blog.51cto.com/14447527/2420958

时间: 2024-10-12 03:09:54

Mysql DBA 高级运维学习之路-初步增量恢复mysql数据库的相关文章

Mysql DBA高级运维学习笔记-mysql数据库介绍

本文为我自己学习老男孩MySQL DBA 高级运维课程的学习笔记,内容均出自老男孩MySQL DBA 高级运维课程,老男孩老师讲的很好,非常感谢老男孩老师.我是一个菜鸟刚接触运维,如果我写的文章有不对的地方:请各位行业的精英.老师多多批评指点,呵呵~ 1.1 数据库介绍 1.1.1 什么是数据库?简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织.存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据. 1.2 数据库的

Mysql DBA 高级运维学习笔记-Mysql增量备份及数据恢复实战

大家好本文讲了mysql数据库的增量恢复.老男孩老师讲的很好很细,我自己呢整理了老师讲的部分内容,请大家将就看:文章内容比较多.比较乱,请大家认真总结知识,发现问题请及时批评指点~ 1.1 MySQL数据库的备份与恢复 1.1.1备份单个数据库练习多种参数使用 Mysql数据库自带了一个很好用的备份命令,就是mysqldump, 它的基本使用如下: 语法:mysqldump –u用户名 –p密码 数据库名>备份的文件名 范烈1:备份名字为cuizhong的库 a.查看备份前的数据 [[email

Mysql DBA 高级运维学习笔记-DQL语句之select知识讲解

9.9.8 查询数据 9.9.8.1 查询表的所有数据行 (1)命令语法:select<字段1,字段2,->from<表名>where<表达式> (2)列子:查看表wwn中所有数据 a.进入指定数据库查询 [email protected] 04:5152->use wwn Database changed [email protected] 04:5159->select * from test -> ; +----+-----------+ | i

Mysql DBA高级运维学习笔记-Mysql数据库的多种安装方法

3.1 MySQL数据库的安装 3.1.1 yum/rpm方式安装 注意:yum/rpm方式安装MySQL适合所有MySQL软件产品系列. (1)rpm包方式安装mysql我们必须安装Mysql-server和Mysql.client包,rpm安装很简单这里就不说了. (2)yum方式安装mysqlyum 安装的方式很简单,只要执行yum install mysql-server –y即可.大的门户把源码根据企业的需求制作成rpm,搭建yum仓库,yum install xxx -y. 3.1.

Mysql DBA 高级运维学习笔记-MySQL备份与恢复实战案例及生产方案

1.全量备份与增量备份 1.1 全量备份 全量数据就是数据库中所有的数据,全量备份就是把数据库中所有的数据进行备份. 备份所有库: mysqldump -uroot -p123456 -S /data/3306/mysql.sock -F -B –A gzip >/server/backup/mysq_backup_$(date +%F).sql.gz 备份一个库: mysqldump -uroot -p123456 -S /data/3306/mysql.sock -F -B linzhong

Mysql DBA 高级运维学习笔记-Mysql常用基础命令实战

7.1 单实例mysql启动和关闭方法 (1)常规方法启动数据库 1.启动mysql服务命令 [[email protected] ~]# /etc/init.d/mysqld start Starting MySQL. SUCCESS! 2.查看mysql端口 [[email protected] ~]# ss -lnt|grep 3306 LISTEN 0 50*:3306 *:* 3.查看mysql进程 会启动两个进程第一个就是mysql_safe第二个是mysqld [[email pr

Mysql DBA 高级运维学习笔记-Mysql插入中文乱码问题

1.1 mysql插入中文数据乱码 1.1.1MySQL中添加中文数据并查看检表语句 a.创建cuizhong测试数据库并查看建表语句 mysql> create database cuizhong; Query OK, 1 row affected (0.00 sec) mysql> show create database cuizhong\G *************************** 1. row *************************** Database:

Mysql DBA 高级运维学习笔记-Mysql数据库字符集知识

1.2 Mysql数据库字符集知识 1.2.1 MySQL数据库字符集介绍 简单的说,一套文字符号及其编码.比较规则的集合. MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念.其中,字符集是用来定义MySQL数据字符串的存储方式,而校对规则则是定义比较字符串的方式.前面建库的语句中,CHARACTER SET latin1即为数据库字符集而COLLATE latin1_wedish_ci 为校对字符集,有关字符集详细内容参考mysql手册,第10张字

Mysql DBA 高级运维学习笔记-mysql双主及多主同步过程

1.Mysql双主及多主同步实战,互为主从 使用主主前提: a.表的主键自增(M库id1,3,5:M库id 2,4,6) 准备:两台机器,这里用多实例来讲解 第一台: Ip:192.168.1.115Port:3306 第二台: Ip:192.168.1.115Port:3307 1.1 第一台机器的操作 (1)配置3306的my.cnf配置文件添加打开下面参数 [[email protected] ~]# egrep "\[mysqld]|auto_increment|log-bin|log-