Golang仿雲盤項目-3.1 MySQL主從數據同步(一)

話說,這個課的影片真是缺斤少兩。。。

服務架構變遷

image

image

本文來自部落格園,作者:Jayvee,轉載請註明原文鏈接://www.cnblogs.com/cenjw/p/16464465.html

環境

  1. Docker安裝
  2. 從dockerhub上拉取Mysql鏡像 //hub.docker.com/_/mysql

配置主從節點

1.創建文件夾及文件

mkdir -p ~/mysql/master/conf
cd ~/mysql/master/conf
vim my.cnf
輸入:

[mysqld]
#主資料庫端ID號(為1時表示為master,其中master_id必須為1到232-1之間的一個正整數值,主從server-id不能一樣)
server_id = 1           
#開啟二進位日誌                  
log-bin = mysql-bin                             

mkdir -p ~/mysql/slave/conf
vim my.cnf

[mysqld]
server-id=2
relay-log=relaylogs

2. 基於日誌binlog方式

2.1 主從mysql掛載啟動

# 主節點掛載啟動
docker run --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/cenjw/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /home/cenjw/mysql/master/data:/var/lib/mysql -d mysql
# 從節點掛載啟動
docker run --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/cenjw/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf -v /home/cenjw/mysql/slave/data:/var/lib/mysql -d mysql

image

解析:

  • --name 容器名 給容器取名字為mysql-master
  • -p 埠1:埠2 埠1是對外暴露的埠(即宿主機的埠),埠2 是mysql埠
  • -e MYSQL_ROOT_PASSWORD=密碼 即root用戶的密碼
  • -d mysql 代表後台運行我們的mysql
  • -v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf 代表將宿主機 /home/docker/mysql/master/conf/my.cnf 配置文件掛載到 mysql容器的/etc/mysql/my.cnf
  • -v /home/docker/mysql/master/data:/var/lib/mysql代表將宿主機/home/docker/mysql/master/data 配置文件掛載到 mysql容器的/var/lib/mysql
  • 指定了容器中指定目錄掛載到宿主機上的某個目錄,這樣做的目的在於防止容器中配置的數據丟失,因為docker容器在重啟之後是不會保留前一次在其內部運行的相關數據的;

本文來自部落格園,作者:Jayvee,轉載請註明原文鏈接://www.cnblogs.com/cenjw/p/16464465.html

2.2 主從mysql配置
打開兩個終端窗口,啟動待配置的主從mysql
image

2.2.1. 找到將作為主節點的binlog資訊

show master status;  # 主mysql里查詢

image

2.2.2 在主mysql中創建賬戶
然後我們需要為從伺服器創建一個可以用來master伺服器的賬戶,也就是創建一個專門用來複制binlog的帳號,並且賦予該帳號複製許可權,其命令如下:

# 創建reder用戶
CREATE USER 'reader'@'%' IDENTIFIED WITH mysql_native_password BY 'reader';
# 賦予許可權
GRANT REPLICATION SLAVE ON *.* TO 'reader'@'%';
# 刷新許可權
flush privileges;

2.2.3 到從節點,配置master資訊

CHANGE MASTER TO MASTER_HOST='172.20.10.9',MASTER_USER='reader',MASTER_PASSWORD='reader',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=0;

MASTER_HOST 通過ifconfig查看你本機地址
MASTER_LOG_POS=0:表示預置從最開始的地方複製binlog

2.2.4 查看是否配置成功

#開啟複製
start slave;
#查看複製有無成功
show slave status\G;

image
以下兩個都是yes,表明已經複製成功

Slave_IO_Running: Yes 連接主庫,讀取日誌文件到本地
Slave_SQL_Running: Yes 從日誌文件中讀取sql語句執行

本文來自部落格園,作者:Jayvee,轉載請註明原文鏈接://www.cnblogs.com/cenjw/p/16464465.html

測試是否開啟同步

  1. 在主mysql創建test1資料庫和test表

    create database test1 default character set utf8;
    create table tbl_test(user varchar(64) not null, age int(3) not null) default charset utf8;;
    
  2. 在從mysql查看:

    show tables;
    show slave status\G;
    
  3. 在從mysql往測試表插入一條數據

    insert into tbl_test(user, age) values('james', 40);
    

    image

    查看主mysql狀態

    show master status;
    

    image

環境配置參考
[1]//www.cnblogs.com/zmk-c/p/15306600.html