搭建mysql主从服务
搭建mysql主从服务
[!TIP]
基于docker和mysql 8搭建主从服务,一主二从的结构,并且把数据文件放置在master_slave_mysql 文件夹下
首先规划端口,master:3306,slave_one:3307,slave_two:3308
- 创建文件&文件夹
mkdir -p /root/master_slave_mysql/mysql_3306/conf \
/root/master_slave_mysql/mysql_3306/data \
/root/master_slave_mysql/mysql_3307/conf \
/root/master_slave_mysql/mysql_3307/data \
/root/master_slave_mysql/mysql_3308/conf \
/root/master_slave_mysql/mysql_3308/data \
touch /root/master_slave_mysql/mysql_3306/conf/my.cnf
/root/master_slave_mysql/mysql_3307/conf
/root/master_slave_mysql/mysql_3308/conf
可以按照自己的喜好创建到不同的位置
-
修改配置
/root/master_slave_mysql/mysql_3306/conf/my.cnf加入
[mysqld] # 服务器唯一ID,默认值1 server-id=1 # 设置日志格式,默认ROW binlog_format=STATEMENT
/root/master_slave_mysql/mysql_3307/conf/my.cnf加入
[mysqld] # 服务器唯一ID,默认值1 server-id=2
/root/master_slave_mysql/mysql_3308/conf/my.cnf加入
[mysqld] # 服务器唯一ID,默认值1 server-id=3
[!NOTE]
server-id 在主从架构中是不能重复的,建议把主机设置为1,从机设置为其他值
-
拉取mysql镜像
docker pull mysql:latest
-
创建主mysql容器
docker run -d -p 3306:3306 \ -v /root/master_slave_mysql/mysql_3306/conf/etc/mysql/conf.d \ -v /root/master_slave_mysql/mysql_3306/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=自定义密码 \ --name=master mysql:latest
-
创建从slave容器
-
创建第一个slave容器
docker run -d -p 3307:3306 \ -v /root/master_slave_mysql/mysql_3307/conf/etc/mysql/conf.d \ -v /root/master_slave_mysql/mysql_3307/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=自定义密码 \ --name=slave_one mysql:latest
-
创建第二个slave容器
docker run -d -p 3308:3306 \ -v /root/master_slave_mysql/mysql_3308/conf/etc/mysql/conf.d \ -v /root/master_slave_mysql/mysql_3308/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=自定义密码 \ --name=slave_two mysql:latest
-
-
配置主机
进入容器
docker exec -it master env LANG=C.UTF-8 /bin/bash
配置从机用于登录主机的用户
mysql -uroot -p
add user 'slave'@'%' identified with mysql_native_password by '123456';
授权
GRANT REPLICATION SLAVE ON *.* TO `slave_account`@`%`
[!WARNING]
上例授权范围在生产环境中是不被允许的,建议授权只到业务数据库,而不要授权全部数据库!比如:GRANT REPLICATION SLAVE ON order_server.* TO `slave_account`@`%`
刷新权限
flush privileges;
查看状态(记住
file
和position
字段的值,我的是binlog.000003和3049)show master status;
OK,到此主机配置结束了,然后退出容器(退出命令exit,需退出2次,第一次退出mysql,第二次退出容器)
-
配置从机(从机的配置步骤都一样,为节省篇幅仅拿一台从机配置说明配置步骤)
进入容器
docker exec -it slave_one env LANG=C.UTF-8 /bin/bash
mysql -uroot -p
执行(注意master_log_pos和master_log_file的值)
CHANGE master to master_host = '主机IP', master_port = 3306, master_user='slave', master_password='123456', master_log_file ='binlog.000003', master_log_pos=3049;
运行复制服务
START SLAVE;
[!NOTE]
stop slave : 停止复制服务
当遇到错误提示:This operation cannot be performed with a running replica io thread; run STOP REPLICA IO_THREAD FOR CHANNEL '' first时,请执行 STOP REPLICA IO_THREAD FOR CHANNEL ''
验证是否成功
show slave status \G;
出现如下:Slave_IO_Running: Yes,Slave_SQL_Running: Yes 则成功;若不成功,请看Last_IO_Error和Last_SQL_Error中的表述
*************************** 1. row *************************** Slave_IO_State: Waiting for source to send event Master_Host: xxx.xx.xxx.xxx Master_User: slave_account Master_Port: 3306 Connect_Retry: 60 Master_Log_File: binlog.000003 Read_Master_Log_Pos: 3049 Relay_Log_File: a066fb82d4ba-relay-bin.000002 Relay_Log_Pos: 594 Relay_Master_Log_File: binlog.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes ... Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: ...
[!WARNING]
-
在主从架构配置完成之前,不要对主/从数据库做:增删数据库和表以及增删查改数据的操作。
-
主从架构配置完成之后,不要对从表做增删改的操作,无论是对表,数据库,行,都不要做。不然可能出现失败
-
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18238702
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!