docker安装的mysql8部分表主从同步
docker安装的mysql8部分表主从配置环境介绍主数据库:192.168.1.129从数据库:192.168.1.130需求:只同步主数据库中的test库中的test.user表的数据到从数据库中基础环境配置(主从服务器都是一样的操作)关闭防火墙systemctl stop firewalld关闭selinux#临时关闭setenforce 0#永久关闭,SELINUX=enforcing改为
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;
查看从库是否同步上主库

实际测试

更多推荐
所有评论(0)