Mariadb主從複製

前戲:mysql

mysql的基本命令複習linux

1.啓動mysql
systemctl start mariadb 

2.linux客戶端鏈接本身 
mysql -uroot -p -h 127.0.0.1

3.遠程連接mysql服務端
mysql -uroot -p -h 192.168.11.37

4.修改mysql密碼
MariaDB [(none)]> set password = PASSWORD('redhat123');

5.建立mysql用戶
create user xiaochun@'%' identified by 'xc666';

6.查詢mysql庫中的用戶信息
use mysql;
select host,user,password from  user;

7.受權語句
給小春這個用戶,授予建立數據庫的權限

mysql使用grant命令對帳戶進行受權,grant命令常見格式以下

grant 權限 on 數據庫.表名 to 帳戶@主機名            對特定數據庫中的特定表受權
grant 權限 on 數據庫.* to 帳戶@主機名              對特定數據庫中的全部表給與受權
grant 權限1,權限2,權限3 on *.* to 帳戶@主機名      對全部庫中的全部表給與多個受權
grant all privileges on *.* to 帳戶@主機名      對全部庫和全部表受權全部權限

#授予小春建立的權限,對於全部的庫表生效
grant create  on *.* to xiaochun@"%"  identified by 'xc666';
#授予小春用戶,只有建立mymysql數據庫的權限
grant create  on mymysql.* to xiaochun@"%"  identified by 'xc666';

#授予用戶最大的權限,全部的權限
grant all privileges on *.* to username@'%' identified by 'password';


8.移除權限
MariaDB [(none)]> revoke all privileges on *.* from xiaochun@"%" identified by 'xc666';

MYSQL主從複製

步驟:sql

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

主從複製原理7步曲

一、準備兩臺數據庫

192.168.1.250192.168.1.251

master主庫(192.168.1.250)配置

1 中止主服務器mariadb數據庫服務數據庫

systemctl stop mariadb

2 修改主服務器配置文件vim

vim   /etc/my.cnf服務器

3.新建用於主從同步的用戶iris,容許登陸的從庫是'192.168.1.251'ide

create user iris@'%' identified by '123456';

# 若是要指定192.168.1.251 ,將%改爲192.168.1.251便可

4.給從庫帳號受權,受權給iris從庫複製的權限,在192.168.1.251機器上覆制
  測試

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

replication 複製

5 檢查主庫建立的複製帳號 ​ spa

select user,host from mysql.user;

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

flush table with read lock;

7.檢查主庫的狀態, 並記錄下日誌文件的名字,和位置

MariaDB [(none)]> show master status;

記錄下主數據庫的寫入狀態和日誌文件的名字

8 鎖表後,必定要單獨再打開一個SSH窗口,導出數據庫的全部數據

注意,必定要單獨再打開一個SSH窗口!!!!!

將導出的數據,傳給從庫,讓從庫導入。這樣兩邊的數據庫就同樣了

 

在從庫上配置

10 關閉數據庫服務

systemctl stop mariadb

11 在從庫192.168.1.97上打開/etc/my.cnf

 

[mysqld]
server-id=3
read-only=true

12 重啓數據庫

systemctl restart mariadb

13 導入主庫傳過來的數據庫文件,保持從庫的數據與主庫一致

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

14 配置複製的參數,Slave從庫鏈接Master主庫的配置

change master to master_host='192.168.1.251',
master_user='iris',
master_password='123456',
master_log_file='qishi-logbin.000001',
master_log_pos=486;

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

start slave;

16 查看複製狀態

show slave status\G;

注意: 若是看到Slave_IO_Running和Slave_SQL_Running這兩個參數都爲yes, 說明主從同步配置成功,不然須要檢查並從新配置

注意:

若是從庫上面的普通用戶沒法在從庫上登陸,就從新建立一個用戶
create user 'xiaochun'@'%' identified by 'xc666';
grant replication slave on *.* to 'xiaochun'@'%';

此時主從同步就已經完成配置了,雙方都登陸iris帳號,在主庫建立一個庫,再看從庫已經成功複製過來了,再到從庫上面嘗試建立庫或寫入數據,沒法寫入,由於從庫設置了只讀

tip:

注意此處還未配置從庫的只讀模式,只需在slave服務器上配置/etc/my.cnf,加上如下配置,而且在slave上建立普通用戶,使用普通用戶主從同步便可達到只讀的效果

若是用root用戶,沒法達到readonly,這是一個坑

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
server-id=3
read-only=true
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
相關文章
相關標籤/搜索