当前位置: 首页 > news >正文

MySQL 安装与配置教程:单机、主从复制与集群模式

目录
  1. MySQL 简介
  2. MySQL 安装
  3. MySQL 基础配置
  4. MySQL 主从复制配置
  5. MySQL 集群配置
  6. 总结

1. MySQL 简介

MySQL 是一个广泛使用的关系型数据库管理系统,具有高性能、高可靠性和易用性等特点。它支持多种部署模式,包括单机模式、主从复制模式(用于高可用性和读写分离)以及集群模式(用于分布式部署和高扩展性)。

2. MySQL 安装

MySQL 可以安装在各种操作系统上,这里介绍在 Ubuntu 和 CentOS 系统上的安装方法。

2.1 在 Ubuntu 上安装 MySQL
  1. 更新包列表并安装 MySQL:

    sudo apt-get update
    sudo apt-get install mysql-server
    
  2. 安装完成后,MySQL 服务会自动启动。你可以通过以下命令检查 MySQL 服务状态:

    sudo systemctl status mysql
    
2.2 在 CentOS 上安装 MySQL
  1. 添加 MySQL 官方 YUM 源并安装 MySQL:

    sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
    sudo yum install mysql-community-server
    
  2. 安装完成后,启动 MySQL 服务并设置开机自启:

    sudo systemctl start mysqld
    sudo systemctl enable mysqld
    
  3. 检查 MySQL 服务状态:

    sudo systemctl status mysqld
    

3. MySQL 基础配置

3.1 安全初始化

在安装完 MySQL 后,推荐进行安全初始化,以确保数据库的安全性。

  1. 获取 MySQL 默认生成的 root 密码:

    sudo grep 'temporary password' /var/log/mysqld.log
    
  2. 运行 MySQL 安全配置脚本:

    sudo mysql_secure_installation
    

    根据提示设置 root 密码,并禁用匿名用户、删除测试数据库、禁用远程 root 登录等。

3.2 修改配置文件

MySQL 的配置文件通常位于 /etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf,可以根据需求进行修改。

一些常见的配置项包括:

  • bind-address: MySQL 监听的 IP 地址,默认是 127.0.0.1。可以修改为 0.0.0.0 以允许外部访问。

    bind-address = 0.0.0.0
    
  • max_connections: 设置最大连接数。

    max_connections = 200
    
  • default-authentication-plugin: 设置默认的认证插件。MySQL 8.0 默认使用 caching_sha2_password,但你可以更改为 mysql_native_password 以支持旧的客户端:

    default-authentication-plugin = mysql_native_password
    

修改完成后,重启 MySQL 服务以应用更改:

sudo systemctl restart mysql

4. MySQL 主从复制配置

MySQL 主从复制(Master-Slave Replication)是实现数据冗余和负载均衡的重要机制。在主从模式中,主服务器负责写操作,从服务器负责读操作,实现读写分离和故障转移。

4.1 配置主服务器(Master)
  1. 编辑主服务器上的 MySQL 配置文件 my.cnf,添加如下配置:

    [mysqld]
    server-id = 1
    log-bin = /var/log/mysql/mysql-bin.log
    binlog-format = ROW
    
    • server-id:为每个 MySQL 服务器指定一个唯一的 ID,主服务器和从服务器的 ID 必须不同。
    • log-bin:启用二进制日志(Binary Log),用于记录数据库的更改操作。
  2. 创建一个复制用户,并为其授予复制权限:

    CREATE USER 'replica_user'@'%' IDENTIFIED BY 'your_password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
    FLUSH PRIVILEGES;
    
  3. 获取主服务器的二进制日志文件名和位置:

    SHOW MASTER STATUS;
    

    记下输出的 FilePosition,在配置从服务器时会用到。

  4. 重启 MySQL 服务:

    sudo systemctl restart mysql
    
4.2 配置从服务器(Slave)
  1. 编辑从服务器上的 MySQL 配置文件 my.cnf,添加如下配置:

    [mysqld]
    server-id = 2
    relay-log = /var/log/mysql/mysql-relay-bin.log
    
  2. 登录从服务器的 MySQL 控制台,执行如下命令以配置主从复制:

    CHANGE MASTER TO
    MASTER_HOST='master_ip',
    MASTER_USER='replica_user',
    MASTER_PASSWORD='your_password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=12345;
    
    • MASTER_HOST:主服务器的 IP 地址。
    • MASTER_LOG_FILEMASTER_LOG_POS:使用在主服务器上获取的日志文件名和位置。
  3. 启动从服务器的复制进程:

    START SLAVE;
    
  4. 检查从服务器的复制状态:

    SHOW SLAVE STATUS\G;
    

    确保 Slave_IO_RunningSlave_SQL_Running 都显示为 Yes

5. MySQL 集群配置

MySQL 集群是一个分布式数据库架构,提供高可用性和高扩展性。以下是 MySQL InnoDB Cluster 的配置方法。

5.1 安装 MySQL Shell 和 Router
  1. 安装 MySQL Shell 和 MySQL Router:

    sudo apt-get install mysql-shell mysql-router
    
  2. 启动 MySQL Shell 并连接到 MySQL 服务器:

    mysqlsh root@localhost
    
5.2 配置 InnoDB Cluster
  1. 在 MySQL Shell 中,创建 InnoDB Cluster:

    dba.createCluster('myCluster')
    
  2. 添加 MySQL 实例到集群中:

    cluster = dba.getCluster('myCluster')
    cluster.addInstance('root@server2')
    cluster.addInstance('root@server3')
    

    确保各实例的 MySQL 配置文件中已启用 group_replication

  3. 检查集群状态:

    cluster.status()
    
5.3 配置 MySQL Router
  1. 在 MySQL Router 上进行路由配置:

    mysqlrouter --bootstrap root@localhost --directory /etc/mysqlrouter
    
  2. 启动 MySQL Router:

    sudo mysqlrouter -c /etc/mysqlrouter/mysqlrouter.conf
    

    MySQL Router 将自动处理客户端连接的路由请求,并将其分配到集群的各个节点。

6. 总结

本教程介绍了如何安装 MySQL,并配置单机模式、主从复制模式和集群模式。通过这些配置,你可以充分利用 MySQL 的高性能和高可用性特性,构建一个稳定、可靠的数据库服务架构。

相关文章:

MySQL 安装与配置教程:单机、主从复制与集群模式

目录 MySQL 简介MySQL 安装MySQL 基础配置MySQL 主从复制配置MySQL 集群配置总结 1. MySQL 简介 MySQL 是一个广泛使用的关系型数据库管理系统,具有高性能、高可靠性和易用性等特点。它支持多种部署模式,包括单机模式、主从复制模式(用于高…...

JavaEE 的相关知识点(一)

一、过滤器 过滤器(Filter)是一个用于对请求和响应进行预处理的组件。过滤器可以在 Java Servlet 规范中使用,通常用于执行一些通用的任务 1、过滤器的作用 过滤器是一种javaEE规范中定义的一种技术,可以让请求达到目标servlet之…...

使用Python实现深度学习模型:智能医疗影像识别与诊断

介绍 智能医疗影像识别与诊断是现代医疗技术的重要应用,通过深度学习模型,可以自动分析和识别医疗影像,提高诊断的准确性和效率。本文将介绍如何使用Python和深度学习技术来实现智能医疗影像识别与诊断。 环境准备 首先,我们需要安装一些必要的Python库: pip install …...

24.给定一个链表,实现一个算法交换每两个相邻节点并返回其头部。要求不能修改列表节点中的值,只能更改节点本身。

24. Swap Nodes in Pairs 题目 给定一个链表,交换每两个相邻节点并返回其头部。要求不能修改列表节点中的值,只能更改节点本身。 Example: Given 1->2->3->4, you should return the list as 2->1->4->3....

Python 通过UDP传输超过64k的信息

Python 通过UDP传输超过64k的信息 在网络编程中,UDP(用户数据报协议)是一种常用的传输协议。与TCP不同,UDP是无连接的,并且不保证数据包的顺序、完整性及交付。尽管如此,UDP因其较低的延迟和开销而被广泛应…...

微服务设计原则——高性能:批量

能批量就不要并发。 如果调用方需要调用我们接口多次才能进行一个完整的操作,那么这个接口设计就可能有问题。 比如获取数据的接口,如果仅仅提供getData(int id)接口,那么使用方如果要一次性获取 20 个数据,它就需要循环遍历调用…...

C:指针学习-指针变量—学习笔记

今日伊雷娜: 目录 前言: 1、字符指针变量 1.1 使用字符指针存放字符 1.2 使用字符指针变量存放字符串 2、数组指针变量 2.1 什么是数组指针变量? 2.2 数组指针变量初始化 2.3 关于数组指针类型的解析 3、函数指针变量 3.1 函数地址 …...

【MySQL 07】表的增删查改 (带思维导图)

文章目录 🌈 一、insert 添加数据⭐ 1. 单行数据 全列插入⭐ 2. 多行数据 指定列插入⭐ 3. 插入否则更新⭐4. 插入否则替换 🌈 二、select 查询数据⭐ 1. select 列🌙 1.1 全列查询🌙 1.2 指定列查询🌙 1.3 查询字段…...

快速上手Git

Git相关概念 Git是一个开源的分布式版本控制系统,由Linus Torvalds在2005年创建,用于有效、高速地处理从小到大的项目版本管理。它是由 Linux 之父 Linus Torvalds 开发的,并已经成为了现代软件开发领域中最流行的版本控制系统之一。 git的工…...

RTC时钟测试

1. 基础知识 Linux 的系统时间有时跟硬件时间是不同步的。 Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟。系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIO…...

大数据技术——实战项目:广告数仓(第六部分)报表数据导出至clickhouse

目录 第11章 报表数据导出 11.1 Clickhouse安装 11.2 Clickhouse建表 11.2.1 创建database 11.2.2 创建table 11.3 Hive数据导出至Clickhouse 第11章 报表数据导出 由于本项目最终要出的报表,要求具备交互功能,以及进行自助分析的能力,…...

Android studio模拟制作-简易的订餐交易小案例

一、最终呈现效果 订餐支付小案例效果 二、布局设计activity_main.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xml…...

消防隐患在线小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;消防隐患举报管理&#xff0c;消防隐患分类管理&#xff0c;统计分类管理&#xff0c;处理结果管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;我…...

【Vue3】路由Params传参

【Vue3】路由Params传参 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…...

授权cleanmymac访问全部磁盘 Mac授权访问权限 cleanmymac缺少权限

CleanMyMac是Mac系统下的一款专业的苹果电脑清理软件&#xff0c;同时也是一款优秀的电脑系统管理软件。它能有效清理系统垃圾&#xff0c;快速释放磁盘内存&#xff0c;缓解卡顿现象&#xff0c;保障系统顺畅地运行。 全磁盘访问权限&#xff0c;就好比机场内进行的安全检查。…...

Ubuntu/18.04 LTS下编译 BoringSSL 库

1、准备一个 Ubuntu/18.04 LTS 系统的设备 2、安装软件 GIT、GCC、CMAKE、G、Golang:1.16 及以上版本 3、克隆仓库源 git clone https://boringssl.googlesource.com/boringssl cd boringssl 4、使用特定版本 git checkout 9fc1c33e9c21439ce5f87855a6591a9324e569fd 5、编…...

【stm32项目】多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码)

多功能智能家居室内灯光控制系统设计与实现 目录&#xff1a; 目录&#xff1a; 前言&#xff1a; 一、项目背景与目标 二、国内外研究现状&#xff1a; 2.1 国内研究现状&#xff1a; 2.2 国外研究现状&#xff1a; 2.3 发展趋势 三、硬件电路设计 3.1 总体概述 3.2 硬件连接总…...

xss靶场详解

目录 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 8.第八题 1.第一题 在源码script标签里边&#xff0c;innerhtml是用于访问或修改 HTML 元素内的 HTML 内容的&#xff0c;这里是访问spaghet这个元素的&#xff0c;并通过括号里面的东西搜索当前…...

华为的流程管理

华为建设流程体系始于2000年&#xff0c;那时华为公司面临着快速扩张和全球化发展的挑战&#xff0c;意识到传统的管理模式已经无法满足业务发展的需求。为了提高公司的管理效率和竞争优势&#xff0c;华为决定启动流程体系的建设。在建设过程中&#xff0c;华为借鉴了业界最佳…...

操作系统Linux

1.Linux命令 ls&#xff1a;查看当前目录下所有目录和文件ps&#xff1a;查看所有正在运行的进程top&#xff1a;显示当前系统中占用资源最多的一些进程&#xff0c;shiftm按照内存查看大小netstat&#xff1a;查看端口的命令vi&#xff1a;查看文件的命令rm&#xff1a;删除文…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...