首页 > 数据库 >docker 下MySQL主从读写分离配置

docker 下MySQL主从读写分离配置

时间:2023-02-10 16:23:22浏览次数:49  
标签:mydata utf8 MySQL db master mysql docker 主从

主从同步机制: 同步基于耳机子机制,主服务器使用二进制来记录数据库的变动状况,从服务器通过读取和执行日志文件来保存主服务的数据一致
image

首先要保障主从的版本一致或相近

1 登陆docker,拉取镜像

docker pull mysql:7.5

2 创建 宿主机的数据卷

主数据库:
sudo mkdir /mydata/mysql/master/log
sudo mkdir /mydata/mysql/master/data
sudo mkdir /mydata/mysql/master/conf
从数据库
sudo mkdir /mydata/mysql/slaver/log
sudo mkdir /mydata/mysql/slaver/data
sudo mkdir /mydata/mysql/slaver/conf

3 启动master实例

docker run -p 3309:3306 --name mysql-master \
-v /mydata/mysql/master/log:/var/log/mysql \
-v /mydata/mysql/master/data:/var/lib/mysql \
-v /mydata/mysql/master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7 
#参数说明
  -p 3309:3306:将容器的3306端口映射到主机的3307端口
       -v /mydata/mysql/master/conf:/etc/mysql:将配置文件夹挂在到主机
       -v /mydata/mysql/master/log:/var/log/mysql:将日志文件夹挂载到主机
       -v /mydata/mysql/master/data:/var/lib/mysql/:将配置文件夹挂载到主机
       -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码

4 添加master配置

首先:vim /mydata/mysql/master/conf目录下
增加配置文件: touch my.conf
编辑: vi my.conf

[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
# 可以主从复制数据库
binlog-do-db=gmall_ums
binlog-do-db=gmall_pms
binlog-do-db=gmall_oms
binlog-do-db=gmall_sms
binlog-do-db=gmall_cms

#不参加主从复制数据库
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

5 启动slave实例

docker run -p 3316:3306 --name mysql-slaver-01 \
-v /mydata/mysql/slaver/log:/var/log/mysql \
-v /mydata/mysql/slaver/data:/var/lib/mysql \
-v /mydata/mysql/slaver/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7 

6 配置 slaver 配置

[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
binlog-do-db=gmall_ums
binlog-do-db=gmall_pms
binlog-do-db=gmall_oms
binlog-do-db=gmall_sms
binlog-do-db=gmall_cms


replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

7 从前主从容器

docker restart mysql_master
docker restart mysql_slaver_o1 
#如果重启失败,可以查看相关日志
docker logs --since 30m mysql_master 
docker logs --tail 10m  ysql_master
进入日志注销 :skip-name-resolve,然后重启
备注;查看docker日志的
Options:
–details 显示更多的信息
-f, --follow 跟踪实时日志
–since string 显示自某个timestamp之后的日志,或相对时间,如40m(即40分钟)
–tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
–until string 显示自某个timestamp之前的日志,或相对时间,如40m(即40分钟)

8 进行master授权配置

1 进入容器
docker exec -it mysql-master /bin/bash
2  进入数据库,输入密码:root
mysql -uroot p 
3 进行授权远程连接用户
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
4 授权可以来同步的用户
   GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';
5  查看数据库状态
show master status\G;

9 进入slave 数据库配置

1 进入容器
docker exec -it mysql-slaver-01 bash
2 进入数据库
mysql -uroot -p
3 进行远程连接用户授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option
4设置主库连接
change master to master_host='192.168.124.130',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3309;
5 启动从库同步
start slave;
6 查看从库状态

备注:主从数据库在自己配置文件中声明需要同步哪个数据库,忽略哪个数据库等信息。并且server-id不能一样 2)、主库授权某个账号密码来同步自己的数据 3)、从库使用这个账号密码连接主库来同步数据

skip-name-resolve,日志添可能造成无法启动docker

select user,host from mysql.user where host <> 'localhost' ;

标签:mydata,utf8,MySQL,db,master,mysql,docker,主从
From: https://www.cnblogs.com/pushuiyu/p/17109363.html

相关文章

  • 远程连接DOCKER
    /etc/systemd/system/docker.service.d/override.conf写入文件##AddthistothefileforthedockerdaemontousedifferentExecStartparameters(morethingsca......
  • 用docker打包一个前端项目
    思路:将dist包打包成一个镜像(要不打出的镜像特别大)Dockerfile:如下FROMnginx:latestCOPYdist/auth-centerWORKDIRauth-centerCOPYnginx.conf/etc/nginx/con......
  • docker命令学习
    一篇学会使用docker(超详细)原创 艺说IT 艺说IT 2022-11-2615:07 发表于广西收录于合集#docker1个#容器技术1个#容器命令1个一、docker介绍Docker是......
  • MySQL 5.7.27 详细下载安装配置教程
    以下MySQL5.7.27详细下载安装配置教程【很早之前也记录过一篇MySQL8.0的安装配置过程,如果是8.0可参考下面的另一篇文章】MySQL的下载安装与Navicat配置(超详细)_乞力马扎......
  • Mysql 的三种 join方式
    mysql只有三种join方式参考:https://www.jianshu.com/p/76c90b03b7bdmysql只有三种join方式,但通过组合可以达到各种效果而已join就是innerjoinleftjoinrigh......
  • mysql 按照天,小时,分钟等分组排序
    按照季度统计SELECTCONCAT(DATE_FORMAT(create_time,'%Y'),'-',FLOOR((DATE_FORMAT(create_time,'%m')+2)/3),'季度')ASQUARTER,COUNT(1)AS总量FROM表WHEREcr......
  • Docker-compose
    目录:Docker-composeDocker-compose简介compose部署Dockercompose环境安装YAML文件格式及编写注意事项Dokcercompose配置常用字段......
  • MySQL视图、存储过程、函数、触发器、定时任务、流程控制总结
    视图的增删改查视图相当于一张只能读的表,不可以修改。当组成视图的表发生数据变化的时候,视图会相对应的进行改变。存储过程的练习创建存储过程:create[ifnotexi......
  • Dockerize ASP Classic on IIS
    DockerizeASPClassiconIISAskQuestionAsked 4years,1monthagoActive 9monthsagoViewed 9ktimes 2216Microsofthasbeeninvesti......
  • Docker搭建本地仓库
    一、搭建本地私有仓库有时候使用DockerHub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似。使用私有仓库有......