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;
經測試,發現第二臺服務器的數據表也能成功同步到第一臺服務器。
好了,實驗進行完畢。