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;
看資料是否有進來
沒有留言:
張貼留言