常用环境部署(十)——MySQL主从同步数据搭建(一主一从)

本文详细介绍了如何搭建MySQL主从同步环境,包括主从服务器的MySQL安装、主库和从库的配置,以及同步测试。在配置过程中强调了注意事项,如保持版本一致、配置用户授权、检查主库状态等。同时,针对SLAVE_SQL_RUNNING为NO的问题,提供了解决方法,确保数据能够顺利同步。

一、主从服务器MySQL安装

1、注意事项

主从服务器数据库尽量安装同一版本,避免兼容性造成的一些错误产生

2、Centos安装MySQL

链接:centos7离线安装MySQL-CSDN博客

二、主库MySQL配置 

1、修改主库配置

(1)编辑数据库配置文件

vim /etc/my.cnf

注意:我的数据库配置文件为/etc/my.cnf,大家按照自己的去修改就行

(2)修改配置如下:

max_allowed_packet = 64M
transaction_isolation = READ-COMMITTED
tmp_table_size = 512M
# 设置字符集为utf8
character_set_server = utf8
# 不区分大小写
lower_case_table_names = 1
# 允许最大连接数
max_connections = 9600 

server-id=1
# Binary Logging.
# log-bin 二进制日志
log-bin=mysql-bin
#只保留7天的二进制日志,以防磁盘被日志占满
expire-logs-days=7
#不备份的数据库
binlog-ignore-db  = mysql       
binlog-ignore-db  = information_schema
binlog-ignore-db  = performation_schema
binlog-ignore-db  = sys
#需要做复制的数据库名,如果有多个,复制binlog-do-db即可
binlog-do-db      = test 

注意: 修改完配置之后重启数据

### 配置 Docker 中 MySQL 从复制 #### 创建并启动服务器容器 为了建立 MySQL从复制环境,在 Docker 中新建服务器可以通过如下命令完成: ```bash docker run -d \ -p 3306:3306 \ --name mysql_master \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ mysql:5.7 ``` 此操作将会基于指定版本 `mysql:5.7` 启动个新的名为 `mysql_master` 容器,并映射相应的端口以及卷到宿机上[^3]。 #### 进入服务器容器配置 服务已经成功运行,可以利用下面这条指令进入到该容器内部以便进步设置: ```bash docker exec -it mysql_master /bin/bash ``` 这步骤允许直接访问容器内的 Bash shell 来执行必要的初始化工作和修改配置文件等操作[^1]。 #### 修改 Master 节点配置 在 `/etc/mysql/my.cnf.d/server.cnf` 文件中添加或编辑以下参数来启用二进制日志记录功能和其他必需选项。确保这些更改反映了正确的 server-id 和 binlog-format 设置。 ```ini [mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=testdb ``` 上述配置中的 `server-id` 应当唯标识每个参与复制链路的服务实例;而 `log-bin` 则用于开启二进制日志支持,这对于后续同步数据至关重要。 #### 创建 Slave 用户权限 回到 MySQL 命令行界面内创建个专门供 slave 使用的账户,并赋予其 REPLICATION SLAVE 特权: ```sql CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` 这里的 `'repl'` 是用来连接 master 数据库进行增量更新所使用的用户名,密码可以根据实际情况自行设定。 #### 获取 Master 状态信息 通过查询当前 master 上的状态获取 File 名字与 Position 数值作为稍后配置 slave 所需的数据源位置依据: ```sql SHOW MASTER STATUS\G ``` 记住输出结果里的 `File` 变量名及其对应的数值,因为它们将在下步被用作 slave 初始化时的关键输入项之。 #### 构建并启动 Slave 容器 同样地构建另个新的 MySQL 实例充当 follower 或者说 secondary node (即slave),区别在于此次命名不同且监听不同的外部端口号: ```bash docker run -d \ -p 3307:3306 \ --name mysql_slave \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /mydata/mysql-slave/log:/var/log/mysql \ -v /mydata/mysql-slave/data:/var/lib/mysql \ -v /mydata/mysql-slave/conf:/etc/mysql \ mysql:5.7 ``` 此时便有了两个独立运作却又相互关联着的 MySQL Server 实体——master 和 slave。 #### 访问 Slave 并调整相应配置 如同之前对待 master 的方式样,现在也应当进入新近部署完毕的那个 slave container 内部继续开展剩余的工作流程: ```bash docker exec -it mysql_slave /bin/bash ``` 之后依照先前获得自 master end point 处的信息去完善本地 my.cnf 下面有关于 replication section 的定义部分[^2]。 #### 更改 Slave 节点配置 编辑 `/etc/mysql/my.cnf.d/server.cnf` 添加下列内容以指明本节点的角色属性: ```ini [mysqld] server-id=2 relay-log=mysql-relay-bin read-only=ON replicate-wild-ignore-table=%.auto_increment_column_name ``` 注意此处 `server-id` 不可重复,必须不同于其他任何已存在的成员;另外 relay log 参数有助于提高性能表现,同时 read only 模式下能防止意外写入破坏致性。 #### 开始 Slave 复制过程 最后步是在 slave side 发起 CHANGE MASTER TO 请求指向远程 master 地址及相关认证凭证,紧接着 START SLAVE 即可触发整个同步机制正式启动起来: ```sql CHANGE MASTER TO MASTER_HOST='ip_of_mysql_master', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='recorded_file_from_show_master_status', MASTER_LOG_POS=pos_number; START SLAVE; ``` 以上就是完整的搭建套简单的 MySQL 从架构的方法概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wd520521

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值