Centos之MySQL数据还原

mysql dump备份还原

1、通过mysqlbinlog恢复数据

安装mysql

yum -y install mysql mysql-server

配置my.cnf开启log-bin模块

vim /etc/my.cnf
#添加上log-bin=mysql-bin

在这里插入图片描述
二进制文件存放位置

cd /var/lib/mysql/

在这里插入图片描述
未开启mysql前,文件目录为空
开启mysql

service mysqld start

查看二进制文件,发现已经有了文件
在这里插入图片描述
设置mysql密码并登录mysql

mysqladmin -u root password '123456'
mysql -u root -p

查看二进制文件
查看二进制文件是否已经启用

show global variables like '%log%';

在这里插入图片描述
查看二进制文件是哪些

show binary logs;

在这里插入图片描述
查看当前正在使用的二进制文件

show master status;

在这里插入图片描述
查看二进制文件内容
先执行一个创建数据库的操作,然后查看二进制文件内容

create database aa;
show binlog events in 'mysql-bin.000003';

在这里插入图片描述
多做几组操作,然后查看

create database bb;
create database cc;
create database dd;
drop database dd;
drop database cc;
drop database bb;
drop database aa;
show binlog events in 'mysql-bin.000003';

在这里插入图片描述
用二进制文件进行恢复操作

cd /var/lib/mysql
mysqlbinlog mysql-bin.000003

在这里插入图片描述

mysql -u root -p
show databases;

在这里插入图片描述
(1)使用时间点的方式还原之前创建数据库的

mysqlbinlog --start-datetime="2020-5-19 23:43:46" --stop-datetime="2020-5-19 23:52:22" mysql-bin.000003 | mysql -u root -p

开始时间使用操作开始的时间
在这里插入图片描述
结束时间使用要恢复操作的下一个操作的开始时间
在这里插入图片描述
执行恢复数据库操作,然后登录mysql查看
在这里插入图片描述
在这里插入图片描述
(2)使用结束位置的方式恢复数据库
首先删除aa、bb、cc、dd数据库,然后进行如下恢复

mysqlbinlog --start-position=244 --stop-position=560 mysql-bin.000003 | mysql -u root -p

开始位置使用要恢复操作的上一个操作的结束位置
在这里插入图片描述
结束位置使用要恢复操作的结束位置
在这里插入图片描述
执行恢复数据库操作,然后登录mysql查看
在这里插入图片描述
在这里插入图片描述
删除指定范围的二进制文件

show binary logs;
purge binary logs to 'mysql-bin.000002';

在这里插入图片描述

2、主从复制

通过binlog实现复制
异步的复制方式
从服务器有:master.info
change master to
从主服务器传来的数据存到从服务器relay-bin.000001

首先恢复虚拟机环境到初始状态
两台机器配置好mysql

yum -y install mysql mysql-server

检查防火墙和selinux状态
若未关闭,则需要关闭

iptables -F #关闭防火请
setenforce 0 #关闭selinux
iptables -L #查看防火墙是否关闭
getenforce #查看selinux是否关闭

主服务器和从服务器分别开启和配置二进制文件

vim /etc/my.cnf

在这里插入图片描述
在这里插入图片描述
分别开启mysql服务

service mysqld start

分别都设置mysql密码并登录mysql

mysqladmin -u root password '123456'
mysql -u root -p

在主服务器上授权一个用户

grant replication slave on *.* to 'wmm'@'%' identified by '123456';
flush privileges;

查看主服务器上的二进制文件

show master status;

在这里插入图片描述
从服务器登录并配置master.info文件

change master to master_host='192.168.201.137',master_user='wmm',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=460;

在这里插入图片描述
开启同步功能并查看信息

start slave;
show slave status\G;

在这里插入图片描述
Slave_IO_Running: Yes和Slave_SQL_Running: Yes。表明同步已经成功了。
测试主服务器同步到从服务器
从服务器先查看所有数据库

show databases;

在这里插入图片描述
然后主服务器新建aa、bb数据库

create database aa;
create database bb;
show databases;

在这里插入图片描述
最后从服务器再查看所有数据库
在这里插入图片描述
主服务器同步到从服务器同步成功
测试从服务器同步到主服务器,并未同步成功。很显然,从服务器无法同步到主服务器。
这样主从复制就成功实现了。

3、主主复制

首先恢复虚拟机环境到初始状态
两台机器配置好mysql

yum -y install mysql mysql-server

两台机器分别修改主配置文件my.cnf

vim /etc/my.cnf

log-bin=mysql-bin
server-id=1
expire-logs-days= 99 #设置二进制文件默认存放多少天(只保留最近多少天内容)
binlog-ignore-db = mysql #忽略哪些数据库
binlog-ignore-db = information_schema
replicate-do-db=test #想做同步的数据库名字
auto-increment-increment=2 #设置增长点,每次增长多少,有多少台服务器,就设置为多少
auto-increment-offset=1 #做一个起点,为了得到一个不一样的名称

在这里插入图片描述
在这里插入图片描述
关闭防火墙和selinux

iptables -F #关闭防火请
setenforce 0 #关闭selinux

分别开启mysql服务

service mysqld start

成功开启mysql
在这里插入图片描述
在这里插入图片描述
分别都设置mysql密码并登录mysql

mysqladmin -u root password '123456'
mysql -u root -p

备份test数据库
其中一台锁定数据库,使数据不再更新

flush tables with read lock;

然后备份test数据库

mysqldump -uroot -p test > /tmp/test.sql

在这里插入图片描述
最后再解锁数据库

unlock tables;

在这里插入图片描述
在两台服务器上分别授权一个用户

grant replication slave on *.* to 'wmm'@'192.168.201.140' identified by '123456';
flush privileges;

在这里插入图片描述

grant replication slave on *.* to 'wmm'@'192.168.201.137' identified by '123456';
flush privileges;

在这里插入图片描述
两台服务器上分别查看当前使用的二进制文件

show master status;

在这里插入图片描述
发现使用的文件相同(理论上应该不同,不过并没有太大影响)
两台服务器分别登录并配置master.info文件

change master to master_host='192.168.201.140',master_user='wmm',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=489;

change master to master_host='192.168.201.137',master_user='wmm',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=489;

在这里插入图片描述
在这里插入图片描述
两台服务器都开启同步功能并查看信息

start slave;
show slave status\G;

在这里插入图片描述
在这里插入图片描述
两台都是Slave_IO_Running: Yes和Slave_SQL_Running: Yes。表明两台服务器都显示同步成功。为了确定是否真的同步成功,于是再测试一下:
第一台同步到第二台

#第二台服务器
use test;
show tables;

在这里插入图片描述

#第一台服务器
use test;
show tables;
create table aa (name char(30)); #创建个aa数据表
show tables;

在这里插入图片描述

#第二台服务器
show tables;

在这里插入图片描述
经测试,发现第一台服务器的数据表成功同步到第二台服务器
第二台同步到第一台

#第二台服务器
use test;
show tables;
create table bb (name char(20)); #创建个bb数据表
show tables;

在这里插入图片描述

#第一台服务器
show tables;

在这里插入图片描述
经测试,发现第二台服务器的数据表也能成功同步到第一台服务器。
好了,实验进行完毕。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章