mysql 主从配置

MySQL 主从复制是指在 MySQL 数据库系统中,主服务器(Master)将数据更新操作(如 INSERT、UPDATE、DELETE)复制到从服务器(Slave)。主从复制实现了数据的同步复制,使得从服务器可以保持与主服务器的数据一致。

主从复制的原理

主服务器

主服务器上启用 二进制日志(binlog),记录所有修改数据库的操作(如 DML 操作)。
当主服务器有数据更新操作时,相关的操作信息会被记录在 binlog 文件中,文件名一般为 mysql-bin.xxxxxx。

从服务器

从服务器上启用 中继日志(relay log)。从服务器从主服务器获取二进制日志。
从服务器通过 IO线程(IO_THREAD)从主服务器读取 binlog 文件并将其存储到中继日志(Relay Log)中。
然后,从服务器的 SQL线程(SQL_THREAD)从中继日志中读取操作并在从服务器上执行这些操作,保持数据同步。
同步方式:

异步复制:主服务器将操作写入 binlog 后立即返回,不等待从服务器确认。
半同步复制:主服务器将操作写入 binlog,然后至少等待一个从服务器确认接收到数据。
同步复制:主服务器将操作写入 binlog 后,所有从服务器执行完成后才返回。

主从复制的工作过程

配置主服务器:

启用 binlog 日志。
创建用于复制的专用账户,给予 REPLICATION SLAVE 权限。
获取主服务器当前的 二进制日志位置,以便从服务器从正确的位置开始复制。

配置从服务器:

在从服务器上设置主服务器的连接信息,包含主服务器的地址、端口、复制账号等。
启动从服务器的 IO_THREAD,从主服务器拉取 binlog。
启动 SQL_THREAD,在从服务器上执行中继日志中的 SQL 语句。

1. 配置主服务器

(1)编辑 MySQL 配置文件 

[root@localhost ~]# /etc/my.cnf[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysqld.log
binlog-do-db = testdb

 (2)创建用于复制的账户

create user rep@'192.168.1.%' identified with mysql_native_password by '123456';
GRANT REPLICATION SLAVE ON *.* TO rep@'192.168.1.%';   
FLUSH PRIVILEGES;
SHOW MASTER STATUS; 
mysql> CREATE USER rep@'192.168.1.%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO rep@'192.168.1.%';  
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |      875 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

(3)重启服务 

 [root@localhost ~]# systemctl restart mysqld

2. 配置从服务器


(1)编辑从服务器的 MySQL 配置文件 

[root@localhost ~]# /etc/my.cnf [mysqld]
server-id = 2  
relay-log = /var/log/mysql/mysql-relay-bin.log
log-bin = /var/log/mysql/mysql-bin.log  

 (2)配置从服务器连接主服务器

mysql> CHANGE MASTER TO  MASTER_HOST = '192.168.1.15',-> MASTER_USER = 'rep',-> MASTER_PASSWORD = '123456',-> MASTER_LOG_FILE = 'mysql-bin.000001',-> MASTER_LOG_POS = 12345;
Query OK, 0 rows affected, 8 warnings (0.01 sec)mysql> START SLAVE;
Query OK, 0 rows affected, 1 warning (0.15 sec)

(3)重启 MySQL 服务

[root@localhost ~]# systemctl restart mysqld

(4)验证复制是否成功

//如果 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes,说明复制正常 

    3. 配置第二个从服务器

     (1)编辑配置文件

    [root@localhost ~]# /etc/my.cnf [mysqld]
    server-id = 3 
    relay-log = /var/log/mysql/mysql-relay-bin.log
    log-bin = /var/log/mysql/mysql-bin.log
    

    (2)配置主服务器信息

    mysql> CHANGE MASTER TO  MASTER_HOST = '192.168.1.15',-> MASTER_USER = 'rep',-> MASTER_PASSWORD = '123456',-> MASTER_LOG_FILE = 'mysql-bin.000001',-> MASTER_LOG_POS = 12345;
    Query OK, 0 rows affected, 8 warnings (0.01 sec)mysql> START SLAVE;
    Query OK, 0 rows affected, 1 warning (0.15 sec)

    (3)重启 MySQL 服务

    [root@localhost ~]# systemctl restart mysqld

    (4)验证复制是否成功 

    4.验证主从复制是否生效

    (1). 在主服务器上执行一些数据操作

    mysql> create table test(-> id INT,-> name VARCHAR(255));
    Query OK, 0 rows affected (0.02 sec)mysql> INSERT INTO test (id, name) VALUES (1, 'test');
    Query OK, 1 row affected (0.08 sec)

    (2).在从服务器上查询数据,检查数据是否同步 

    mysql> SELECT * FROM text.test;
    

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15270.html

    如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    DeepSeek为何能爆火

    摘要:近年来,DeepSeek作为一款新兴的社交媒体应用,迅速在年轻人群体中走红,引发了广泛关注。本文旨在探讨DeepSeek为何能在短时间内爆火,从而为我国社交媒体的发展提供参考。首先,通过文献分析,…

    黑马React保姆级(PPT+笔记)

    一、react基础 1.进程 2、优势 封装成一个库,组件化开发更加方便 跨平台主要是react native等可以来写移动端如android,ios等 丰富生态:可以在很多浏览器用 3、市场 4、搭建脚手架 npx create-react-app react-basic npm start后仍然可能…

    STM32 CUBE Can调试

    STM32 CUBE Can调试 1、CAN配置2、时钟配置3、手动添加4、回调函数5、启动函数和发送函数6、使用方法(采用消息队列来做缓存)7、数据不多在发送函数中获取空邮箱发送,否则循环等待空邮箱 1、CAN配置 2、时钟配置 3、手动添加 需要注意的是STM32CUBE配置的代码需要再…

    DeepSeek从入门到精通:全面掌握AI大模型的核心能力

    文章目录 一、DeepSeek是什么?性能对齐OpenAI-o1正式版 二、Deepseek可以做什么?能力图谱文本生成自然语言理解与分析编程与代码相关常规绘图 三、如何使用DeepSeek?四、DeepSeek从入门到精通推理模型推理大模型非推理大模型 快思慢想&#x…

    【vscode+latex】实现overleaf本地高效编译

    overleaf本地高效编译 1. 配置本地latex环境2. vscode插件与配置3. 使用 之前觉得用overleaf在线写论文很方便,特别是有辅助生成latex格式公式的网页,不需要在word上一个一个手打调格式。 然而,最近在写一篇论文的时候,由于这篇论…

    Spring AI -使用Spring快速开发ChatGPT应用

    前言 Spring在Java生态中一直占据大半江山。最近我发现Spring社区推出了一个Spring AI项目,目前该项目还属于Spring实验性项目,但是我们可以通过该项目,可以非常快速的开发出GPT对话应用。 本篇文章将会对SpringAI进行简单的介绍和使用&#…

    XILINX硬件设计-(1)LVDS接口总结

    1.LVDS差分信号电路原理 LVDS指的是低压差分信号,是一种电平标准。 差分信号在串行通信中有着非常广泛的应用,典型应用有PCIE中的gen1,gen2,gen3,gen4,gen5,SATA接口,USB接口等。 …

    保姆级教程Docker部署Zookeeper模式的Kafka镜像

    目录 一、安装Docker及可视化工具 二、Docker部署Zookeeper 三、单节点部署 1、创建挂载目录 2、命令运行容器 3、Compose运行容器 4、查看运行状态 5、验证功能 四、部署可视化工具 1、创建挂载目录 2、Compose运行容器 3、查看运行状态 一、安装Docker及可视化工…

    学习笔记:在华为云ModelArts上运行MindSpore扩散模型教程

    目录 一、背景与目的 二、环境搭建 三、模型原理学习 1. 类定义与初始化 2. 初始卷积层 3. 时间嵌入模块 4. 下采样模块 5. 中间模块 6. 上采样模块 7. 最终卷积层 8. 前向传播 9. 关键点总结 四、代码实现与运行 五、遇到的问题及解决方法 六、总结与展望 教程来源&#xff1a…

    Office/WPS接入DeepSeek等多个AI工具,开启办公新模式!

    在现代职场中,Office办公套件已成为工作和学习的必备工具,其功能强大但复杂,熟练掌握需要系统的学习。为了简化操作,使每个人都能轻松使用各种功能,市场上涌现出各类办公插件。这些插件不仅提升了用户体验,…

    学习 PostgreSQL 流复制

    PostgreSQL 流复制 PostgreSQL数据库异常中止后,数据库刚重启时,会重放停机前最后一个checkpoint点之后的 WAL日志,在把数据库恢复到停机的状态后,自动进入正常的状态,可以接收其他用户的查询和修改。 想象另一个场景…

    Python基础-元组tuple的学习

    在 Python 中,元组(tuple)是一种不可变的序列类型,允许存储不同类型的元素。元组非常类似于列表(list),但与列表不同的是,元组一旦创建,就不能修改其内容。 1 元组的创建…

    Photoshop自定义键盘快捷键

    编辑 - 键盘快捷键 CtrlShiftAltK 把画笔工具改成Q , 橡皮擦改成W , 涂抹工具改成E , 增加和减小画笔大小A和S 偏好设置 - 透明度和色域 设置一样颜色 套索工具 可以自定义套选一片区域 Shiftf5 填充 CtrlU 可以改颜色/色相/饱和度 CtrlE 合并图层 CtrlShiftS 另存…

    如何在Android Studio中开发一个简单的Android应用?

    Android Studio是开发Android应用的官方集成开发环境(IDE),它提供了许多强大的功能,使得开发者能够高效地创建Android应用。如果你是Android开发的初学者,本文将引导你如何在Android Studio中开发一个简单的Android应用…

    【Qt 常用控件】输入类控件1(QLineEdit和QTextEdit 输入框)

    目录 1.QLineEdit 单行输入框 例:输入个人信息,通过按钮提交 例:为输入框设置验证器,检查输入的电话 例:验证两次输入的密码是否一致 例:是否显示密码按钮,toggled信号。 2.QTextEdit多行输入框 、QPl…

    Bash (Bourne-Again Shell)、Zsh (Z Shell)

    文章目录 1. 历史背景2. 主要区别3. 功能对比自动补全插件和主题路径扩展提示符定制 4. 性能5. 使用场景6. 如何切换 Shell7. 总结 以下是 Bash 和 Zsh 之间的主要区别,列成表格方便对比: 特性BashZsh默认Shell大多数Linux发行版默认ShellmacOS默认She…

    Jetbrains IDE http客户端使用教程

    简介 JetBrains IDE(如IntelliJ IDEA, WebStorm, PhpStorm和PyCharm)自带一个内置的HTTP客户端,允许直接从IDE发送HTTP请求,而无需使用第三方工具,如Postman或cURL。 JetBrains IDE 中的 HTTP…

    android手机安装deepseek-r1:1.5b

    序 本文主要展示一下如何在android手机上安装deepseek-r1:1.5b 步骤 安装termux 到https://termux.dev/cn/index.html去下载 然后执行termux-setup-storage以获取手机存储权限 安装构建依赖 pkg install git cmake golang下载ollama git clone --depth 1 https://gitee.…

    U3D支持webgpu阅读

    https://docs.unity3d.com/6000.1/Documentation/Manual/WebGPU-features.html 这里看到已经该有的差不多都有了 WOW VFX更是好东西 https://unity.com/cn/features/visual-effect-graph 这玩意儿化简了纯手搓一个特效的流程 如果按原理说就是compute shader刷position&#…

    PWM波形输出

    一、想要达到的效果 二、实现代码 因为是在1khz的频率下,所以用重新配置定时器0,定时长度为100微妙 void Timer0Init(void) //100微秒12.000MHz {AUXR | 0x80; //定时器时钟1T模式TMOD & 0xF0; //设置定时器模式TL0 0x50; //设置定时初值TH0 …