docker安装mysql 模拟一主多从数据库

拉取mysql 镜像

docker pull mysql:5.7.36

在这里插入图片描述

创建容器

创建以下几个文件夹
master
slave1
slave2
在这里插入图片描述

创建主数据库

docker run \
--name mysql-master \
-p 3307:3306 \
-v  /usr/local/docker/mysql/data/master:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.36

创建从数据库1

docker run \
--name mysql-slave1 \
-p 3308:3306 \
-v  /usr/local/docker/mysql/data/slave1:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.36

创建从数据库2

docker run \
--name mysql-slave2 \
-p 3309:3306 \
-v  /usr/local/docker/mysql/data/slave2:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.36

tip:参数说明

–name mysql-master :设置容器名称。
-p 3306:3306 :将宿主机的端口映射到容器的端口上。
-v /usr/local/docker/mysql/data/slave1:/var/lib/mysql :将宿主机的目录挂载到容器的目录上,实现数据的持久化。
-e MYSQL_ROOT_PASSWORD=root :设置环境变量,这里是设置了root账号的密码。
-d mysql:5.7.36 :指定创建容器的镜像,并使用守护进程的方式来运行,镜像可以用名称或者ID来指定,使用名称时可以设置标签,当本地找不到对应的镜像时会去线上公共仓库拉取。

配置主从

配置主库

查看主数据库的局域网ip

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master

在这里插入图片描述
进入主数据库

docker exec -it mysql-master /bin/bash

安装vim

apt-get update
apt-get install -y vim

问题:执行apt-get update时报错


root@3c04cb20100f:/# apt-get update
Err:1 http://deb.debian.org/debian buster InRelease                                                 
  Temporary failure resolving 'deb.debian.org'
Err:2 http://security.debian.org/debian-security buster/updates InRelease                           
  Temporary failure resolving 'security.debian.org'
Err:3 http://repo.mysql.com/apt/debian buster InRelease              
  Temporary failure resolving 'repo.mysql.com'
Err:4 http://deb.debian.org/debian buster-updates InRelease     
  Temporary failure resolving 'deb.debian.org'
Reading package lists... Done    
W: Failed to fetch http://deb.debian.org/debian/dists/buster/InRelease  Temporary failure resolving 'deb.debian.org'
W: Failed to fetch http://security.debian.org/debian-security/dists/buster/updates/InRelease  Temporary failure resolving 'security.debian.org'
W: Failed to fetch http://deb.debian.org/debian/dists/buster-updates/InRelease  Temporary failure resolving 'deb.debian.org'
W: Failed to fetch http://repo.mysql.com/apt/debian/dists/buster/InRelease  Temporary failure resolving 'repo.mysql.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
root@3c04cb20100f:/# cat /etc/apt/sources.list
# deb http://snapshot.debian.org/archive/debian/20211220T000000Z buster main
deb http://deb.debian.org/debian buster main
# deb http://snapshot.debian.org/archive/debian-security/20211220T000000Z buster/updates main
deb http://security.debian.org/debian-security buster/updates main
# deb http://snapshot.debian.org/archive/debian/20211220T000000Z buster-updates main
deb http://deb.debian.org/debian buster-updates main

解决
退出数据库,重启docker

root@3c04cb20100f:/# exit
exit
systemctl restart docker

修改主数据库配置

vim /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
pid-file         = /var/run/mysqld/mysqld.pid
socket           = /var/run/mysqld/mysqld.sock
datadir          = /var/lib/mysql
#log-error       = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address    = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links   = 0
##新增
server_id        = 1
log_bin          = mysql-bin
binlog_format    = statement
expire_logs_days = 30
binlog_ignore_db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys

tip:参数说明

datadir :数据文件存储目录,与创建容器时候挂载的目录要一致。
bind-address :注释掉后允许远程访问。
server_id :服务ID,集群内必须保证唯一。
log_bin :开启二进制日志功能并设置日志文件名称,作为主数据库必须开启。
expire_logs_days :二进制日志过期天数。
binlog_ignore_db :指定不记录日志的数据库,也可以使用binlog_do_db指定需要记录日志的数据库。

重启服务

docker restart mysql-master

mysql -u root -p

#查看二进制日志功能是否开启成功:
show variables like 'log_bin'; // on

#创建同步用的用户 hwy_slave,设置密码为 hwy123456,分配同步权限并查看是否分配成功:
CREATE USER 'hwy_slave'@'%' IDENTIFIED BY 'hwy123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'hwy_slave'@'%';
show GRANTS for 'hwy_slave'@'%';
#查看主服务器状态,记录 File 和 Position 的值
show master status;
  	File: mysql-bin.000001
  	Position: 625

配置从库

安装vim,同主数据库。

进入从数据库

docker exec -it mysql-slave1 /bin/bash

修改配置

vim /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
pid-file            = /var/run/mysqld/mysqld.pid
socket              = /var/run/mysqld/mysqld.sock
datadir             = /var/lib/mysql
#log-error          = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address       = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links      = 0

server_id           = 11
relay_log           = mysql-slave-relay
replicate_ignore_db = mysql
replicate_ignore_db = information_schema
replicate_ignore_db = performation_schema
replicate_ignore_db = sys
slave-skip-errors = all

tip:参数说明

server_id :服务ID,集群内必须保证唯一。
relay_log :中继日志,开启后将主数据库的二进制日志先存储到从服务器的本地中继日志文件中,然后再读取中继日志应用到从数据库。
replicate_ignore_db :指定不需要同步的数据库,也可以使用replicate-do-db指定需要同步的数据库。

重启数据库

docker restart mysql-slave1

重新进入从数据库,设置主从

mysql -uroot -proot
CHANGE MASTER TO MASTER_HOST='172.17.0.2',MASTER_PORT=3306,MASTER_USER='hwy_slave',MASTER_PASSWORD='hwy123456',MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=625;   

tip:参数说明

MASTER_HOST :主数据库服务所在的主机IP,这里填写的是前面记录的 mysql-master 容器的局域网IP。
MASTER_PORT :主数据库服务绑定的端口。
MASTER_USER :主数据库服务创建的拥有同步权限的用户账号。
MASTER_PASSWORD :授权账号对应的密码。
MASTER_LOG_FILE :需要读取的主数据库二进制日志文件名称。
MASTER_LOG_POS :从主数据库二进制日志指定位置开始读取。
启动主从

mysql> start slave;

查看从库状态

mysql> show slave status \G;

测试

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值