当前位置: 首页 > news >正文

Docker学习之路【八】安装主从复制MYSQL8

拉取MySQL镜像

#拉取MySQL镜像
docker pull mysql:8.0.37

创建存储目录

#创建数据存储目录
mkdir -p /docker/mysql/master/data
#创建日志目录
mkdir -p /docker/mysql/master/logs
#创建配置文件目录
mkdir -p /docker/mysql/master/conf

运行容器

docker run -p 3340:3306 --name mysql_master --privileged=true \
-v /docker/mysql/master/conf:/etc/mysql/conf.d \
-v /docker/mysql/master/logs:/var/log/mysql \
-v /docker/mysql/master/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.37 --init-connect="SET collation_connection=utf8mb4_0900_ai_ci" --init-connect="SET NAMES utf8mb4" --skip-character-set-client-handshake 

进入容器

docker exec -it mysql_master /bin/bash
mysql -uroot -p
#输入密码123456
#创建用于同步的数据库
create database db01;

配置远程连接(对外连接的)

# 在MySQL下执行
use mysql;
# 创建对外访问的用户和权限
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'slave'@'%' WITH GRANT OPTION;
#修改认证方式
alter user 'slave'@'%' identified with mysql_native_password by '123456';
FLUSH PRIVILEGES;
# 退出
exit;

创建自定义的配置文件

cd /docker/mysql/master/conf
touch my.cnf
vim my.cnf

my.cnf文件内容

[client]
# mysql客户端默认字符集
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 跳过密码登录
#skip-grant-tables
#bind-address = 127.0.0.1
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
# mysql服务端默认字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
# datadir=/var/lib/mysql  # 主服务器唯一ID
server-id=1
# 设置不要复制的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(先创建好)
binlog-do-db=db01
# 启用二进制日志,日志的存放地址
log-bin=/var/lib/mysql/mysql-bin
# 主机,1 只读 0 读写(默认是0)
read-only=0
# 设置logbin格式 有3种格式 
# 默认 STATEMENT(函数支持不好) 默认的 ROW(行模式大量修改效率不行,但支持存储引擎) MIXED (综合,推荐)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 二进制日志过期清理时间,默认是0(不自动清理)
expire_logs_days=7
# 单个二进制日志大小
max_binlog_size=200M
# 设置每隔多少次事务提交操作,将这些操作写入二进制日志文件
sync_binlog=1
# 使用mysql_native_password插件的认证
# default_authentication_plugin=mysql_native_password

重启容器

docker restart mysql_master
# 需要记录一下File、Position
show master status;
#查询结果
mysql> show master status;
+------------------+----------+--------------+---------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                            | Executed_Gtid_Set |
+------------------+----------+--------------+---------------------------------------------+-------------------+
| mysql-bin.000002 |      730 | db01         | mysql,information_schema,performance_schema |                   |
+------------------+----------+--------------+---------------------------------------------+-------------------+
1 row in set (0.00 sec)

配置从数据库节点

#创建数据目录
mkdir -p /docker/mysql/slave/data
#创建日志目录
mkdir -p /docker/mysql/slave/logs
#创建配置文件目录
mkdir -p /docker/mysql/slave/conf
#创建自定义的配置文件
cd /docker/mysql/slave/conf
touch my.cnf
vim my.cnf

my.cnf文件内容

[client]
# mysql客户端默认字符集
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 跳过密码登录
#skip-grant-tables
#bind-address = 127.0.0.1
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
# mysql服务端默认字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
# datadir=/var/lib/mysql  # 从服务器唯一ID
server-id = 2  
# 开启中继日志
relay-log=mysql-relay
# 从机,1 只读 0 读写(默认是0)
read-only=1
# 启用二进制日志,日志的存放地址,如果从机变成主机可以继续使用bin日志
# log-bin=mysql-slave-bin
# 使用mysql_native_password插件的认证
# default_authentiction_plugin=mysql_native_password

运行容器

docker run -p 3341:3306 --name mysql_slave --privileged=true \
-v /docker/mysql/slave/conf:/etc/mysql/conf.d \
-v /docker/mysql/slave/logs:/var/log/mysql \
-v /docker/mysql/slave/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.37 --init-connect="SET collation_connection=utf8mb4_0900_ai_ci" --init-connect="SET NAMES utf8mb4" --skip-character-set-client-handshake 

进入容器

docker ps -a
docker exec -it mysql_slave /bin/bash
# 打开MySQL,输入密码
mysql -uroot -p
# 创建数据库
create database db01;

设置同步信息

CHANGE MASTER TO MASTER_HOST='ip地址',
MASTER_PORT=3340,
MASTER_USER='slave',MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_CONNECT_RETRY=30,
MASTER_LOG_POS=730;

开始同步

start slave;
show slave status \G;  # 检查状态
# 如果结果下面的字段为Yes 代表配置成功
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 全球大脑外滩“论剑”:2024年科技人文十大热点问题揭晓
  • Vue2转Vue3学习历程
  • 字节6面,面爆炸了
  • ssh结合重定向实现scp拷贝文件的另类用法
  • 通配符证书的申请及配置教程
  • 大规模语言模型开发基础与实践
  • 【HTML】使用过程中的随记
  • E810网卡驱动安装-适用于centos7.9
  • 前端提高Web/App/小程序开发效率的工具
  • 找欧洲客户:这个实用方法可以收藏起来
  • 【赵渝强老师】大数据技术的理论基础
  • 一夜之间删库跑路?Runway到底在做什么?
  • 数据结构---顺序表---单链表
  • C# SM2 SM3 SM4 使用
  • 创意微型学生机床工具——金属车床
  • 收藏网友的 源程序下载网
  • 「面试题」如何实现一个圣杯布局?
  • ES6系列(二)变量的解构赋值
  • ES6系统学习----从Apollo Client看解构赋值
  • gitlab-ci配置详解(一)
  • js中forEach回调同异步问题
  • k8s 面向应用开发者的基础命令
  • mysql_config not found
  • node 版本过低
  • oschina
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 简单数学运算程序(不定期更新)
  • 那些被忽略的 JavaScript 数组方法细节
  • 使用SAX解析XML
  • 数据科学 第 3 章 11 字符串处理
  • 原生Ajax
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ‌移动管家手机智能控制汽车系统
  • ###STL(标准模板库)
  • #include<初见C语言之指针(5)>
  • (1)Android开发优化---------UI优化
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (第27天)Oracle 数据泵转换分区表
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (七)c52学习之旅-中断
  • (算法)前K大的和
  • (一) storm的集群安装与配置
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)Linux 多线程条件变量同步
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .Family_物联网
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET gRPC 和RESTful简单对比
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net2005怎么读string形的xml,不是xml文件。