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;

在這裏插入圖片描述
經測試,發現第二臺服務器的數據表也能成功同步到第一臺服務器。
好了,實驗進行完畢。

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