MariaDB主從複製,redis發佈訂閱,持久化,以及主從同步

 

一. MariaDB主從複製

mysql基本操做

1 鏈接數據庫html

mysql -u root -p -h 127.0.0.1
mysql -u root -p -h 192.168.12.60

 

2 授予遠程鏈接的權限mysql

grant all privileges on *.* to root@"%" identified by "centos"

 

3 修改root用戶的密碼redis

先進入mysql的交互式模式
set password = PASSWORD('centos');

 

4 建立mysql用戶sql

create user liulaoshi@"%" identified by "lls666"

 

5 給予劉老師查詢全部庫和全部表的權限數據庫

grant select on *.* to liulaoshi@"%" identified by "lls666"

6.查詢mysql庫中的用戶信息vim

use mysql;
select host,user,password from  user;

7.再給劉老師建立全部庫和全部表的權限, 再給修改權限,再加上刪除權限centos

grant create on *.* to liulaoshi@"%" identified by "lls666"
grant update on *.* to liulaoshi@"%" identified by "lls666"
grant delete on *.* to liulaoshi@"%" identified by "lls666"

 

8 授予mysql權限的語法服務器

mysql使用grant命令對帳戶進行受權,grant命令常見格式以下
​
grant 權限 on 數據庫.表名 to 帳戶@主機名            對特定數據庫中的特定表受權
grant 權限 on 數據庫.* to 帳戶@主機名              對特定數據庫中的全部表給與受權
grant 權限1,權限2,權限3 on *.* to 帳戶@主機名      對全部庫中的全部表給與多個受權
grant all privileges on *.* to 帳戶@主機名      對全部庫和全部表受權全部權限

 

9 移除劉老師的建立權限架構

revoke create on *.* from xiaochun@"%" identified by 'lls666';
revoke delete on *.* from xiaochun@"%" identified by 'lls666';

 

10.數據庫的備份與恢復 #備份app

mysqldump -u root -p --all-databases > /tmp/db.sql

備份單個數據庫

mysqldump -u root -p luffycity > /tmp/luffycity.sql

 

#數據導入,方式有3種

第一種方法:

進入mysql交互模式
source /tmp/luffycity.sql;

 

第二種方法

mysql -u root -p < /tmp/luffycity.sql

 

第三種方法

navicat 第三方工具

 

mariadb主從複製

步驟詳解:

1. 主數據庫寫入數據以後, 會有data changes(數據變化)記錄
2. 有變化記錄以後,將增刪改的一些sql語句記錄到本地的Binary log(二進制日誌)中
3. 從庫會一直開啓着一個線程
4. 經過線程去讀取這個二進制日誌的內容
5. 從庫會將數據寫入到本身的Relay log(中繼日誌)中
6. 從庫會將中繼日誌中的操做轉化爲SQL thread(SQL語句)
7. 經過轉化的SQL語句寫入到本身的數據庫, 兩邊的數據就一致了

 

 

mysql主從複製部署

1 準備兩臺機器

192.168.12.60   # 主服務器master(可讀可寫)
192.168.12.71   # 從服務器slave(可讀)
實際工做中數據庫讀取操做比較多,因爲從服務器是讀,因此從服務器的配置要強悍一些

2 兩臺機器上分別安裝mariadb數據庫

192.168.12.60
用戶名: root
密碼: centos
​
192.168.12.71
用戶名: root
密碼: centos

 

配置主數據庫

3 在主數據庫(192.168.12.56)上操做

停mariadb
systemctl stop mariadb

4 修改主數據庫的配置文件

vim /etc/my.cnf
添加如下內容
[mysqld]   # 若是配置文件裏面有這一行,就只須要加如下兩行配置就能夠了
server-id=1
log-bin=qishi2-logbin

 

5 重啓主數據庫

systemctl restart mariadb

6 建立主從複製用戶帳號

create user 'pig'@'%' identified by 'centos';

7 給從庫帳號受權,說明給tiger從庫複製的權限,在10.0.0.8機器上覆制

grant replication slave on *.* to 'pig'@'%';

8 實現對主數據庫鎖表只讀,防止數據寫入,數據複製失敗

flush table with read lock;

9 查看並記錄主數據庫的狀態

show master status;

 

10 確認主數據庫是否已經成功鎖表

 

11 導出主數據庫的數據爲alldb.sql

mysqldump -u root -p --all-databases > /opt/alldb.sql

 

12 把這個數據庫文件拷貝到從數據庫的/opt目錄下

scp /opt/alldb.sql 192.168.12.71:/opt/

 

 

配置從數據庫

13 中止從數據庫服務

systemctl stop mariadb

 

14 修改從數據庫的配置文件

vim /etc/my.cnf
添加如下配置
[mysqld]
server-id=5
read-only=true

 


15 啓動從數據庫服務

systmectl start mariadb

 

16 在從 庫上導入主數據庫數據

mysql -u root -p 
source /opt/alldb.sql

17 如今,主從兩臺數據庫的數據就徹底一致

18 配置複製的參數,Slave從庫鏈接Master主庫的配置(最重要的一步)

change master to master_host='192.168.12.60',
master_user='pig',
master_password='centos',
master_log_file='qishi2-logbin.000001',
master_log_pos=466;

 

19 啓動從庫的同步開關,測試主從複製的狀況

start slave

20 查看從庫的狀態

 

 

在主庫上操做

21 導出數據完畢,並配置好從庫開啓主從同步後,再解鎖主庫,恢復可寫;

unlock tables;

 

22 驗證主從複製狀況

在主庫上建立數據,查看從庫數據同步狀態

23 在主庫上給予qihang用戶select的權限, 並刷新受權表

grant select on *.* to pig@"%" identified by "centos";
flush privileges;

 

24 在從庫上登陸qihang用戶, 並嘗試建立一個庫

create database aaaa;
​
ERROR 1290 (HY000): The MariaDB server is running with the --read-only option so it cannot execute this statement

 

25 驗證主從讀寫分離狀態

 

26 從庫上提示read-only表示主從同步讀寫分離已經成功完成

 

 

 

二. redis發佈訂閱和持久化

redis發佈訂閱

發佈者

publish xinwen 66nouyou

訂閱者

sub

 

 

redis 持久化

redis是一個內存型的數據庫

斷電數據會消失

重啓服務數據會消失

重啓服務器數據會消失

 

mysql的數據存在硬盤中,可是數據是存在哪一個路徑下呢?

/var/lib/mysql

 

redis持久化之 RDB

 

RDB持久化配置:

1 建立redis配置文件

vim /opt/redis_conf/reids-6379.conf

 

寫入如下配置

port 6379
daemonize yes
dir /opt/data/6379
pidfile /opt/data/6379/redis.pid
loglevel notice
logfile "/opt/data/6379/redis.log"
protected-mode yes
dbfilename  dbmp.rdb
save 900 1
save 300 10
save 60 10000

 

2 進入redis 數據庫,建立幾條數據,並使用save命令開啓rdb持久化

redis-cli
​
set name liujie
set age 18
set sex nam
​
save   # 開啓rdb持久化, 也能夠不用

 

redis AOF持久化

1 修改reids配置文件

vim /opt/redis_conf/redis-6379.con

加入如下兩行配置
appendonly yes
appendfsync everysec

保存退出

2 重啓redis服務

pkill reids
redis-server /opt/redis_conf/redis-6379.conf

3 驗證appendonly.aof文件裏面的數據和redis裏面的數據是否健在

 

 

redis不重啓,從RDB切換到AOF

1 配置RDB持久化,確保沒有AOF的配置

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename  dbmp.rdb
save 900 1                    #rdb機制 每900秒 有1個修改記錄
save 300 10                    #每300秒        10個修改記錄
save 60  10000                #每60秒內        10000修改記錄

 

2啓動redis服務端

redis-server redis.conf

 

3 登陸redis-cli插入數據,手動持久化

127.0.0.1:6379> set name tiger
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set addr daxuecheng
OK
127.0.0.1:6379> save
OK

 

4 檢查RDB文件

 

5 備份RDB文件

 

 

6 執行命令,開啓AOF持久化

CONFIG set appendonly yes   # 開啓AOF功能
​
CONFIG SET save ""          # 關閉RDB功能

 

7 驗證舊的RDB數據庫數據是否轉入AOF, 以及AOF持久化文件是否正常寫入

 

 

三. redis主從同步

1 準備三個redis配置文件

cd /opt/redis_conf

redis-6380.conf   # 主數據庫master
redis-6381.conf   # 從庫slave
redis-6382.conf   # 從庫slave

 

2 寫入如下配置

port 6380
daemonize yes
pidfile /opt/data/6380/redis.pid
loglevel notice
logfile "/opt/data/6380/redis.log"
dbfilename dump.rdb
dir /opt/data/6380
protected-mode no

 

3 目前這三個配置文件配置同樣,只是端口的不一樣

可使用這一條命令經過redis-6380.conf生成6381和6382的配置文件
sed "s/6380/6381/g" redis-6380.conf > redis-6381.conf
sed "s/6380/6382/g" redis-6380.conf > redis-6382.conf

 

4 在6381和6382下添加如下配置,使之成爲從數據庫

slaveof 127.0.0.1 6380

可使用如下一行命令直接追加寫入到配置文件中

echo "slaveof 127.0.0.1 6380" >> redis-6381.conf

 

5 確認三個配置文件無誤

 

6 開啓這三個redis服務,確保三個服務啓動正常

 

 

7 查看redis主從數據庫的狀態

redis-cli -p 6380 info replication
redis-cli -p 6381 info replication
redis-cli -p 6382 info replication

 

8 驗證redis主從複製狀況

(1)先驗證三個數據庫是否能正常鏈接

 

(2) 在6380上面寫入數據,查看6381和6382是否可以正常同步

 

 

9 手動進行主從複製故障切換

(1) 殺掉6380的進程,模擬主庫故障

kill -9 進程ID

 

(2)在6381和6382上手動指定一個主庫(我如今指定6382爲主庫)

(3) 在6382的redis上執行這一行命令

slaveof no one

(4) 在6381上執行如下命令,將原來的指向6380改成指向6382

原來的配置指向:

 

執行命令:

slaveof no one
slaveof 127.0.0.1 6382

 

(5) 驗證新的主從架構狀態

查看主從信息
  info replication

 

在6382上查看主從信息

 

再到6381上面查看主從信息

 

(6) 驗證新的主從架構是否能夠正常寫入數據,同步數據

若是能夠,說明主從正常

 

 

 詳細可參考: mariadb:主從複製:https://www.cnblogs.com/tiger666/articles/10259269.html

          持久化rdb以及AOF:https://www.cnblogs.com/tiger666/articles/10351619.html

相關文章
相關標籤/搜索