mysql主从服务器
项目服务器框架
MySQL主从复制
mysql主从服务器配置
- 什么是主从服务器?
- 主从复制又叫AB复制,
- 两台服务器做了主从后,A写入数据,B也会跟着写数据。
- 主从基于binlog的,主上需开启binlog进行主从
- 主从过程
- 主将更改记录到bin-log中
- 主 二进制日志(binnary log)
- 从 中继日志(relay log)
- 中继 :zhōngjì 处在两条线路之间、把两条线路连接起来的中继站
- 从库发起连接,连接到主库
- 主库,创建log dump(日志转储)线程,把bin-log 内容发送到从库中
- dump转储:就是将动态(易失)的数据,保存为静态的数据(持久数据),如把某一刻的内容,dump成文件
- 从库,创建IO线程,把主库传来的bin-log内容写入到relay-log中
- 从库,创建SQL线程,执行relay-log中的内容同步到DB中
- 主将更改记录到bin-log中
- 主从复制的作用?
- 热备份,从库作为备份数据库,主库出现问题后可以切换到从库继续工作
- 拓展:热备份(也称为动态备份或在线备份),这种技术可以在系统正常运行时进行备份,并且可以备份正在使用或编辑的数据库
- 冷备份,是对数据库进行脱机备份,在备份过程中用户无法访问数据库,但冷备份速度更快更安全。
- 读写分离,均衡数据库负载
- 热备份,从库作为备份数据库,主库出现问题后可以切换到从库继续工作
- 主从复制后主服务器挂了怎么办
- 将从数据库提升位主库
- 登录所有的从库,查看master.info文件,对比选择pos最大的作为新的主库
- 主从形式
docker搭建主从mysql
- 相关连接
- 搭建
- 启动主机mysql
-
docker run -d -p 3306:3306
-e MYSQL_ROOT_PASSWORD=tsbx8888
-e MYSQL_ROOT_HOST=%
--name mysql-master
-v /home/mysql-master/data:/var/lib/mysql
-v /home/mysql-master/conf/my.cnf:/etc/mysql/my.cnf
-v /home/mysql-master/mysql-files:/var/lib/mysql-files/
-v /home/mysql-master/logs:/var/log/mysql mysql:8.0.22 - 命令解释
- -d:后台运行
- -p: (宿主机:容器) 将容器端口映射到宿主主机端口
- -name: 将容器命名为 mysql-master
- -v: 将配置文件挂载到宿主机
- -e MYSQL_ROOT_HOST=% 这个选项就是用来设置允许远程访问的。
- --restart=always 表示此容器开机启动,只要docker也设置了开机自启,docker不死
- -v /etc/localtime:/etc/localtime 容器时间与宿主机同步
- --privileged=true 挂载文件权限设置
- 相关命令
- docker ps -a #查看全部的容器(运行的加未运行的)
- docker exec -it 容器ip前两位 bash #进入容器
-
-
启动从机mysql
-
docker run -d -p 3307:3306
-e MYSQL_ROOT_PASSWORD=tsbx8888
-e MYSQL_ROOT_HOST=%
--name mysql-slave -v /home/mysql-slave/data:/var/lib/mysql -v /home/mysql-slave/conf/my.cnf:/etc/mysql/my.cnf -v /home/mysql-slave/mysql-files:/var/lib/mysql-files/ -v /home/mysql-slave/logs:/var/log/mysql mysql:8.0.22
-
-
在宿主主机文件夹:/home/mysql-slave/conf/ 新建my.cnf (缺少这个配置文件容器起不来)并设置mysql大小写不明感
-
修改主机的my.cnf配置文件
-
[mysqld]
#主服务器唯一id
server-id=1
#开启二进制日志功能,可以随便取(关键)
log-bin=master-bin
#设置不要复制的数据库(可以设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
#设置需要复制的数据库
binlog-do-db=mes_db
#二进制日志格式,有三种 row,statement,mixed
binlog-format=STATEMENT -
-
statement 基于语句模式,主机通过sql语句复制到从机
-
row基于行的日志记录,表中需使用主键来确保行被有效识别
-
mixed混合模式自动切换
-
-
-
修改从机的my.cnf配置文件
-
[mysqld] # 从服务器唯一ID server-id=2 # 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin # relay_log配置中继日志 relay_log=mysql-relay-bin # 设置为只读,该项如果不设置,表示slave可读可写 read_only=1
-
-
重启mysql 主从
-
docker restart mysql-master mysql-slave
-
- 启动主机mysql
-
搭建主从复制
- 主机设置
-
-
进入主机容器
-
docker exec -it 容器id或者容器名称 /bin/bash
-
-
登录mysql客户端
-
mysql -uroot -ptsbx8888
-
-
授予用户 [slave] REPLICATION SLAVE权限和REPLICATION CLIENT权限
-
CREATE USER 'slave'@'%' IDENTIFIED BY 'tsbx8888'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
-
-
查询master状态
-
# 展示状态 show master status;
-
记住file和position栏对应的内容:
-
-
注意:此步骤后不要再操作主服务器MySQL,防止主服务器状态值的变化
-
-
从机设置
-
进入到Slave库myslq【客户端】,执行如下命令:
-
change master to master_host='172.17.0.3', master_user='slave', master_password='tsbx8888', master_port=3306, master_log_file='master-bin.000001', master_log_pos=710, master_connect_retry=30;
-
解释
-
-
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
-
master_host :Master库的地址,指的是容器的独立ip,可以通过;宿主机IP+端口也可以(√)
-
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP 进行查询
-
-
-
-
在slave中mysql的终端执行命令:
-
# 开启主从复制 start slave; # 再次查看状态 show slave status \G
-
-
-
如何停止从服务复制功能
-
在slave容器内的 mysql 客户端内执行:
-
使用
stop slave;
命令
-
-
-
如何重新配置主从
-
在slave容器内的 mysql 客户端内执行:
-
使用这两个命令
stop slave;
reset master;
-
-
-
mysql 主从数据不一致,提示: Slave_SQL_Running: No 的解决方法
-
先停掉slave mysql> stop slave;
-
跳过错误步数,后面步数可变 mysql> set global sql_slave_skip_counter=1;
-
再启动slave mysql> start slave;
-
查看同步状态 mysql> show slave status\G;
-
-
-
修改主库my.conf文件 :default_authentication_plugin=mysql_native_password
-
主库创建 slave 用户 密码是根据 mysql_native_password 加密方式
- 重新配置从库;
-
mysql8.*的新特性 caching_sha2_password 密码加密方式
- 以前版本的mysql密码加密使用的是 mysql_native_password
新添加的用户密码默认使用的 caching_sha2_password
-
-
- 缺少引号
-
-
-
Springboot配置主从myql
- 相关连接
- 实现的效果,主从搭建完毕,从主库中进行读写,从库实现热备(代码未改动连接主库)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升