当前位置:网站首页>Docekr学习 - MySQL8主从复制搭建部署
Docekr学习 - MySQL8主从复制搭建部署
2022-07-25 12:41:00 【嗯嗯**】
主从复制搭建
# 下载镜像
docker pull mysql
# 第一步:启动主MySQL
docker run --name=mysql-master -p 3308:3306 -v /etc/localtime:/etc/localtim -v /www/server/mysql_master-slave/master/data:/var/lib/mysql -v /www/server/mysql_master-slave/master/log:/var/log/mysql -v /www/server/mysql_master-slave/master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --privileged=true -d mysql:latest
# 第二步:添加配置文件 /www/server/mysql_master-slave/master/conf/my.cnf == 内容如下
[mysqld]
## 设置server id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
# 旧版5的配置==如果是8记得替换成秒数哦,否则进不去mysqld
#expire_logs_days=7
# 新版8的配置
binlog_expire_logs_seconds=604800
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 第三步:重启主MySQL
docker restart mysql-master
# 第四步:主MySQL中创建slave用户 == 使永Navicat或者直接进容器内部运行即可
# 进入主容器mysql:docker exec -it mysql-master mysql -uroot -p
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
SELECT plugin FROM `user` where user = 'slave';
# 对于mysql8 这步特别重要,需要修改授权插件,否则从MySQL那边连接不到主MySQL进行同步拉取数据
# 如果是MySQL5则不需要运行这个语句
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 第五步:启动从MySQL
docker run --name=mysql-slave -p 3309:3306 -v /etc/localtime:/etc/localtim -v /www/server/mysql_master-slave/slave/data:/var/lib/mysql -v /www/server/mysql_master-slave/slave/log:/var/log/mysql -v /www/server/mysql_master-slave/slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --privileged=true -d mysql:latest
# 第六步:添加配置文件 /www/server/mysql_master-slave/slave/conf/my.cnf == 内容如下
[mysqld]
## 设置server._id,同一局域网中需要唯一
server_id=102
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
#开启二进制日志功能,以备Slave作为其它数据库实例的Masterl时使用
log-bin=mall-mysql-slave1-bin
#设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
#设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
#二进制日志过期清理时间。默认值为0,表示不自动清理。
# 旧版5的配置
#expire_logs_days=7
# 新版8的配置
binlog_expire_logs_seconds=604800
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
# 旧版5的配置
#slave_skip_errors=1062
# 新版8的配置
replica_skip_errors=1062
#relay_log配置中继日志
relay_log=mall-mysql-relay-bin
#log_slave_.updates表示slave将复制事件写进自己的二进制日志
# 旧版5的配置
#log_slave_updates=1
# 新版8的配置
log_replica_updates=1
##slave设置为只读(具有super权限的用户除外)
read_only=1
# 第七步:重启从MySQL
docker restart mysql-slave
# 第八步:查看主MySQL的 master状态
docker exec -it mysql-master mysql -uroot -proot
show master status;
# 第九步:进入从mysql == 设置主MySQL相关的信息
docker exec -it mysql-slave mysql -uroot -proot
# master_log_file、master_log_pos取自 主MySQL的 show master status信息
# 填写主MySQL的端口、ip等信息
change master to master_host='192.168.80.128',master_user='slave',master_password='123456',master_port=3308,master_log_file='mall-mysql-bin.000002',master_log_pos=156,master_connect_retry=30;
# 第十步:查看从MySQL的 slave相关信息 == 从MySQL中运行
# 发现还未开启同步开关
show slave status;
# 第十一步:从库开始打开拉取主库的开关 -- 从MySQL中运行
start slave;
# 第十二步:查看从库的同步开关是否开启
show slave status;
# 第十三步:数据同步测试 == 大功告成
主MySQL:创库、创表、新增数据
从MySQL:查看数据是否同步过来

主从复制搭建遇到的问题解决
MY-010095 - 启动失败
2022-07-21 05:10:09+00:00 [Note] [Entrypoint]: Starting temporary server
mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
2022-07-21T05:10:09.822859Z 0 [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
2022-07-21 05:10:09+00:00 [ERROR] [Entrypoint]: Unable to start server.

解决方案 - 改run配置文件的映射配置
//原启动配置 == 遇到上述启动报错问题
docker run --name=mysql-master -p 3308:3306 -v /etc/localtime:/etc/localtim -v /www/server/mysql_master-slave/master/data:/var/lib/mysql -v /www/server/mysql_master-slave/master/log:/var/log/mysql -v /www/server/mysql_master-slave/master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root --privileged=true -d mysql:latest
//修正后启动配置 == 可正常启动 == 改mysql映射目录
docker run --name=mysql-master -p 3308:3306 -v /etc/localtime:/etc/localtim -v /www/server/mysql_master-slave/master/data:/var/lib/mysql -v /www/server/mysql_master-slave/master/log:/var/log/mysql -v /www/server/mysql_master-slave/master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --privileged=true -d mysql:latest
从库连接到主库失败 - 非IP、账号密码问题
Last_IO_Error: error connecting to master 'slave@192.168.80.128:3308' - retry-time: 30 retries: 17 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
从机中运行:show slave status
解决方案
-- 在主MySQL机中运行下列SQL == 修改授权插件
-- 修改完后无需重启 主MySQL、从MySQL
SELECT plugin FROM `user` where user = 'slave';
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
从机中运行:show slave status
边栏推荐
- [ROS advanced chapter] Lecture 9 programming optimization of URDF and use of xacro
- 论文解读(MaskGAE)《MaskGAE: Masked Graph Modeling Meets Graph Autoencoders》
- 软件测试流程包括哪些内容?测试方法有哪些?
- go : gin 自定义日志输出格式
- Synergetic process
- 【AI4Code】《Contrastive Code Representation Learning》 (EMNLP 2021)
- 【AI4Code】《GraphCodeBERT: Pre-Training Code Representations With DataFlow》 ICLR 2021
- "Wei Lai Cup" 2022 Niuke summer multi school training camp 2 supplementary problem solution (g, J, K, l)
- Zero basic learning canoe panel (12) -- progress bar
- clickhouse笔记03-- Grafana 接入ClickHouse
猜你喜欢

The larger the convolution kernel, the stronger the performance? An interpretation of replknet model

A hard journey

【问题解决】ibatis.binding.BindingException: Type interface xxDao is not known to the MapperRegistry.
![SSTI template injection vulnerability summary [bjdctf2020]cookie is so stable](/img/19/0b943019fe1c959c4b79035a814410.png)
SSTI template injection vulnerability summary [bjdctf2020]cookie is so stable

如何用因果推断和实验驱动用户增长? | 7月28日TF67

Chapter5 : Deep Learning and Computational Chemistry

零基础学习CANoe Panel(15)—— 文本输出(CAPL Output View )

零基础学习CANoe Panel(13)—— 滑条(TrackBar )

【AI4Code】《Contrastive Code Representation Learning》 (EMNLP 2021)

零基础学习CANoe Panel(12)—— 进度条(Progress Bar)
随机推荐
Requirements specification template
[rust] reference and borrowing, string slice type (& STR) - rust language foundation 12
【AI4Code】《GraphCodeBERT: Pre-Training Code Representations With DataFlow》 ICLR 2021
JS 将伪数组转换成数组
如何用因果推断和实验驱动用户增长? | 7月28日TF67
clickhouse笔记03-- Grafana 接入ClickHouse
yum和vim须掌握的常用操作
Implementation of recommendation system collaborative filtering in spark
业务可视化-让你的流程图'Run'起来(3.分支选择&跨语言分布式运行节点)
软件测试面试题目:请你列举几个物品的测试方法怎么说?
Deep learning MEMC framing paper list
Use of hystrix
ECCV 2022 | climb to the top semantickitti! Semantic segmentation of LIDAR point cloud based on two-dimensional prior assistance
感动中国人物刘盛兰
State mode
JS sorts according to the attributes of the elements in the array
【高并发】通过源码深度分析线程池中Worker线程的执行流程
logstash
LeetCode 1184. 公交站间的距离
卷积核越大性能越强?一文解读RepLKNet模型