MySQL5.7主从复制详细配置教程
作者:youbins 发布时间:2024-01-17 18:19:32
1 环境准备
192.168.1.34 服务器A(主机)
192.168.1.35 服务器B(从机)
2 安装mysql
MySQL版本:
这里采用Server version: 5.7.35 MySQL Community Server (GPL)
我们把安装在“服务器A”的数据库称作“主数据库”、安装在“服务器B”的数据库称作“从数据库”。
2.1 开放端口
确保服务器A与服务器B上的3306端口可以互访。
3 设置主库
进行下面的配置前,假设你已经在两台服务器AB上安装成功MySQL服务。
192.168.1.34 服务器A(主机)
3.1 修改MySQL配置文件
编辑mysql配置文件/etc/my.cnf,添加如下的内容:
[mysqld]
log-bin=mysql-bin
server-id=1
保存修改内容并重启MySQL服务。
3.2 创建一个用户用于复制
所谓复制用户,即供从数据库使用的,从主数据库拷贝二进制日志信息的用户。
用客户端连接上MySQL服务,执行以下语句创建一个用于复制的用户:
mysql> CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'Abc!@#123';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
3.3 获取二进制文件位置
这些信息在后面配置从数据库时用到。
1、阻塞数据库写语句
mysql> FLUSH TABLES WITH READ LOCK;
2、获取当前二进制文件的名称和位置
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1030 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
3.4 使用mysqldump创建数据快照
本指南默认使用
InnoDB
存储引擎。
如果在启用主从复制前,主数据库已存在数据,那么你就需要先把这些数据拷贝到从数据库。下面给出一个例子,将所有数据库备份到一个叫做dbdump.db
的文件:
shell> mysqldump --all-databases --master-data > dbdump.db
其中--master-data
选项会自动追加 CHANGE MASTER TO
语句,该语句在从数据库启动复制进程时需要到。
注意:
如果你没有使用
--master-data
选项的话,那么你需要在一个单独的会话中锁定所有数据表。详情见 Section 16.1.2.3, “Obtaining the Replication Source's Binary Log Coordinates”.
4 设置从库
192.168.1.35 服务器B(从机)
4.1 修改MySQL配置文件
编辑mysql配置文件/etc/my.cnf,添加如下的内容:
[mysqld]
server-id=2
skip_slave_start=ON
这里主要解释一下skip_slave_start
配置,ON表示数据库启动时不启动从机的复制进程,需要通过手动的方式进行启动。
保存修改内容并重启MySQL服务。
4.2 设置从库对应的主库
这里主要用到 CHANGE MASTER TO语句,其基本语法如下:
mysql> CHANGE MASTER TO
-> MASTER_HOST='source_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
我们的例子对应如下(当中的参数见上文[设置主数据库](#3 设置主数据库)一节):
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.34',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='Abc!@#123',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=1030;
4.3 导入全新的数据的情况
即主库和备库都是新建的,不存在旧库旧表旧数据,且主库已经启用二进制日志,备库已指定主库及当前位置。这时你想要将其它的数据库备份下来导入到当前的主备数据库中,你只需要在主库中执行导入命令即可(不能再备库执行导入语句):
shell> mysql -h '192.168.1.34' < fulldb.dump
4.4 主库已存在数据的情况
即主库在启用二进制日志前已存在数据,你在启用从库复制进程前需要把主库的备份快照导入到从库中,然后才能启用从库的复制进程。
1、新建主库快照
shell> mysqldump --all-databases --master-data > dbdump.db
2、导入到从库中
shell> mysql -h '192.168.1.35' < fulldb.dump
4.5 启用从库复制进程
mysql> START SLAVE;
验证主从复制是否启动成功
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.34
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 2096
Relay_Log_File: 192-relay-bin.000007
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
......
如上,只有Slave_IO_Running
和Slave_SQL_Running
同时都是Yes
的时候表示主从复制配置成功。
5 互为主从设置
前面两个章节讲了如何配置主从复制,即服务器A的数据库作为主库,服务器B的数据库作为从库;那么只要按照相反的步骤再设置一遍,即服务器B的数据库作为主库,服务器A的数据库作为从库。这样就可以使得服务器A的数据库和服务器B的数据库互为主从了。
来源:https://www.cnblogs.com/youbins/archive/2022/11/01/16848783.html


猜你喜欢
- 这篇文章阐述的是一种函数式编程(functional-programming)设计模式,我称之为惰性函数定义(Lazy Function D
- 一、安装写出许多有趣的可视化东西也可以画出很多奇妙的图案pip install turtule二、画布画布就是turtle为我们展开用于绘图
- 一、原理概述Query Cache就是把“查询返回的结果”缓存起来。但是,仅仅只是缓存“查询返回的结果”,其实是不准确的,Query Cac
- 最近开发项目中又重新拿起了Mysql,在搭建环境的时候遇到了中文乱码问题。下面我把我的解决方式跟大家分享一下 1、通过show VARIAB
- 本文实例讲述了PHP缓存集成库phpFastCache用法。分享给大家供大家参考。具体分析如下:phpFastCache是一个开源的PHP缓
- 在学习pygame模块过程中,我们可以通过使用 pygame模块实现很多功能性的东西,但是很多人应该没有利用pygame实现过雪花飘落的效果
- 本篇文章面向的读者: 已经基本掌握Go中的 协程(goroutine),通道(channel),互斥锁(sync.Mutex),读
- 1.设计原则 1) 标准化和规范化 数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但Third Normal Form(3N
- 1、配置安装源# 安装dnf install http://mirrors.ustc.edu.cn/mysql-repo/mysql80-c
- 任何一个交互过程的操作,对于用户来说都有学习成本,谁也不能保证所有人都可以准确无误地走完一个流程。交互设计师在设计时应该考虑适时地给用户相应
- 比如input中的数据和data中的msg双向绑定。那么我们可以 判断先把msg以空格拆分成数组,然后拼接起来,判断字符串的长度
- 今天说一些golang的基础知识,还有你们学习会遇到的问题,先讲解hello wordpackage mainimport "fm
- 前言本文根据安前松的视频分享整理而来,视频回放地址如下:www.bilibili.com/video/BV1Hr…一、
- 本文介绍了Python实现快速傅里叶变换的方法(FFT),分享给大家,具体如下:这里做一下记录,关于FFT就不做介绍了,直接贴上代码,有详细
- 相信大家对javascript中的面向对象写法都不陌生,那还记得有几种创建对象的写法吗?相信大家除了自己常写的都有点模糊了,那接下来就由我来
- cv::Mat 图像格式 (Data Type)命名规则通用的参数命名格式为:CV_{元素比特数}{元素类型}C{通道数}1最常见的 CV_
- 前言好记性不如烂笔头!最近在接口测试,以及爬虫相关,需要用到Python中的requests库,之前用过,但是好久没有用又忘了,这次就把这块
- 条形图(bar chart),也称为柱状图,是一种以长方形的长度为变量的统计图表,长方形的长度与它所对应的变量数值呈一定比例。1. 竖放条形
- python是3.6centos 6 64位1.安装python2.安装pipwget https://bootstrap.pypa.io/
- --------------------------------------------------------- 正则收藏 手机号码: $