docker如何配置mysql主从复制

 更新时间:2024年12月19日 14:21:38   作者:Mars'Ares  
本文详细介绍了如何在CentOS 7上配置和搭建MySQL集群,包括创建Docker容器、设置桥接网络、配置MySQL主从复制等步骤

一、前提条件

1 具有docker环境的centos7

yum install docker
service docker start

2 mysql镜像(版本5.5以上,本文采用8.0)

docker pull mysql:8.0

二、mysql集群配置文件

1 创建配置集结构如下

mkdir -p /home/data/mysql/data/master
mkdir -p /home/data/mysql/data/slave
mkdir -p /home/data/mysql/master
mkdir -p /home/data/mysql/slave

2 创建节点配置文件(master.cnf与slave.cnf)

cd /home/data/mysql/master
vi master.cnf
cd /home/data/mysql/slave
vi slave.cnf

内容如下

[mysqld]
server-id=1   #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin   #开启二进制日志
#auto_increment_increment=2   #步进值auto_imcrement。一般有n台主MySQL就填n
#auto_increment_offset=1   #起始值。一般填第n台主MySQL。此时为第一台主MySQL
#binlog-ignore=mysql   #忽略mysql库【我一般都不写】
#binlog-ignore=information_schema   #忽略information_schema库【我一般都不写】
#replicate-do-db=aa   #要同步的数据库,默认所有库

三、搭建mysql环境

1 为mysql容器创建专有桥接网络,以便固定mysql容器ip

docker network create --driver bridge --subnet 172.25.0.0/16 mysql_net

备注:

创建桥接网卡 mysql_net 指定自网段为172.25.0.0 如果不指定ip则与docker容器的docker0网卡同网段

2 创建mysql容器

(1) master

docker create 
--privileged=true                               #为容器挂载目录添加权限
--name mysqlmaster                              #容器名为mysqlmaster
-v /home/data/mysql/data/master:/var/lib/mysql  #集群配置集中/data/master 挂载到容器/var/lib/mysql
-v /home/data/mysql/master:/etc/mysql/conf.d    #配置集中/master 中master.cnf 挂载到 /etc/mysql/conf.d中设置启动
-e MYSQL_ROOT_PASSWORD=root                     #设置启动密码
--net mysql_net                                 #指定容器连接网络
--ip 172.25.0.3                                 #指定容器使用ip
-p 3307:3306 mysql:8.0                          #指定主机映射到容器端口  即 主机访问centos7 为3307   容器端口为3306

备注:上面#号后需要删除

(2)salve

docker create 
--privileged=true 
--name mysqlslave 
-v /home/data/mysql/data/slave:/var/lib/mysql 
-v /home/data/mysql/salve:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root 
--net mysql_net 
--ip 172.25.0.2 
-p 3308:3306 mysql:8.0

备注:同上

3 启动容器

docker start mysqlsalve
docker start mysqlmaster

查看运行状态

docker ps -a

查看容器ip

docker network inspect mysql_net

4 容器设置远程访问

docker exec -it mysqlmaster /bin/bash

使用容器ip登录 并输入密码

mysql -u root -p  -h 172.25.0.3

修改root帐号密码

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

备注:同理进入另一个容器相同操作

5 使用navicat在主机(非centos7)登录mysql容器

备注:

容器ip为docker容器内部路由使用,虚拟机ip为外部主机入口,可以通过桥接访问到容器

四、启动mysql主从

1 进入master 赋权限 以及查询master 的日志文件 以及位置

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by 'root'; --赋权限给root用户
flush privileges; --刷新权限
show master status; 

2 进入slave 设置slave配置以及启动slave

change master to 
master_host='172.25.0.3',     --master的ip  不能为127.0.0.1
master_user='root',           --master的帐号密码
master_password='root',
master_log_file='mysql-bin.000003', --master 查询的file名  注意上面!
master_port=3306,                   --master 端口 坑!为容器端口 不是主机端口
master_log_pos=596;                 --日志文件位置  注意上面!
start slave;
show slave status;

备注:主从同步启动标志 若出现cennecting to master 则有错误 请自己查找

3 验证主从

主库创建任何数据,从库随即更新!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL服务器进程CPU占用100%的解决方法

    MySQL服务器进程CPU占用100%的解决方法

    早上帮朋友一台服务器解决了 Mysql cpu 占用 100% 的问题。稍整理了一下,将经验记录在这篇文章里。
    2010-12-12
  • MySQL安装starting the server失败的2种解决办法(推荐!)

    MySQL安装starting the server失败的2种解决办法(推荐!)

    MySQL是一个非常强大的关系型数据库,但有些初学者在安装配置的时候,遇到种种的困难,下面这篇文章主要给大家介绍了关于MySQL安装starting the server失败的2种解决办法,需要的朋友可以参考下
    2023-04-04
  • 浅谈Mysql指定顺序排序查询

    浅谈Mysql指定顺序排序查询

    给大家用过实例分析了Mysql查询中指定顺序排序的相关技术问题,需要的朋友参考一下吧。
    2017-12-12
  • Mysql跨表更新 多表update sql语句总结

    Mysql跨表更新 多表update sql语句总结

    Mysql跨表更新一直是大家所关心的话题,本文介绍mysql多表 update在实践中几种不同的写法,需要的朋友可以参考下
    2012-12-12
  • MySQL中表的几种连接方式

    MySQL中表的几种连接方式

    这篇文章主要给大家介绍了关于MySQL中表的几种连接方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 关于MySQL的存储过程与存储函数

    关于MySQL的存储过程与存储函数

    存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集(这些SQL语句已经编译过了),它存储在数据库中,一次编译后永久有效,需要的朋友可以参考下
    2023-05-05
  • mysql数据库无法被其他ip访问的解决方法

    mysql数据库无法被其他ip访问的解决方法

    这篇文章主要给大家介绍了关于mysql数据库无法被其他ip访问的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • MySQL回表产生的原因和场景

    MySQL回表产生的原因和场景

    在MySQL数据库中,回表(Look Up)指的是在进行索引查询时,首先通过索引定位到对应页,然后再根据行的物理地址找到所需的数据行,本文给大家介绍了MySQL回表是什么以及哪些情况下会回表,需要的朋友可以参考下
    2023-11-11
  • 基于mysql全文索引的深入理解

    基于mysql全文索引的深入理解

    本篇文章是对mysql全文索引进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 详解MySQL分组链接的使用技巧

    详解MySQL分组链接的使用技巧

    本篇文章主要针对MYSQL中分组以及4种链接做了详细的分析,有助于大家对这2项MYSQL功能有深入的理解,参考学习下吧。
    2017-12-12

最新评论