当前位置:网站首页>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
边栏推荐
- ECCV2022 | TransGrasp类级别抓取姿态迁移
- go : gin 自定义日志输出格式
- "Autobiography of Franklin" cultivation
- 手写一个博客平台~第一天
- JS convert pseudo array to array
- The larger the convolution kernel, the stronger the performance? An interpretation of replknet model
- Table partition of MySQL
- [shutter -- layout] stacked layout (stack and positioned)
- intval md5绕过之[WUSTCTF2020]朴实无华
- 公安部:国际社会普遍认为中国是世界上最安全的国家之一
猜你喜欢

Eccv2022 | transclassp class level grab posture migration

【AI4Code】《CodeBERT: A Pre-Trained Model for Programming and Natural Languages》 EMNLP 2020

Jenkins configuration pipeline

2022.07.24 (lc_6126_design food scoring system)

Zero basic learning canoe panel (12) -- progress bar

More accurate and efficient segmentation of organs-at-risk in radiotherapy with Convolutional Neural

JS 将伪数组转换成数组
![[shutter -- layout] stacked layout (stack and positioned)](/img/01/c588f75313580063cf32cc01677600.jpg)
[shutter -- layout] stacked layout (stack and positioned)

Make a general cascade dictionary selection control based on jeecg -dictcascadeuniversal
![[rust] reference and borrowing, string slice type (& STR) - rust language foundation 12](/img/48/7a1777b735312f29d3a4016a14598c.png)
[rust] reference and borrowing, string slice type (& STR) - rust language foundation 12
随机推荐
【问题解决】ibatis.binding.BindingException: Type interface xxDao is not known to the MapperRegistry.
JS convert pseudo array to array
2022 Henan Mengxin League game (3): Henan University I - Travel
【问题解决】org.apache.ibatis.exceptions.PersistenceException: Error building SqlSession.1 字节的 UTF-8 序列的字
公安部:国际社会普遍认为中国是世界上最安全的国家之一
软件测试流程包括哪些内容?测试方法有哪些?
If you want to do a good job in software testing, you can first understand ast, SCA and penetration testing
Make a general cascade dictionary selection control based on jeecg -dictcascadeuniversal
Deployment of Apache website services and implementation of access control
[shutter -- layout] stacked layout (stack and positioned)
[problem solving] ibatis.binding BindingException: Type interface xxDao is not known to the MapperRegistry.
跌荡的人生
Can flinkcdc import multiple tables in mongodb database together?
全球都热炸了,谷歌服务器已经崩掉了
Ministry of Public Security: the international community generally believes that China is one of the safest countries in the world
Selenium uses -- XPath and analog input and analog click collaboration
LeetCode 0133. 克隆图
Experimental reproduction of image classification (reasoning only) based on caffe resnet-50 network
【Flutter -- 布局】层叠布局(Stack和Positioned)
零基础学习CANoe Panel(15)—— 文本输出(CAPL Output View )