mysql主从集群

本文详细介绍了MySQL主从集群的配置步骤,包括开启主库binlog、设置不同server-id、创建复制账号、备份主库、导入从库、执行CHANGEMASTERTO命令等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql主从集群

配置步骤

  • 1主库打开log-bin
  • 2主库和从库的server-id 设置的要不相同
  • 3主库上建立用于从库复制的帐号
  • 4把主库做个备份
  • 5将主库的备份灌到从库
  • 6在从库执行CHANGE MASTER TO
  • 7开启同步 start slave; (报错就重启mysql服务 )

主库相关操作

开启主库的log-bin
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
log-bin=/var/lib/mysql/log/mysql-bin
server-id = 1
这里的log-bin文件放置的目录要的用户和用户组要修改为mysql
server-id 不能重复
mysql-bin是日志文件的前缀,这里的路径/var/lib/mysql/log/一定要存在,才可以

查看log-bin 是否开启
[root@node01 log]# mysql -uroot -p123456 -e “show variables like ‘log_bin’”
+—————+——-+
| Variable_name | Value |
+—————+——-+
| log_bin | ON |
+—————+——-+

在主库上建立用于从库复制的帐号rep
grant replication slave on . to ‘rep’@’%’ identified by ‘123456’
flush privileges;

给主库做备份
1给主库加个锁
mysql> flush tables with read lock;
mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 566 | | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

2dump数据
mysqldump -uroot -p123456 -A -B –events –master-data=2 > /opt/rep.sql

mysql> unlock tables;

将主库备份灌到从库中
mysql -uroot -p123456 < /opt/rep.sql

从库相关操作

设置从库的server-id
vim /etc/my.cnf
server-id = 3

在从库执行change master to
CHANGE MASTER TO
MASTER_HOST=’192.168.254.50’,
MASTER_PORT=3306,
MASTER_USER=’rep1’,
MASTER_PASSWORD=’123456’,
MASTER_LOG_FILE=’mysql-bin.000001’,
MASTER_LOG_POS=3446

mysql> start slave;

检查是否成功开启
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

测试

在主库上测试创建数据库或者向表中新增记录

<think>好的,用户想了解如何使用Docker搭建MySQL主从集群。我需要整理一下步骤,确保结构清晰,并且符合用户提供的系统级指令,比如正确使用LaTeX格式和引用标记。首先,我应该参考用户提供的引用内容,里面有关于Docker搭建MySQL主从复制的详细步骤,比如创建容器、修改配置文件、授权slave账户等。 首先,我需要明确主从复制的原理,简要说明一下,让用户理解为什么需要这些步骤。然后分步骤讲解:准备工作、主库配置、从库配置、验证同步。每个步骤里要包含具体的命令和配置文件修改,比如my.cnf的配置,创建用户并授权,还有CHANGE MASTER TO的命令。同时,注意引用对应的引用来源,比如在重启容器的时候引用[2]和[4],在授权slave的时候引用[1]和[5]。 还要检查是否需要处理端口映射、配置文件挂载等细节,用户提供的引用中提到使用不同的端口,比如3307、3308,这可能需要在docker run命令中指定。例如引用[5]中使用了-p参数映射不同的端口,所以需要提醒用户注意端口冲突的问题。 另外,用户可能遇到的问题,比如容器之间的网络通信,是否需要自定义网络?或者使用默认的bridge网络?可能需要说明容器之间的连接方式,比如通过容器名称或IP。引用中没有提到自定义网络,所以可能默认使用bridge,但需要确保容器能互相访问。 在配置主库的时候,需要获取binlog的位置和文件,这在引用[1]和[5]中都有涉及,使用SHOW MASTER STATUS获取信息,然后从库配置的时候使用这些信息进行连接。 最后,生成相关的问题,比如主从复制的原理,如何解决同步失败,如何扩展为一主多从,以及主从延迟的问题。这些问题需要基于教程内容,帮助用户进一步学习。 现在需要把这些步骤以清晰的结构写出来,确保每个步骤的命令正确,并且正确添加引用标记。同时,代码块要使用正确的格式,比如docker命令和SQL语句分开,保持可读性。还要注意中文表达,避免专业术语错误,比如“主库”、“从库”、“binlog”等。</think>### 使用 Docker 构建 MySQL 主从复制集群教程 #### 一、原理说明 MySQL主从复制通过主库(Master)记录二进制日志($binlog$),从库(Slave)读取并重放这些日志实现数据同步[^3]。主从集群可提升数据可靠性,并支持读写分离。 --- #### 二、详细步骤 ##### 1. **准备工作** - 安装 Docker 环境 - 拉取 MySQL 镜像: ```bash docker pull mysql:5.7 ``` ##### 2. **创建主库容器** ```bash docker run --name mysql-master -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /path/master/conf:/etc/mysql/conf.d \ -d mysql:5.7 \ --lower_case_table_names=1 ``` - **关键参数**: - `-p 3307:3306`: 主库端口映射(避免与本地 MySQL 冲突) - `-v`: 挂载配置文件目录[^5] ##### 3. **配置主库** 1. 进入容器修改配置文件: ```bash docker exec -it mysql-master /bin/bash vi /etc/mysql/conf.d/my.cnf ``` 2. 添加配置: ```ini [mysqld] server-id=1 # 唯一标识主库 log-bin=mysql-bin # 开启binlog ``` 3. 重启容器生效: ```bash docker restart mysql-master ``` 4. 创建同步账户: ```sql CREATE USER 'slave'@'%' IDENTIFIED BY 'slave_123'; GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'; FLUSH PRIVILEGES; ``` [^1] ##### 4. **创建从库容器** ```bash docker run --name mysql-slave1 -p 3308:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /path/slave1/conf:/etc/mysql/conf.d \ -d mysql:5.7 \ --lower_case_table_names=1 ``` - **修改从库配置**(`my.cnf`): ```ini [mysqld] server-id=2 # 每个从库需唯一 ``` ##### 5. **配置从库连接主库** 1. 获取主库 `binlog` 信息: ```sql SHOW MASTER STATUS; ``` ``` +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 617 | | | +------------------+----------+--------------+------------------+ ``` 2. 在从库执行同步命令: ```sql CHANGE MASTER TO MASTER_HOST='mysql-master', # 若跨主机需用IP MASTER_USER='slave', MASTER_PASSWORD='slave_123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=617; ``` [^5] 3. 启动从库同步: ```sql START SLAVE; SHOW SLAVE STATUS\G # 验证Slave_IO_Running和Slave_SQL_Running是否为Yes ``` --- #### 三、验证同步 1. 在主库创建测试数据: ```sql CREATE DATABASE test_sync; USE test_sync; CREATE TABLE demo(id INT); INSERT INTO demo VALUES (1); ``` 2. 在从库检查数据是否同步成功。 --- #### 四、扩展优化 - **一主多从**:重复从库配置步骤,分配不同 `server-id` - **读写分离**:应用层将写操作指向主库,读操作分散到从库 - **容器网络**:建议使用自定义 Docker 网络提升容器间通信稳定性 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值