Docker 容器--从0开始部署mysql主从&主主架构

主从架构

方案,docker容器化部署主从

准备

centos7.6,docker-1.13.1,mariadb:latest

#yum install yum-utils device-mapper-persistent-data lvm2 -y
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#yum install docker-ce -y
# 修改daemon配置文件/etc/docker/daemon.json来使用加速器
#sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://vb10fi3t.mirror.aliyuncs.com"]
}
EOF
#systemctl daemon-reload
#systemctl restart docker
#拉取mariadb镜像
#docker pull mariadb
创建mysql数据的本地目录
#mkdir -pv /data/mysql/{master/{data,conf},slave/{data,conf}}

#touch /mysql/master/conf/my.cnf
#touch /mysql/slave/conf/my.cnf

#tree mysql

在这里插入图片描述

主主配置文件
master
......
[mysqld]
server_id = 1
log-bin= mysql-bin
read-only=0
......
master_2
......
[mysqld]
server_id = 2
log-bin= mysql-bin
read-only=0
......
启动容器master
#docker run --name master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123 -v /data/mysql/master/data:/var/lib/mysql -v /data/mysql/master/conf/my.cnf:/etc/my.cnf --privileged=true -d mariadb
启动容器slave
#docker run --name slave -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123 -v /data/mysql/slave/data:/var/lib/mysql -v /data/mysql/slave/conf/my.cnf:/etc/my.cnf --privileged=true -d mariadb
配置容器master
//进入容器master
#docker exec -it master bash
//登入mysql
#mysql -uroot -p 
password:123
//创建一个用户来同步数据,每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE 权限。
> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
//创建一个slave同步账号slave,允许访问的IP地址为%
> grant replication slave on *.* to 'slave'@'%' identified by '123456';
//查看状态,记住File、Position的值,在Slave中将用到
show master status/G;
配置容器slave
//进入容器slave
#docker exec -it slave bash
//登入mysql
#mysql -uroot -p 
password:123
//设置主库链接
> change master to master_host='172.17.0.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3306;
//启动从库同步
> start slave;
//查看slave状态
show slave status/G;
......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
上述两项都为YES 表示主从同步OK

如果出现错误,请滑动到最下方问题?↓

主主架构

准备

centos7.6,docker-1.13.1,mariadb:latest

#docker pull mariadb
创建mysql数据的本地目录
#mkdir -pv /data/mysql/{master_1/{data,conf},master_2/{data,conf}}

#touch /mysql/master_1/conf/my.cnf
#touch /mysql/master_2/conf/my.cnf

#tree mysql

在这里插入图片描述

主主配置文件
master_1
......
[mysqld]
server_id = 1
log-bin= mysql-bin
read-only=0
auto_increment_offset=1
auto_increment_increment=2
......
master_2
......
[mysqld]
server_id = 2
log-bin= mysql-bin
read-only=0
auto_increment_offset=2
auto_increment_increment=2
......
启动容器master_1
#docker run --name master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123 -v /data/mysql/master_1/data:/var/lib/mysql -v /data/mysql/master_1/conf/my.cnf:/etc/my.cnf --privileged=true -d mariadb
启动容器master_2
#docker run --name slave -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123 -v /data/mysql/master_2/data:/var/lib/mysql -v /data/mysql/master_2/conf/my.cnf:/etc/my.cnf --privileged=true -d mariadb
配置容器master_1
//进入容器master_1
#docker exec -it master_1
#mysql -u root -p
password:123
//创建一个用户来同步数据.这里表示创建一个slave同步账号slave,允许访问的IP地址为%,%表示通配符
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';

//查看状态,记住File、Position的值
show master status;
配置容器master_2
//进入容器master_2
docker exec -it master_2
#mysql -u root -p
password:123

//设置主库链接,master_host即为容器IP,master_log_file和master_log_pos即为在maseter_2容器中,通过show master status查出来的值;
change master to master_host='172.17.0.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000005',master_log_pos=536,master_port=3306;
//创建一个用户来同步数据
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';
//启动同步
start slave ;
//查看状态
show master status;
再次进入master_1
//进入master_1容器

docker exec -it master_1
#mysql -u root -p
password:123

//设置master_2主库链接,参数详细说明同上
> change master to master_host='172.17.0.3',master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=536,master_port=3306;
//启动同步
> start slave ;

验证

#### master_1添加数据
> create database demo_03;
> use demo_03;
> create table user_info(name varchar(20),age int);
> insert into user_info values('abc',1000);
> select name,age from userinfo;
master_2 查看
> select name,age from demo_03.user_info;

如果两次数据一致,表示主主同步成功。

问题:

问题一 执行docker run image 使用docker ps 查看,结果并没有启动中的容器

#docker logs master
find: '/var/lib/mysql/': Permission denied
chown: changing ownership of '/var/lib/mysql/': Permission denied

–privileged=true #给容器加上特定权限;解决问题

关闭selinux # 我尝试了,没解决问题

问题二 Slave_SQL_Running: No

方案一 :

stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave ;

方案二:

查看master状态

show master status;
file项:mysql-bin.000003

进入slave

stop slave;
change master to >master_host=‘master_ip’,master_user=‘user’,master_password=‘123456’,master_log>_file=‘mysql-bin.000003’,master_log_pos=0,master_port=3306;
start slave;

(想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值