dockermysql8主从配置

编程

 

随着mysql镜像的升级, 以前的docker run命令中的挂载目录会无效, 做个记录 

主从的文件目录是一样的, 所以conf配置 我们需要两份 下面操作都一样

master

--data

--conf

--logs

slave

--data

--conf

--logs

 

第一步 临时启动mysql 退出容器 不产生容器信息

docker run --rm --name mysqltemp -it -v /usr/local/docker/mysql/slave/conf/:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456 mysql /bin/bash 

将本地想要放配置文件的目录 挂载在容器的/var/lib/mysql 目的是想复制配置文件下来 

因为尝试了自己编写 和 手动复制的方法 都无法启动容器, 也不知道哪里的毛病, 竟给自己挖坑

 

第二步 复制my.cnf 和 依赖配置文件

cp /etc/mysql/my.cnf /var/lib/mysql

cp -R /etc/mysql/conf.d/ /var/lib/mysql/conf.d

好像是在8.0版本以前的mysql 一个my.cnf就可以了, 后来需要依赖配置文件的支持, 不然容器的挂载配置文件(my.cnf)是无效的

主从时会报server-id不能相同的问题等等

执行完命令 即可exit 退出临时容器 查看/usr/local/docker/mysql/slave/conf/ 目录下 就有刚cp下来的文件和目录

 

第三步 

从容器cp下来的配置文件可能会有几个不等, 我们只需要修改my.cnf文件即可

[root@iZbp18caz0f7upvfdk2vzeZ conf]# cat my.cnf

# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.

#

# This program is free software; you can redistribute it and/or modify

# it under the terms of the GNU General Public License as published by

# the Free Software Foundation; version 2 of the License.

#

# This program is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

# GNU General Public License for more details.

#

# You should have received a copy of the GNU General Public License

# along with this program; if not, write to the Free Software

# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

#

# The MySQL Server configuration file.

#

# For explanations see

# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

secure-file-priv= NULL

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# 编辑添加server-id 和 log-bin

server-id=100

log-bin=mysql-bin

# Custom config should go here

!includedir /etc/mysql/conf.d/

[root@iZbp18caz0f7upvfdk2vzeZ conf]#

编辑添加server-id 和 log-bin

server-id确保唯一, 和主从不冲突就ok, 复制的时候记得修改该值

log-bin的mysql-bin 可以自己定义, 这里根据其主从复制原来名取了mysql-bin

简述 mysql的复制原理

  • mysql主库在事务提交时会把数据库变更作为事件Events记录在二进制文件binlog中; mysql主库上的sys_binlog控制binlog日志刷新到磁盘
  • 主库推送二进制文件binlog到从库的中继日志relay log, 之后从库根据中继日志重做数据库变更操作; 通过逻辑复制, 以此来达到数据一致

Mysql通过3个线程来完成主从库之间的数据复制: 其中BinLog Dump线程跑在主库上, I/O线程和SQL线程跑在从库上 ,当从库启动复制(start slave)时, 首先创建I/O线程连接主库, 主库随后创建Binlog Dump线程读取数据库事件并发给I/O线程, I/O线程获取到数据库事件更新到从库的中继日志Realy log中去, 之后从库上的SQl线程读取中继日志Realy log 中更新的数据库事件并应用

 

第四步 启动主从容器

-- 主库

docker run --name master -p 3336:3306

-v /usr/local/docker/mysql/master/data:/var/lib/mysql

-v /usr/local/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf

-v /usr/local/docker/mysql/master/conf/conf.d:/etc/mysql/conf.d

-v /usr/local/docker/mysql/master/logs:/var/log/mysql

-e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

-- 从库

docker run --name slave -p 3337:3306

-v /usr/local/docker/mysqlzc/slave/data:/var/lib/mysql

-v /usr/local/docker/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf

-v /usr/local/docker/mysql/slave/conf/conf.d:/etc/mysql/conf.d

-v /usr/local/docker/mysql/slave/logs:/var/log/mysql

-e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

 

进入主库容器 docker exec -it master /bin/bash 扒拉扒拉... 添加用户 用于从库线程访问主从 复制

-- 创建用户 给权限

CREATE USER "slaveuser"@"%" IDENTIFIED WITH mysql_native_password BY "slaveuser0!";

GRANT ALL PRIVILEGES ON *.* TO "slaveuser"@"%";

FLUSH PRIVILEGES;

-- 再执行此sql 查看主服务器bin日志的信息

show master status;

查看的bin信息 用于从库配置 可以先截个图记录一下

 

进入从库容器 执行命令

change master to 

master_host="172.17.0.2", -- 主库ip

master_user="slaveuser", -- 主库用户名

master_password="slaveuser0!", -- 主库密码

master_port=3306, -- 主库端口

master_log_file="mysql-bin.000060", -- 主库截图中的数值

master_log_pos= 248, -- 主库截图中的数值

master_connect_retry=30; -- 从服务器线程重新尝试连接主服务器之前睡眠的秒数,默认60

以上是一行命令 , 容器ip查看命令 docker inspect --format="{{.NetworkSettings.IPAddress}}" 容器名称|容器id

最后从库开启命令 start slave;

查看信息 show slave status G; 如果中间出了什么异常错误 都可以在此信息中查看

  • slave-IO-running : yes
  • slave-sql-running: yes

信息中出现两个参数yes , 说明搭建成功.

可以测试一下主库建库建表, 从库一会就也会出现相同的库表以及数据

 

以上是 dockermysql8主从配置 的全部内容, 来源链接: utcz.com/z/516223.html

回到顶部