主从架构
方案,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社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)