天天看點

MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

高冷的菜單欄

  • 安裝MySQL
  • 測試環境介紹
  • 主從備份原理
  • 在A機器中的操作
      • 建立一個測試資料庫zengraoli2
      • 建立一個遠端使用者zeng
      • 配置my.cnf
      • 在MySQL終端檢視mater資訊
  • 在B機器中的操作
      • 建立資料庫zengraoli
      • 配置my.cnf
      • 設定slava資訊
  • 進行資料測試
      • 對A機器進行資料的插入
      • 在B機器上查詢表中資料是否更新
      • 停用A機器的MySQL,再來看插入
      • 是以簡單下一個結論
      • 為什麼沒有自帶的哨兵模式?
  • 一些其他需要到的指令
  • 如果是另一台MySQL伺服器通過克隆出來

安裝MySQL

請參考網上

測試環境介紹

測試環境為centos7.5

A機器ip:10.0.8.37(主)

B機器ip:10.0.8.243(從)

MySQL版本:5.6.42

主從備份原理

主伺服器資料庫的每次操作都會記錄在二進制日志檔案mysql-bin.xxx中。從伺服器的I/O線程使用專用帳号登陸到主伺服器中讀取該二進制檔案,并将檔案内容寫入到自己本地的中繼日志relay-log檔案中。然後從伺服器的SQL線程會根據中繼日志中的内容執行SQL語句。

本段說明參考:https://www.cnblogs.com/ahaii/p/6307648.html

在A機器中的操作

建立一個測試資料庫zengraoli2

CREATE DATABASE zengraoli2;
USE zengraoli2;
CREATE TABLE test2 ( id int not null primary key,name char(20) );
           
MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

建立一個遠端使用者zeng

讓這個使用者隻能操作zengraoli這個資料庫的表

CREATE USER 'zeng'@'%' IDENTIFIED BY '123456';
grant all privileges on zengraoli2.* to 'zeng'@'%' identified by '123456'; 
GRANT REPLICATION SLAVE ON *.* TO 'zeng'@'10.0.8.243' IDENTIFIED BY '123456';
flush privileges;
           

在本機測試一下,看看能否用遠端進行連結本地的資料庫

mysql -h 10.0.8.37 -u zeng -p
           

正常進入,說明建立成功

MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

配置my.cnf

修改my.cnf,

sudo vi /etc/my.cnf

找到port=3306這一行,在其下面添加如下内容

server-id=2 # 要與從庫不一樣
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql # 不同步哪個庫 預設是全部
binlog-do-db=zengraoli2 # 隻同步哪個庫
expire_logs_days        = 10
log-bin=mysql-bin
max_binlog_size   = 100M
binlog_format           = row  # binlog的格式 row 具有 statement和mixed 不具備的優勢 填寫 row
sync_binlog = 1 
innodb_flush_log_at_trx_commit = 1  # 和 sync_binlog 組成雙1 配置 保證資料的完整性
           

重新開機資料庫即可生效

sudo service mysqld restart
           

在B機器上沒有建立資料庫的腳本,是以我們需要先把剛才建立的資料庫導出到.sql檔案中,在B中導入

MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

在MySQL終端檢視mater資訊

show master status;
           
MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

在B機器中的操作

建立資料庫zengraoli

并導入剛才的.sql檔案

CREATE DATABASE zengraoli2;
USE zengraoli2;
source zengraoli.sql;
           
MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

配置my.cnf

修改my.cnf,

sudo vi /etc/my.cnf

找到port=3306這一行,在其下面添加如下内容

MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

重新開機資料庫即可生效

sudo service mysqld restart
           

設定slava資訊

進入MySQL的終端,直接幹

stop slave;

change master to master_host='10.0.8.37',master_user='zeng',master_password='123456',master_log_file='mysql-bin.000014', master_log_pos=120;

start slave;
           
master_user要指定能通路的使用者名和,master_password則是密碼,master_log_file、master_log_pos要對應上面master中顯示的

設定完成後,用

show slave status\G;

檢視目前的slave資訊如下

MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

進行資料測試

對A機器進行資料的插入

INSERT INTO `test2`(`id`, `name`) VALUES('1', 'zeng1');
INSERT INTO `test2`(`id`, `name`) VALUES('2', 'zeng2');

SELECT * FROM `test2`;
           

在B機器上查詢表中資料是否更新

use zengraoli2;
SELECT * FROM `test2`;
           

看下以下兩條資料,證明已經把資料複制過來了

MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

停用A機器的MySQL,再來看插入

在A機器上執行

sudo service mysqld stop

在B中插入資料

SELECT * FROM `test2`;

MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

重新打開A上的MySQL,進入MySQL終端,查詢一下,第三條資料沒有過來

MySQL主從模式安裝MySQL測試環境介紹主從備份原理在A機器中的操作在B機器中的操作進行資料測試一些其他需要到的指令如果是另一台MySQL伺服器通過克隆出來

是以簡單下一個結論

A丢失資料這段時間,無法進行資料的插入,B機器能做的就是A機器崩的時候,可以臨時頂替A,然後手工同步資料,再進行切換

為什麼沒有自帶的哨兵模式?

是啊,為什麼沒有自帶的哨兵模式?@MySQL

一些其他需要到的指令

進入本地MySQL之後,要删除使用者dog3

use mysql;
select host,user,password from user;
delete from user where user='dog3';
           

即可完成删除

如果是另一台MySQL伺服器通過克隆出來

那麼,極有可能因為MySQL的id相同,出現以下問題

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
           

方法一:修改配置檔案,直接修改ID

vim /var/lib/mysql/auto.cnf
           

方法二:停止從庫的mysqld服務,删除他的auto.cnf檔案,再啟動資料庫服務即可

sudo service mysqld stop

mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak

sudo service mysqld start

vi /var/lib/mysql/auto.cnf
           

show slave status\G;

再看看從庫的資訊,可以看到恢複正常了

繼續閱讀