docker 下mysql主从读写分离配置-编程思维

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

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

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' ;

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/pushuiyu/p/17109363.html

docker升级gitlab-编程思维

  昨天在家部署了gitlab,版本居然是15.10,公司版本却是14.6,升级一波。 官方文档:   https://docs.gitlab.com/ee/update/#upgrading-without-downtime 官方文档总结:   文档介绍需要按升级路径拉取镜像。   经我概览,只需备份etc、log、

docker安装mysql-编程思维

转载请注明出处:   1.从Docker Hub下载MySQL镜像: docker pull mysql   2.运行MySQL容器,并将主机的3306端口映射到容器的3306端口: docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=your

docker 学习笔记-编程思维

Docker 学习笔记 这篇学习笔记将用于记录本人在学习 Docker 服务端运维工具过程中所记录的心得体会,它将会被存储在https://github.com/owlman/study_note项目的SoftwareTool/Container目录下一个名为的Docker子目录中。 学习规划 学习基础: 有一两门

kubernetes(k8s)大白学习02:容器和docker基础、使用、架构学习-编程思维

一、什么是容器 容器简介 简单说:容器(container)就是计算机上的一个沙盒进程,它与计算机上的所有其它进程相隔离。 这种隔离是怎么做到的呢?它利用了内核提供的 namespace 和 cgroup 这 2 种技术。这些技术能力在 Linux 中已经存在了很长时间。而 Docker 或容器技术致力于将这些功能更易

云效codeup构建镜像-编程思维

目的 git代码托管,目录层级改动则自动触发构建 步骤 x01 在codeup创建git仓库 https://codeup.aliyun.com/ x02 提交dockerfile相关的代码推送到仓库 x03 codeup个人令牌申请 webhook需要开启,其他的的只读就可以 仅仅可以复制一次,保存好后续