docker安装mysql并配置mysql主从集群

一、安装docker

1.1 安装之前卸载原有的环境
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
1.2 简化安装并安装数据存储驱动包
yum install -y yum-utils device-mapper-persistent-data lvm2
1.3配置阿里云镜像地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.4 yum选择快的安装源
yum makecache fast
1.5 安装docker开源社区版
yum -y install docker-ce
1.6 启动docker
service docker start
1.7 查看docker版本信息
docker version
1.8 开机启动docker
systemctl enable docker
1.9修改阿里云加速器来下载资源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
	"registry-mirrors": ["https://j14v483r.mirrors.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

二、docker安装mysql

2.1 拉取mysql镜像
docker pull mysql
2.2 查看镜像
docker images
2.3 启动容器
docker run \
 --restart=always \
 --privileged=true \
 -p 3306:3306 \
 --name mysql \
 -e MYSQL_ROOT_PASSWORD=root \
 -d mysql:latest \
 --default_authentication_plugin=mysql_native_password \
 --character-set-server=utf8mb4 \
 --collation-server=utf8mb4_general_ci
2.4 创建挂载目录
mkdir -p /mydata/mysql/{conf,logs,data}
2.5 复制容器配置文件到挂载目录
docker cp mysql: /etc/mysql/my.cnf /mydata/mysql/conf/
2.6 销毁容器
docker rm -f 容器ID
2.7 挂载方式启动容器
docker run \
 --privileged=true \
 --restart=always \
 -v /mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf \
 -v /mydata/mysql/data:/var/lib/mysql \
 -v /mydata/mysql/logs:/var/log/mysql \
 --privileged=true \
 -p 3306:3306 \
 --name mysql \
 -e MYSQL_ROOT_PASSWORD=root \
 -d mysql:latest \
 --default_authentication_plugin=mysql_native_password \
 --character-set-server=utf8 \
 --collation-server=utf8_general_ci

docker配置mysql主从复制

3.1 安装mysql
docker pull mysql
3.2 创建主从挂载目录
主:mkdir -p /mydata/mysql/mysql-master/{conf,logs,data}
从:mkdir -p /mydata/mysql/mysql-slave/{conf,logs,data}
3.3启动主从容器 (注:将2.5copy出的my.cnf复制到主从conf目录下)
3.3.1启动主容器
docker run \
 --privileged=true \
 --restart=always \
 -v /mydata/mysql/mysql-master/conf/my.cnf:/etc/mysql/my.cnf \
 -v /mydata/mysql/mysql-master/data:/var/lib/mysql \
 -v /mydata/mysql/mysql-master/logs:/var/log/mysql \
 --privileged=true \
 -p 3306:3306 \
 --name mysql-master \
 -e MYSQL_ROOT_PASSWORD=root \
 -d mysql:latest \
 --default_authentication_plugin=mysql_native_password \
 --character-set-server=utf8 \
 --collation-server=utf8_general_ci
3.3.2启动从容器
docker run \
 --privileged=true \
 --restart=always \
 -v /mydata/mysql/mysql-slave/conf/my.cnf:/etc/mysql/my.cnf \
 -v /mydata/mysql/mysql-slave/data:/var/lib/mysql \
 -v /mydata/mysql/mysql-slave/logs:/var/log/mysql \
 --privileged=true \
 -p 3307:3306 \
 --name mysql-slave \
 -e MYSQL_ROOT_PASSWORD=root \
 -d mysql:latest \
 --default_authentication_plugin=mysql_native_password \
 --character-set-server=utf8 \
 --collation-server=utf8_general_ci
3.4 修改主从my.cnf配置文件
3.4.1 修改主my.cnf
# vim /mydata/mysql/mysql-master/conf/my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

server_id=1
log-bin=mysql-bin
read-only=0

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
3.4.2 修改从my.cnf
# vim /mydata/mysql/mysql-slave/conf/my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

server_id=2
log-bin=mysql-bin
read-only=1

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
server_id:唯一标识,在主从中需唯一
log-bin:开启二进制日志功能
read-only:0为读写,1为只读
replicate-ignore-db:不同步的数据库,一般是Mysql自带的数据库就不同步
binlog-do-db:配置要同步的数据库,不配置则全同步
3.4.3 重启主从容器
重启主容器:docker restart mysql-master
重启从容器:docker restart mysql-slave
3.5 进入mysql主容器并配置从库
3.5.1 进入主mysql
docker exec -it mysql-master bash
mysql -uroot -p '你的密码'
3.5.2 配置从库,同步数据
create user 'slave'@'%' identified by '123456';
grant replication slave,replication client on *.* to 'slave'@'%';
flush privileges;刷新
3.5.3 查看master状态
show master status;

在这里插入图片描述

File和Position字段的值后面将会用到
3.6 进入如mysql从容器并配置
3.6.1 查看master地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id
3.6.2 进入从mysql
docker exec -it mysql-slave bash
mysql -uroot -p '你的密码'
3.6.3 执行命令
change master to master_host='172.17.0.2',master_user='slave',
master_password='123456',master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=171314,master_connect_retry=10,
get_master_public_key=1;
master_host:Master的地址,是容器的对立IP
master_port:Master的端口号,是容器的端口号;
master_user:用于数据同步的用户;
master_password:用于同步用户的密码;
master_log_file:指定Slave从哪个日志文件开始复制数据,即上文中提到的File字段值;
master_log_pos:从哪个Position开始读,即上文中提到的Position字段的值;
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒;
get_master_public_key=1:mysql8.0以上需要使用RSA加密来传输密码
3.6.4 开启主从复制
start slave;
3.6.4 查看主从同步状态
show slave status \G;

在这里插入图片描述

都为YES则配置成功
不要使用super用户操作从库否则从库read-only=1不起作用
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值