环境
服务器 IP mysql-master 10.20.101.92 mysql-slave 10.20.101.125
基础镜像
docker pull mysql:5.7.33
master
mkdir -p /data/mysql/master
cd /data/mysql/master
vim my.cnf
[ mysqld]
log-bin= mysql-bin
server-id= 10
FROM mysql:5.7.33
MAINTAINER xun
ENV TZ Asia/Shanghai
COPY my.cnf /etc/mysql/
docker build --rm -t mysql-master:5.7.33 .
docker run -itd --name mysql --restart always --privileged= true -p 3306:3306 -e MYSQL_ROOT_PASSWORD= admin -v /data/mysql:/var/lib/mysql mysql-master:5.7.33 --character-set-server= utf8 --collation-server= utf8_general_ci
slave
mkdir -p /data/mysql/slave
cd /data/mysql/slave
vim my.cnf
[ mysqld]
log-bin= mysql-bin
server-id= 11
FROM mysql:5.7.33
MAINTAINER xun
ENV TZ Asia/Shanghai
COPY my.cnf /etc/mysql/
docker build --rm -t mysql-slave:5.7.33 .
docker run -itd --name mysql --restart always --privileged= true -p 3306:3306 -e MYSQL_ROOT_PASSWORD= admin -v /data/mysql:/var/lib/mysql mysql-slave:5.7.33 --character-set-server= utf8 --collation-server= utf8_general_ci
配置master权限
create user 'study' @'%' identified by 'study' ;
grant replication slave on *.* to 'study' @'%' ;
flush privileges;
show master status;
show global variables like 'binlog%' ;
show global variables like 'server%' ;
配置slave权限
CHANGE MASTER TO master_host= '10.20.101.92' , master_user= 'study' , master_password= 'study' , master_port= 3306, master_log_file= 'mysql-bin.000003' , master_log_pos= 741;
start slave;
show slave status;
主从测试
create database study;
DROP TABLE IF EXISTS ` tb_user` ;
CREATE TABLE ` tb_user` (
` id ` int( 11) NOT NULL AUTO_INCREMENT COMMENT '主键' ,
` name` varchar( 30) DEFAULT NULL COMMENT '用户名' ,
PRIMARY KEY ( ` id ` )
) ENGINE= InnoDB AUTO_INCREMENT= 3 DEFAULT CHARSET= utf8;
INSERT INTO ` tb_user` VALUES ( 1, '张三' ) ;
INSERT INTO ` tb_user` VALUES ( 2, '李四' ) ;
bitnami/mysql – 非官方集群方式
环境
服务器 IP mysql-master 10.20.101.92 mysql-slave 10.20.101.125
基础镜像
docker pull bitnami/mysql:5.7.33
master
docker run -itd --name mysql-master \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD= 123456 \
-e MYSQL_REPLICATION_MODE= master \
-e MYSQL_REPLICATION_USER= study \
-e MYSQL_REPLICATION_PASSWORD= study \
-v /data/bitnamimysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d \
bitnami/mysql:5.7.33
slave
docker run -itd --name mysql-slave \
-p 3306:3306 \
-e MYSQL_REPLICATION_MODE= slave \
-e MYSQL_REPLICATION_USER= study \
-e MYSQL_REPLICATION_PASSWORD= study \
-e MYSQL_MASTER_HOST= 10.20.101.92 \
-e MYSQL_MASTER_ROOT_PASSWORD= 123456 \
-e MYSQL_MASTER_PORT_NUMBER= 3306 \
bitnami/mysql:5.7.33
主主复制
环境
服务器 IP 端口 备注 mysql-server 10.20.101.92 3301、3302、3303 如果用多台服务器,就涉及到集群
基础镜像
docker pull percona/percona-xtradb-cluster:5.7.32
docker tag percona/percona-xtradb-cluster:5.7.32 pxc:5.7.32
搭建步骤
mkdir -p /data/pxc
cd /data/pxc
mkdir -p v1 v2 v3 master slave
chmod -R 777 /data/pxc
docker network create pxc_network -d bridge
version: '3.8'
services:
pxc01:
restart: always
image: pxc:5.7.32
container_name: pxc01
privileged: true
ports:
- 3301:3306
environment:
- MYSQL_ROOT_PASSWORD= 123456
- CLUSTER_NAME= pxc
volumes:
- /data/pxc/v1:/var/lib/mysql
networks:
default:
external:
name: pxc_network
docker-compose up -d
version: '3.8'
services:
pxc02:
restart: always
image: pxc:5.7.32
container_name: pxc02
privileged: true
ports:
- 3302:3306
environment:
- MYSQL_ROOT_PASSWORD= 123456
- CLUSTER_NAME= pxc
- CLUSTER_JOIN= pxc01
volumes:
- /data/pxc/v2:/var/lib/mysql
pxc03:
restart: always
image: pxc:5.7.32
container_name: pxc03
privileged: true
ports:
- 3303:3306
environment:
- MYSQL_ROOT_PASSWORD= 123456
- CLUSTER_NAME= pxc
- CLUSTER_JOIN= pxc01
volumes:
- /data/pxc/v3:/var/lib/mysql
networks:
default:
external:
name: pxc_network
docker-compose up -d