阿里云ECS,公网IP 121.40.110.2
使用docker安装mysql8,创建三个容器:
实例A:A数据库 A表
实例B:B数据库 B表
实例C:C数据库C表
两种情形:
第一种
A库和B库同步到实例C;
第二种
A库A表和B库B表同步到C库
一、使用docker创建mysql8容器
1、安装docker
yum install docker -y
systemctl start docker
systemctl enable docker
2、拉取mysql镜像
docker pull mysql
docker images
3、启动三个mysql容器mysql8-1、mysql8-2、mysql8-3
docker run --name mysql8-1 -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker run--name mysql8-2 -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker run--name mysql8-3 -p 3312:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
4、进入mysql8-1容器(先不要建自己的datingcenter等后面测试的库)
docker exec -it mysql8-1 /bin/bash
连接数据库,查看数据库版本
5、设置数据库远程连接
设置远程登录数据库的root账户
mysql8和mysql5的版本不一样,具体操作
GRANT ALL ON *.* TO 'root'@'%';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;
6、创建用户slave用于从库同步复制,授予复制、同步访问
mysql8和mysql5的版本不一样,具体操作
mysql> use mysql;
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
mysql>ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql> GRANT replication slave ON *.* TO 'slave'@'%';
mysql>FLUSH PRIVILEGES;
其他两个容器同样操作
容器安装编辑器vim
https://www.cnblogs.com/xiaoyou2018/p/10912117.html
二、配置数据库多源一从
和mysql一主一从复制相比,多源复制加入了一个叫做Channel的概念, 每一个Channel都是一个独立的Slave,都有一个IO_THREAD和SQL_THREAD。原理和普通复制一样。我们只需要对每一个Master执行Change Master 语句,只需要在每个语句最后使用For Channel来进行区分。多源复制和正常主从其他的配置都一样,基本上主库开下binlog、server-id不一样就可以了,只有下列额外限制:
master-info-repository必须为TABLE
relay-log-info-repository必须为TABLE
以FOR CHANNEL 'CHANNEL_NAME'区分不同的master。
第一种情形:
主库同步到从库的情况如下配置:
主库mysql8-1:IP=121.40.110.2; PORT=3310; server-id=1; database=datingcenter; table=aa、dd
主库mysql8-2:IP=121.40.110.2; PORT=3311; server-id=2; database=usercenter ;table=cc、bb
从库mysql8-3:IP=121.40.110.2; PORT=3312; server-id=3; database=datingcenter、usercenter、matchcenter ;table=aa、dd、cc、bb
配置约束
主从库必须保证网络畅通可访问
主库必须开启binlog日志
主从库的server-id必须不同
【主库mysql8-1】操作及配置
配置my.cnf(/etc/mysql/my.cnf)
添加如下的内容
client]
port= 3306default-character-set =utf8mb4
[mysql]
port= 3306default-character-set =utf8mb4
[mysqld]
##########################
# summary
##########################
#bind-address = 0.0.0.0#port= 3306#datadir=/datavol/mysql/data #数据存储目录
##########################
# log bin
##########################
server-id = 1#必须唯一
log_bin= mysql-bin #开启及设置二进制日志文件名称
binlog_format=MIXED
sync_binlog= 1expire_logs_days=7 #二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
#binlog_cache_size=128m
#max_binlog_cache_size=512m
#max_binlog_size=256M
#要同步的数据库
binlog-do-db =datingcenter
#不需要同步的数据库
binlog-ignore-db =mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema
binlog_ignore_db=sys
########################## # character set ##########################
character-set-server =utf8mb4
collation-server = utf8mb4_unicode_ci
log_bin是否开启
mysql> show variables like 'log_bin&#