docker安装的mysql8部分表主从同步配置

环境介绍

主数据库:192.168.1.129

从数据库:192.168.1.130

需求:只同步主数据库中的test库中的test_user表的数据到从数据库中

基础环境配置(主从服务器都是一样的操作)

关闭防火墙
systemctl stop firewalld
关闭selinux
#临时关闭
setenforce 0

#永久关闭,SELINUX=enforcing改为SELINUX=disabled
vi /etc/selinux/config
#修改完之后重启服务器才能生效
替换yum为阿里云的
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#缓存清理
yum clean cache

#生成缓存
yum makecache
安装docker
#查看是否安装了docker,没有就安装docker
docker version

#安装yum-utils:
yum install -y yum-utils device-mapper-persistent-data lvm2

#为yum源添加docker仓库位置:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 
#安装docker
yum install docker-ce
 
#启动docker
systemctl start docker
拉取mysql8.0.21
docker pull mysql:8.0.21

#运行mysql
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=admin  -d mysql:8.0.21

#将mysql容器内的my.cnf文件copy出来,
mkdir /opt/mysql
docker cp mysql:/etc/mysql/my.cnf /opt/mysql/

#停mysql,删掉mysql容器,上面重启就是为了把配置文件copy出来
docker stop mysql
docker rm mysql

主数据库配置

修改/opt/mysql/my.cnf文件
在[mysqld]下添加如下配置
server-id=1
log-bin=mysql-bin
#不同步数据库
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#只仅同步数据库
binlog-do-db=test
#mysql复制模式,三种:SBR(基于sql语句复制),RBR(基于行的复制),MBR(混合模式复制)
binlog_format=MIXED 
#混合模式复制,可靠性更高
重启mysql
#挂载my.cnf到容器中
docker run -p 3306:3306 \
--name mysql \
-e MYSQL_ROOT_PASSWORD=admin \
-v /opt/mysql/my.cnf:/etc/mysql/my.cnf \
-d mysql:8.0.21
重新登陆数据库并锁主库
flush tables with read lock;
主数据库中增加repl用户和授权
--创建账号为repl,密码为repl的用户,ip为192.168.1.130是从数据库的ip,这个账号只能从130登录
CREATE USER 'repl'@'192.168.1.130' IDENTIFIED BY 'repl';
--给repl赋予权限
GRANT ALL ON *.* TO 'repl'@'192.168.1.130';
--刷新MySQL的系统权限相关表
flush  privileges;
查看主库状态
show master status

这里的File和Position会在从库配置中用到,需要做个记录

在这里插入图片描述

解锁主库表
unlock tables;

从库配置

配置从库my.cnf配置文件,这个文件也挂载在/opt/mysql/目录下
#[mysqld]中增加代码
server-id=2
log-bin=mysql-bin
#只同步test库中的test_user表的数据
replicate-do-table=test.test_user
binlog_format=MIXED

replicate-do-db 设定需要复制的数据库(多数据库使用逗号,隔开)
replicate-ignore-db 设定需要忽略的复制数据库 (多数据库使用逗号,隔开)
replicate-do-table 设定需要复制的表
replicate-ignore-table 设定需要忽略的复制表
replicate-wild-do-table 同replication-do-table功能一样,但是可以通配符
replicate-wild-ignore-table 同replication-ignore-table功能一样,但是可以加通配符

重启mysql
#挂载my.cnf到容器中
docker run -p 3306:3306 \
--name mysql \
-e MYSQL_ROOT_PASSWORD=admin \
-v /opt/mysql/my.cnf:/etc/mysql/my.cnf \
-d mysql:8.0.21
登陆从数据库,从库设置repl复制主库数据
change master to master_host='192.168.1.129',master_user='repl',master_log_file='mysql-bin.000001',master_log_pos=156,get_master_public_key=1;

解读上面的sql命令

change master to master_host=‘主mysql服务器ip’,master_user=‘repl’,master_password=‘repl’,master_log_file=‘主库中File的值’,master_log_pos=主库中Postion的值,get_master_public_key=1;

启动从库复制
start slave;
查看从库是否同步上主库

在这里插入图片描述

实际测试

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐