拉取mysql5.7鏡像
docker pull mysql:5.7
啟動mysql-master實例3406
執(zhí)行命令docker run -p 3406:3306 --name mysql_m -v /usr/local/zl/tools/mysql_data/mysql_m/log:/var/log/mysql -v /usr/local/zl/tools/mysql_data/mysql_m/data:/var/lib/mysql -v /usr/local/zl/tools/mysql_data/mysql_m/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
配置master
在/usr/local/zl/tools/mysql_data/mysql_m/conf目錄下創(chuàng)建my.cnf文件(需要在自己配置的容器卷路徑創(chuàng)建該文件)
文件內(nèi)容為:
[mysqld]
##設(shè)置server_id胚吁,同一局域網(wǎng)內(nèi)唯一
server_id=101
##指定不需要同步的數(shù)據(jù)庫的名稱
binlog-ignore-db=mysql
##開啟二進制日志功能
log-bin=mall-mysql-bin
##設(shè)置二進制日志使用內(nèi)存的大小
binlog_cache_size=1M
##設(shè)置使用的二進制日志格式(mixed,statement,row)
binlog_format=mixed
##二進制日志過期清理時間胚想,0表示不清理
expire_logs_days=7
##跳過主從復(fù)制中遇到的所有錯誤或者指定類型的錯誤译荞,避免slave端復(fù)制中斷来惧,如1062錯誤是指主鍵重復(fù)碗誉,1032錯誤是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致
slave_skip_errors=1062
重啟mysql_m實例
docker restart mysql_m
創(chuàng)建主從同步賬戶
進入mysql_m容器:docker exec -it mysql-m /bin/bash,登錄mysql:mysql -u root -p 輸入密碼:root
創(chuàng)建slave用戶:create user 'slave'@'%' identified by '123456';
賦予slave用戶權(quán)限:grant replication slave,replication client on . to 'slave'@'%'
啟動從數(shù)據(jù)實例mysql_s
執(zhí)行命令
docker run -p 3407:3306 --name mysql_s -v /usr/local/zl/tools/mysql_data/mysql_s/log:/var/log/mysql -v /usr/local/zl/tools/mysql_data/mysql_s/data:/var/lib/mysql -v /usr/local/zl/tools/mysql_data/mysql_s/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
配置mysql_s實例的配置文件
在/usr/local/zl/tools/mysql_data/mysql_s/conf目錄下創(chuàng)建my.cnf泉唁,文件內(nèi)容為
[mysqld]
##server_id雷酪,同一局域網(wǎng)內(nèi)唯一
server_id=102
##不需要同步的數(shù)據(jù)庫
binlog-ignore-db=mysql
##開啟二進制日志功能,以備slave作為其他數(shù)據(jù)庫實例的master時使用
log-bin=mall-mysq-slave1-bin
##設(shè)置二進制日志使用內(nèi)容大小
binlog_cache_size=1M
##二進制日志格式
binlog_format=mixed
##二進制日志過期清理時間释涛,默認(rèn)為0加叁,表示不自動清理
expire_logs_days=7
##跳過主從復(fù)制中遇到的所有的錯誤或指定類型的信息
slave_skip_errors=1062
##relay_log配置中繼日志
relay_log=mall-mysql-relay-bin
##log_slave_updates表示slave將復(fù)制事件寫進自己的二進制日志
log_slave_updates=1
##slave設(shè)置為只讀(具有super權(quán)限的用戶除外)
read_only=1
重啟mysql_s實例
docker restart mysql_s
在主數(shù)據(jù)庫中查看主從同步狀態(tài)
在mysql_m的容器內(nèi)部執(zhí)行show master status;
進入msyql_s容器
docker exec -it mysql_s /bin/bash進入容器,執(zhí)行msyql -u root -p 輸入密碼root
在從數(shù)據(jù)庫中配置主從復(fù)制
執(zhí)行命令:change master to master_host='10.201.56.79',master_user='slave', master_password='123456', master_port=3406, master_log_file='mall-mysql-bin.000001' , master_log_pos=617, master_connect_retry=30;
從數(shù)據(jù)庫中查看主從同步的狀態(tài)
執(zhí)行命令:show slave status \G;
可以發(fā)現(xiàn)
Slave_IO_Running: No
Slave_SQL_Running: No
為No表示還沒有開始
從數(shù)據(jù)庫開啟主從同步
在從數(shù)據(jù)庫實例中執(zhí)行start slave唇撬,再次執(zhí)行show slave status \G;查看主從同步狀態(tài)它匕,發(fā)現(xiàn)Slave_IO_Running和Slave_SQL_Running變?yōu)榱藋es,說明開始復(fù)制工作
主從復(fù)制測試
登錄mysql_m執(zhí)行命令:
create database db1;
use db1;
create table t1(id int,name varchar(20));
insert into t1 values(1,'zhangsan');
在主機上查看表t1的內(nèi)容,查到數(shù)據(jù)表明主庫寫入數(shù)據(jù)成功
登錄msyql_s查看是否同步了主庫mysql_m的數(shù)據(jù),可以看到db1數(shù)據(jù)庫已經(jīng)同步窖认,表t1的數(shù)據(jù)也已經(jīng)同步
至此說明主從數(shù)據(jù)庫搭建成功