mysql
# 版本 mysql:8.0.28
# mysql文件绑定挂载,使用系统的/Users/jaylen/var/lib/mysql 目录
# 配置文件挂载到docker volume
docker run --name mysql-master -v /Users/jaylen/var/lib/mysql:/var/lib/mysql -v mysql-master-home:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -dp 3306:3306 mysql:8.0.28
# slaver
docker run --name mysql-slaver -v /Users/jaylen/var/lib/mysql-slaver:/var/lib/mysql -v mysql-slaver-home:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -dp 3316:3306 mysql:8.0.28
复制
用mysql的docker镜像一主一从配置:
假设已经安装了俩mysql8:mysql-master和mysql-slaver,端口分别为3306,3316。如下是配置步骤:
serverid配置:在mysql配置文件:conf.d中配置,也可以设置全局变量。
-
Mysql.cnf配置
master上:(server-id默认是1,递增的整型,可以不配)
[mysqld]
log-bin=mysql-bin
server-id=1
slaver上:
[mysqld]
log-bin=mysql-bin
server-id=2 -
配置一个复制权限的用户,专门用来复制bin log
CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'slave'@'%';
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave'; // 改为内置的密码认证方式,否则后面配置同步数据时密码需要填加密后的
FLUSH PRIVILEGES; -
master数据库加锁,防止操作过程中有数据变动。历史数据迁移:手动导出master数据库dump到slaver。(步骤省略)
-
master上查看状态
show master status;
得到file和position的值,下面设置时需要。 -
slaver上认主
CHANGE MASTER TO
master_host = '172.17.0.2',
master_port = 3306,
master_log_file = 'mysql-bin.000002', // master status 里的 file
master_log_pos = 5153, // master status 里的position 从这里开始复制
master_user = 'slave',
master_password = 'slave';
这里端口就是docker暴露出来的端口,但是host需要查看一下。
docker inspect containerID|containerName; // 找到容器对应的地方写着ip
或者执行下面这句,得到ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名或id 查看master的ip(docker内容器的ip) -
slaver开启及其他操作
start slave; // 开启主从复制
stop slave; // stop
reset slave; // 停下后重置,完了可以重新设置 第五步(change master to)
show slave status; // 查看slaver状态