Golang仿雲盤項目-3.1 MySQL主從數據同步(一)
話說,這個課的影片真是缺斤少兩。。。
服務架構變遷
本文來自部落格園,作者:Jayvee,轉載請註明原文鏈接://www.cnblogs.com/cenjw/p/16464465.html
環境
- Docker安裝
- 從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
解析:
--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
2.2.1. 找到將作為主節點的binlog資訊
show master status; # 主mysql里查詢
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;
以下兩個都是yes,表明已經複製成功
Slave_IO_Running: Yes 連接主庫,讀取日誌文件到本地
Slave_SQL_Running: Yes 從日誌文件中讀取sql語句執行
本文來自部落格園,作者:Jayvee,轉載請註明原文鏈接://www.cnblogs.com/cenjw/p/16464465.html
測試是否開啟同步
-
在主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;;
-
在從mysql查看:
show tables; show slave status\G;
-
在從mysql往測試表插入一條數據
insert into tbl_test(user, age) values('james', 40);
查看主mysql狀態
show master status;
環境配置參考
[1]//www.cnblogs.com/zmk-c/p/15306600.html