2022年12月27日 星期二

docker mysql 主從複製

 1.主服務器

docker run -p 3307:3306 --name mysql-master \

-v /mydata/mysql-master/log:/var/log/mysql \

-v /mydata/mysql-master/data:/var/lib/mysql \

-v /mydata/mysql-master/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

2.在/mydata/mysql-master/conf 新建my.cnf

cd /mydata/mysql-master/conf 

sudo vi my.cnf

[mysqld]

##設置server_id,同一網域中需要唯一

server_id=101

##指定不需要同步的數據名稱

binlog-ignore-db=mysql

##開啟二進制日誌功能

log-bin=mall-mysql-bin

##設置二進制日誌使用記憶體大小(事務)

binlog_cache_size=1M

##設置使用的二進制日誌格式(mixed,statement,row)

binlog_format=mixed

##二進制日誌過期清理時間。默認值為0,表示不自動清理

expire_logs_days=7

##跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免slave端複製中斷

##如:1062錯誤是指一些主鍵重複,1032錯誤是因為主從數據不一致

slave_skip_errors=1062

3.修改後重啟master

docker restart mysql-master

4.進入mysql-master 容器

docker exec -it mysql-master /bin/bash

mysql -uroot -proot

show databases;

5.mysql-master容器內建數據同步用戶

create user 'slave'@'%' identified by '12345678';

grant replication slave,replication client on *.* to 'slave'@'%';

6.新建從服務器

docker run -p 3308:3306 --name mysql-slave \

-v /mydatamysql-slave/log:/var/log/mysql \

-v /mydata/mysql-slave/data:/var/lib/mysql \

-v /mydata/mysql-slave/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

7.在/mydata/mysql-slave/conf 新建my.cnf

cd /mydata/mysql-slave/conf 

sudo vi my.cnf

[mysqld]

##設置server_id,同一網域中需要唯一

server_id=102

##指定不需要同步的數據名稱

binlog-ignore-db=mysql

##開啟二進制日誌功能,以備slave作為其他數據實例的master時使用

log-bin=mall-mysql-slave1-bin

##設置二進制日誌使用記憶體大小(事務)

binlog_cache_size=1M

##設置使用的二進制日誌格式(mixed,statement,row)

binlog_format=mixed

##二進制日誌過期清理時間。默認值為0,表示不自動清理

expire_logs_days=7

##跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免slave端複製中斷

##如:1062錯誤是指一些主鍵重複,1032錯誤是因為主從數據不一致

slave_skip_errors=1062

##relay_log配置中繼日誌

relay_log=mall-mysql-relay-bin

##log_slave_updates表示slave將複製事件寫入自己的二進制日誌

log_slave_updates=1

##slave設置為只讀(具有super權限的用戶除外)

read_only=1

8.修改後重啟slave

docker restart mysql-slave

9.在主數據庫中查看主從同步狀態

在主服務器的mysql中,show master status;

10.進入mysql-slave 容器

docker exec -it mysql-slave /bin/bash

mysql -uroot -proot

show databases;

11.在從服務器數據庫中配置主從複製-->在mysql中

change master to master_host='宿主機IP',master_user='slave',master_password='12345678',master_port=3307,master_log_file='mall-mysql-bin.000001',master_log_pos=617,master_count_retry=30;

12.在從服務器數據庫中查看主從同步狀態

show slave status \G;

看slave_io_running:no   slave_sql_running:no -->表示還沒開始同步

13.在從服務器數據庫中開啟主從同步

start slave;

14.查看從服務器數據庫狀態發現已經同步

show slave status \G;

看slave_io_running:yes   slave_sql_running:yes -->表示已經開始同步

15.主從複製測試

在主服務器數據庫

create database db01;

use db01;

create table t1 (id int,name varchar(20));

insert into t1 values(1,'z3');

select * from t1;

在從服務器數據庫

use db01;

select * from t1;

看資料是否有進來





沒有留言:

張貼留言