面试题整理

发布于 2023-06-08  513 次阅读


更新时间: 2023-06-12
[TOC]

系统

1、内存

(1) 查看内存指令
  1. free命令:free 命令用于显示系统内存使用情况,包括总内存、已使用内存、空闲内存以及缓冲区和缓存的使用情况。

    free -h

    该命令以人类可读的方式显示内存大小(以MB或GB为单位),输出示例如下:

                 total       used       free     shared    buffers     cached
    Mem:          7.8G       2.4G       5.3G       342M       112M       1.1G
    -/+ buffers/cache:       1.2G       6.6G
    Swap:         2.0G         0B       2.0G

    在输出中,"Mem" 行显示了总内存、已使用内存和空闲内存的详细信息。"-/+ buffers/cache" 行显示了实际使用内存和可用内存(不包括缓冲区和缓存)。

  2. top命令:top 命令用于实时监视系统的各种性能指标,包括内存使用情况。启动 top 命令后,按下 "M" 键可以按内存使用排序进程列表,以便查看占用内存最多的进程。

    top

    top 命令的输出中,内存使用情况显示在 "Mem" 行中,包括总内存、已使用内存、空闲内存、缓冲区和缓存的使用情况。

  3. vmstat命令:vmstat 命令用于报告虚拟内存的统计信息,包括内存使用情况、交换分区使用情况、进程、IO等。

    vmstat

    vmstat 命令的输出包含多个字段,其中 "free" 列显示空闲内存的数量,"swpd" 列显示交换分区已使用的数量,"buff" 和 "cache" 列显示缓冲区和缓存的大小。

  4. htop命令:htop 是一个更强大和交互式的进程监视器,可以提供更直观的内存使用情况展示。

(2) 清理缓存
  1. 使用 sync 命令:

    sync

    sync 命令用于将内存中的数据立即写入磁盘,并清空文件系统缓冲区。这将导致缓冲区和缓存的数据被刷新到磁盘上,释放相关的内存。

  2. 使用 drop_caches 参数:

    echo 1 > /proc/sys/vm/drop_caches

    使用 echo 命令将数字 1 写入 /proc/sys/vm/drop_caches 文件。这将清空缓冲区(buffers)。

    如果你想清空缓存(cached),可以使用数字 2 或 3 替代 1:

    echo 2 > /proc/sys/vm/drop_caches  # 清空缓存
    echo 3 > /proc/sys/vm/drop_caches  # 清空缓冲区和缓存

    注意:清理缓冲区和缓存可能会导致一些性能下降,因为系统需要重新读取磁盘上的数据到缓冲区和缓存中。

这些方法会清理 Linux 系统中的缓冲区和缓存,释放相关的内存。在普通的系统运行中,缓冲区和缓存的占用是正常的,它们可以提高系统性能。通常情况下,不需要频繁地手动清理缓冲区和缓存。只有在特殊情况下,如进行性能测试或遇到内存压力较大的情况时,才需要清理缓冲区和缓存。

(3) swap分区的作用
  1. 扩展可用内存:Swap 分区允许将部分不常用的内存数据存储到硬盘上,从而释放物理内存供其他进程使用。当系统的物理内存不足时,Swap 分区可以提供额外的可用内存空间。
  2. 内存回收机制:Swap 分区可以作为一种内存回收机制。当系统内存使用达到一定阈值时,操作系统会将不活跃的内存页面移入 Swap 分区,从而提供更多的空闲物理内存给活跃进程使用。当需要访问 Swap 中的数据时,操作系统会将其移回物理内存。
  3. 支持休眠和睡眠模式:Swap 分区对于休眠(Hibernate)和睡眠(Suspend)模式的支持至关重要。当系统进入休眠或睡眠状态时,当前的内存状态将被保存到 Swap 分区中,以便在唤醒时恢复到先前的状态。
  4. 系统稳定性保护:Swap 分区可以帮助系统避免由于内存不足而导致的崩溃和系统错误。当系统的物理内存耗尽时,Linux 内核会尝试将部分内存页面移到 Swap 分区,以避免系统宕机或进程崩溃。

需要注意的是,Swap 分区并不是用于替代物理内存的解决方案。它是一种补充和扩展内存的机制,适用于处理临时的内存压力或提供休眠和睡眠模式的支持。对于性能敏感的应用程序和服务器,应当优先考虑增加物理内存来改善性能,而不是依赖过多的 Swap 分区。合理设置 Swap 分区的大小,以及根据实际需求调整其使用情况,是确保系统正常运行的重要方面。

2、cpu

(1) 查看cpu核心数
  1. 使用 lscpu 命令:

    lscpu

    这个命令将显示有关 CPU 和系统架构的详细信息,包括 CPU 核心数、线程数、套接字数等。在输出的 "CPU(s)" 行中,"Core(s) per socket" 列显示每个 CPU 套接字的核心数,"Socket(s)" 列显示 CPU 套接字的数量。

  2. 使用 nproc 命令:

    nproc

    这个命令将简单地显示当前系统中的 CPU 核心数。

  3. 使用 /proc/cpuinfo 文件:

    cat /proc/cpuinfo | grep "core id" | sort | uniq | wc -l

    这个命令将读取 /proc/cpuinfo 文件,并统计 "core id" 字段的唯一值数量,即 CPU 核心数。

这些方法将帮助你查看 CentOS 系统中的 CPU 核心数。请注意,CPU 核心数表示物理 CPU 中的核心数量,并不考虑超线程技术(如果有的话)。

(2) 查看cpu使用率
  1. 使用 top 命令:

    top

    top 命令将显示系统的实时性能信息,包括 CPU 使用率。在 top 命令的输出中,可以查看 "%Cpu(s)" 行,其中的 "%idle" 列显示 CPU 的空闲时间,而 "%us" 列显示 CPU 的用户态使用率,"%sy" 列显示 CPU 的系统态使用率,"%wa" 列显示 CPU 的等待 I/O 的使用率等。

    可以按 "1" 键查看每个 CPU 核心的详细信息。

  2. 使用 mpstat 命令:

    mpstat

    mpstat 命令用于显示多核处理器的实时统计信息,包括每个 CPU 核心的使用率。默认情况下,mpstat 命令显示所有 CPU 核心的平均使用率。

    若要显示每个 CPU 核心的详细信息,可以使用以下命令:

    mpstat -P ALL
  3. 使用 sar 命令: 首先,你需要安装并设置 sysstat 工具包。然后,可以使用 sar 命令来获取系统资源的历史统计信息,包括 CPU 使用率。以下是使用 sar 命令查看 CPU 使用率的示例:

    sar -u

    这个命令将显示 CPU 使用率的历史记录,包括用户态、系统态和空闲时间的百分比。

这些方法将帮助你查看 CentOS 系统中的 CPU 使用率。请注意,每个命令的输出可能会略有不同,具体取决于系统配置和命令的参数设置。

(3) 查看cpu使用百分比
CPU 使用率 = (总 CPU 时间 - 空闲 CPU 时间) / 总 CPU 时间 * 100

其中,总 CPU 时间是指在特定时间间隔内 CPU 的总运行时间,而空闲 CPU 时间是指在同一时间间隔内 CPU 处于空闲状态的时间。

在 Linux 系统中,可以使用以下步骤来计算 CPU 使用百分比:

  1. 获取初始的 CPU 时间和空闲 CPU 时间:

    cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}'

    这个命令将读取 /proc/stat 文件中的 CPU 统计信息,并提取总 CPU 时间和空闲 CPU 时间。

  2. 等待一段时间(例如,几秒钟)。

  3. 获取更新后的 CPU 时间和空闲 CPU 时间:

    cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}'
  4. 计算 CPU 使用率:

    • 将初始的总 CPU 时间和空闲 CPU 时间保存到变量中。
    • 计算更新后的总 CPU 时间和空闲 CPU 时间与初始值之间的差值。
    • 使用上述公式计算 CPU 使用百分比。

下面是一个示例脚本,演示如何计算 CPU 使用百分比(以 Bash 脚本为例):

#!/bin/bash

# 获取初始的 CPU 时间和空闲 CPU 时间
read cpu_total_idle cpu_idle <<< $(cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}')

# 等待一段时间
sleep 5

# 获取更新后的 CPU 时间和空闲 CPU 时间
read cpu_total_idle_new cpu_idle_new <<< $(cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}')

# 计算 CPU 使用率
cpu_total=$((cpu_total_idle_new - cpu_total_idle))
cpu_usage=$((100 - (cpu_idle_new - cpu_idle) * 100 / cpu_total))

echo "CPU 使用率: $cpu_usage%"
(5) 查看cpu温度
# 安装
yum install -y lm_sensors
# 检测传感器
sensors-detect
# 检测
sensors
(6) cpu压力测试
# 下载安装sysbench
yum install -y sysbench
# 压测
sysbench cpu --cpu-max-prime=20000 --threads=8 --time=60 run
Prime numbers limit: 20000
Initializing worker threads...
Threads started!
CPU speed:
    events per second:  1191.98
General statistics:
    total time:                          10.0008s
    total number of events:              11922
Latency (ms):
         min:                                    1.56
         avg:                                    1.68
         max:                                    4.65
         95th percentile:                        1.76
         sum:                                19985.37
Threads fairness:
    events (avg/stddev):           5961.0000/7.00
    execution time (avg/stddev):   9.9927/0.01

# 解析
Prime numbers limit: 设置的质数计算任务的限制。
Initializing worker threads: 初始化工作线程。
Threads started!: 工作线程已启动。
CPU speed: CPU 的速度,以每秒事件数为单位。
General statistics:
total time: 总共执行的时间。
total number of events: 完成的事件总数。
Latency (ms): 响应时间的统计信息。
min: 最小响应时间。
avg: 平均响应时间。
max: 最大响应时间。
95th percentile: 响应时间的第 95 百分位数。
sum: 响应时间的总和。
Threads fairness: 线程公平性的统计信息。
events (avg/stddev): 每个线程的平均事件数和标准差。
execution time (avg/stddev): 每个线程的平均执行时间和标准差。
# 结果
通过这些统计数据,你可以了解 CPU 压力测试的执行结果和性能指标。例如,CPU 的事件速度是每秒 1191.98 个事件,总共执行了 11922 个事件。在响应时间方面,最小响应时间为 1.56 毫秒,平均响应时间为 1.68 毫秒,最大响应时间为 4.65 毫秒,95% 的响应时间低于 1.76 毫秒。线程公平性方面,每个线程的平均事件数为 5961,标准差为 7.00。

3、磁盘

(1) 查看磁盘信息
  1. 使用 df 命令:

    df -h

    这个命令将显示磁盘空间使用情况,包括每个挂载点的文件系统、总容量、已用空间、可用空间和使用率。"-h" 参数将以人类可读的方式显示磁盘大小。

  2. 使用 du 命令:

    du -h /path/to/directory

    这个命令将显示指定目录的磁盘使用情况,包括目录下的所有文件和子目录的大小。"-h" 参数将以人类可读的方式显示磁盘大小。

  3. 使用 fdisk 命令:

    sudo fdisk -l

    这个命令将显示系统上的所有磁盘分区信息,包括磁盘的设备名称、分区表类型、分区大小等。

  4. 使用 parted 命令:

    sudo parted -l

    这个命令将显示更详细的磁盘信息,包括磁盘的设备名称、分区表类型、分区大小、文件系统类型等。

  5. 使用 lsblk 命令:

    lsblk

    这个命令将显示块设备信息,包括磁盘的设备名称、分区、挂载点等。

(2) 数据恢复相关

适用于磁盘数据恢复的工具:

  1. TestDisk:TestDisk 是一款跨平台的开源工具,适用于各种操作系统。它可以帮助恢复丢失的分区和修复引导问题。

  2. PhotoRec:PhotoRec 是 TestDisk 的伴侣工具,用于恢复丢失的文件。你可以通过安装 TestDisk 软件包来同时获得 PhotoRec。

  3. extundelete:extundelete 是一款专门用于恢复已删除的 ext2、ext3 和 ext4 文件系统中文件的工具。

    注意:在使用 extundelete 恢复文件之前,请确保你在恢复过程中避免在相关分区上写入新的数据,以避免进一步覆盖被删除的文件。

  4. Scalpel:Scalpel 是一款用于文件恢复的开源工具,它可以通过文件类型的特征进行文件碎片的扫描和恢复。你可以在 CentOS 上安装 Scalpel。

在使用任何磁盘数据恢复工具时,重要的是先停止写入新数据到需要恢复的磁盘或分区,以防止覆盖原始数据。此外,在进行磁盘数据恢复之前备份重要数据,并遵循工具的文档和使用说明,以获得最佳的恢复结果。

(3) 查看磁盘io
  1. 使用 iostat 命令:

    iostat -dx
    
    # 输出解析
    Device:磁盘设备的名称。
    rrqm/s:每秒合并的读取请求次数,即每秒发起的读取请求需要合并的次数。
    wrqm/s:每秒合并的写入请求次数,即每秒发起的写入请求需要合并的次数。
    r/s:每秒完成的独立读取请求次数。
    w/s:每秒完成的独立写入请求次数。
    rkB/s:每秒读取的数据量,以千字节(KB)为单位。
    wkB/s:每秒写入的数据量,以千字节(KB)为单位。
    avgrq-sz:平均请求大小,即平均每个 I/O 请求的扇区数。
    avgqu-sz:平均请求队列长度,即平均每个设备的 I/O 请求队列中的请求数。
    await:平均等待时间,即平均每个 I/O 请求从提交到完成的时间(包括排队时间)。
    r_await:平均读取等待时间,即平均每个读取请求从提交到完成的时间。
    w_await:平均写入等待时间,即平均每个写入请求从提交到完成的时间。
    svctm:平均服务时间,即平均每个 I/O 请求的服务时间(不包括排队时间)。
    %util:设备的利用率,即设备在指定时间间隔内的活动百分比。它表示设备的繁忙程度。

    这个命令将显示磁盘的平均 I/O 统计信息,包括读取速度、写入速度、I/O 请求和等待时间等。"-d" 参数用于显示磁盘设备的统计信息,"-x" 参数用于显示更详细的磁盘 I/O 统计。

  2. 使用 vmstat 命令:

    vmstat -d
    
    # 输出解析
    disk:磁盘设备的标识。
    reads:读取次数。
    total:自系统启动以来从磁盘读取的次数。
    merged:合并的读取次数。
    sectors:自系统启动以来从磁盘读取的扇区数。
    ms:自系统启动以来读取操作花费的毫秒数。
    writes:写入次数。
    total:自系统启动以来写入磁盘的次数。
    merged:合并的写入次数。
    sectors:自系统启动以来写入磁盘的扇区数。
    ms:自系统启动以来写入操作花费的毫秒数。
    cur:当前请求队列的请求数。
    sec:合并请求的次数。
    
    根据上述解释,例如对于 sda 磁盘,自系统启动以来从该磁盘读取了 6467 次,合并了 4 次读取请求,共读取了 429193 个扇区,读取操作花费了 2873 毫秒。同时,自系统启动以来对 sda 磁盘进行了 25945 次写入,合并了 1478 次写入请求,共写入了 2051264 个扇区,写入操作花费了 14634 毫秒。当前请求队列中没有正在进行的操作,合并请求的次数为 12。

    这个命令将显示磁盘的活动统计信息,包括读取和写入的次数、块数、每秒的传输速率等。

  3. 使用 sar 命令:

    sar -d
    
    # 输出解析
    08:10:01 PM:时间戳,表示统计数据的时间点。
    DEV:磁盘设备的名称。
    tps:每秒完成的传输次数,表示设备的总 I/O 操作数(读取和写入)。
    rd_sec/s:每秒读取的扇区数。
    wr_sec/s:每秒写入的扇区数。
    avgrq-sz:平均请求大小,即每个 I/O 请求的扇区数。
    avgqu-sz:平均请求队列长度,表示每个设备的 I/O 请求队列中的请求数。
    await:平均等待时间,表示每个 I/O 请求从提交到完成的时间(包括排队时间)。
    svctm:平均服务时间,表示每个 I/O 请求的服务时间(不包括排队时间)。
    %util:设备的利用率,表示设备在指定时间间隔内的活动百分比,即设备的繁忙程度。

    这个命令将显示磁盘的活动统计信息,包括读取和写入的次数、传输速率、等待时间等。sar 命令通常需要事先安装并配置 sysstat 工具。

  4. 使用 iotop 命令:

    iotop

    这个命令将显示实时的磁盘 I/O 活动,包括每个进程的 I/O 使用情况、读取和写入速度等。

这些命令可以提供有关磁盘 I/O 活动的不同方面的信息。根据你的需求和特定的场景,选择适合的命令来查看磁盘的 I/O 情况。请注意,具体命令和输出格式可能会因操作系统和工具版本而有所不同。

(4) 磁盘压测
# 安装
yum install -y fio
# 压测
fio --name=test --ioengine=sync --iodepth=32 --rw=randwrite --bs=4k --size=1G --numjobs=4 --time_based --runtime=60 --group_reporting

# 参数解析
--name=test: 测试任务的名称。
--ioengine=sync: I/O 引擎,使用同步模式。
--iodepth=32: I/O 深度,即并发的 I/O 请求数。
--rw=randwrite: 读写模式,随机写入。
--bs=4k: 块大小,每次 I/O 操作的数据块大小。
--size=1G: 测试文件的大小。
--numjobs=4: 并发任务数。
--time_based: 基于时间的运行模式。
--runtime=60: 运行时间,60 秒。
--group_reporting: 打印汇总报告。
# 结果解析
IOPS(Input/Output Operations Per Second):每秒的输入/输出操作数。反映了磁盘的处理能力,值越高表示磁盘性能越好。

Throughput:数据吞吐量,通常以 MB/s 或 GB/s 表示。表示磁盘每秒能够传输的数据量,值越高表示磁盘性能越好。

Latency:延迟时间,表示从发送一个 I/O 请求到接收到响应的时间。常见的度量单位包括毫秒(ms)或微秒(μs),值越低表示磁盘响应更快。

Bandwidth:带宽,表示单位时间内传输的数据量。通常以 MB/s 或 GB/s 表示,与吞吐量类似。

I/O Depth:I/O 深度,表示同时进行的并发 I/O 请求数。较高的 I/O 深度可以提高并发性能。

CPU Usage:CPU 使用率,表示在测试期间 CPU 的负载情况。高 CPU 使用率可能表示测试任务对 CPU 造成了较大的负载。

Error Rate:错误率,表示在测试过程中发生的错误数量。较低的错误率表示磁盘运行稳定。

数据库Mysql

1、mysql查看数据大小

怎样查询总数据量

SELECT table_schema AS `Database`,
       CONCAT(ROUND(SUM((data_length + index_length) / (1024 * 1024)), 2), ' M') AS `Total Size`
FROM information_schema.TABLES
GROUP BY table_schema;

怎样查询某个库中表的数据量

SELECT table_schema AS `Database`,
       table_name AS `Table`,
       CONCAT(ROUND((DATA_LENGTH + INDEX_LENGTH) / (1024 * 1024), 2), ' MB') AS `Size`
FROM information_schema.TABLES
WHERE table_schema = 'your_database_name';

2、mysql主从一致性检测

文档

3、mysql配置优化

内存配置优化:

innodb_buffer_pool_size:将此参数设置为适当的值,以确保InnoDB存储引擎能够缓存常用的数据和索引。建议分配给innodb_buffer_pool_size的内存大小为总内存的70-80%。
key_buffer_size:对于使用MyISAM存储引擎的表,将此参数设置为合适的值,以便缓存索引。建议分配给key_buffer_size的内存大小为总内存的10-25%。
并发连接优化:

max_connections:根据数据库的负载情况和可用的系统资源,适当调整最大连接数。确保设置的值能够满足并发连接需求,但不会过度消耗系统资源。
查询缓存优化:

query_cache_type:将此参数设置为1以启用查询缓存。但请注意,查询缓存在高并发环境下可能带来争用和性能问题,因此在特定情况下可能需要禁用查询缓存。
query_cache_size:根据查询缓存的使用情况和可用内存,适当设置查询缓存的大小。建议将查询缓存大小限制在128MB至512MB之间。
日志优化:

log_slow_queries:启用慢查询日志以记录执行时间超过设定阈值的查询语句。根据应用的需要和性能要求,设置适当的阈值。
log_queries_not_using_indexes:启用此参数可以记录未使用索引的查询语句,以帮助优化查询性能。
log_error:配置错误日志路径,用于记录MySQL的错误和警告信息。
临时表优化:

tmp_table_size:设置临时表的最大内存大小。如果常见的查询需要大量使用临时表,可以适当增加此参数的值,以减少磁盘临时表的使用。
max_heap_table_size:设置基于内存的临时表的最大大小。如果使用了大型临时表,可以适当调整此参数的值。
InnoDB存储引擎优化:

innodb_file_per_table:启用此选项可以使每个InnoDB表使用独立的表空间文件,有助于优化磁盘空间的使用和维护。
innodb_flush_log_at_trx_commit:根据应用的需要和数据安全性要求,调整此参数以控制事务日志的刷新频率。
硬件和基础设施优化:

使用更快的存储设备:考虑使用SSD或NVMe等更快的存储设备来提高磁盘I/O性能。
分布式架构:对于高负载和大规模应用,可以考虑使用MySQL主从复制、MySQL集群或MySQL分片等分布式架构,以提高可扩展性和性能。

4、mysql压力测试

MySQL提供了一个官方的基准测试工具称为MySQL Benchmark。

# 自动生成sql语句测试
mysqlslap -uroot -pQianFeng@123 --auto-generate-sql
# --only-print 来打印实际的测试过程(不会实际执行)
# 解析
Average number of seconds to run all queries:运行所有语句的平均秒数
Minimum number of seconds to run all queries:运行所有语句的最小秒数
Maximum number of seconds to run all queries:运行所有语句的最大秒数
Number of clients running queries:客户端数量
Average number of queries per client:每个客户端运行查询的平均数

--concurrency=100:指定同时有 100 个客户端连接
--number-of-queries=1000:指定总的测试查询次数(并发客户端数 * 每个客户端的查询次数),这样本样例平均每个客户端查询 10 次

# 指定并发连接的客户端和测试查询次数
mysqlslap -uroot -pQianFeng@123 --concurrency=100 --number-of-queries=10000 --auto-generate-sql

--iterations 参数可以设置迭代执行的次数,即重复的次数(相同的测试进行 N 次,求一个平均值)。该次数指的是整个步骤的重复次数,包括准备数据、测试 load、清理。

# 添加迭代次数配置
mysqlslap -uroot -pQianFeng@123 --iterations=3 --concurrency=100 --number-of-queries=10000 --auto-generate-sql

--number-int-cols=5:指定生成 5 个 int 类型的列
--number-char-cols=20:指定生成 20 个 char 类型的列

# 指定列类型
mysqlslap -uroot -pQianFeng@123 --iterations=3 --concurrency=100 --number-of-queries=10000 --auto-generate-sql --number-int-cols=5 --number-char-cols=20

--create-schema=test:指定的测试库是 test(测试完毕不会自动删除)
--query="SELECT * FROM t1;":使用自定义的测试语句

# 指定库
mysqlslap -uroot -pQianFeng@123 --concurrency=3 --number-of-queries=100 --create-schema=test --query="SELECT * FROM t1"

# 生成数据
mysqlslap -uroot -pQianFeng@123 --concurrency=3 --number-of-queries=1000000 --create-schema=test --query="INSERT INTO t1(name,age) VALUES (uuid(), RAND() * 100)"

5、mysql主从复制原理

MySQL的主从复制是一种常用的数据复制和数据同步技术,它允许将一个MySQL数据库服务器(主服务器)上的数据复制到其他一个或多个MySQL服务器(从服务器)。主从复制提供了数据冗余、读写分离、数据备份等重要功能。下面是MySQL主从复制的工作原理:

  1. 主服务器(Master):主服务器是数据源,它负责处理客户端的读写请求,并记录所有的数据变更操作(如插入、更新、删除)到二进制日志(Binary Log)中。

  2. 从服务器(Slave):从服务器是主服务器的复制目标,它从主服务器获取二进制日志文件,并将这些日志文件中的数据变更操作依次应用到自己的数据库中,从而保持与主服务器的数据一致性。

  3. 复制过程:MySQL主从复制过程分为三个关键步骤:

    a. 同步初始化(Sync Initialization):在初始阶段,从服务器与主服务器建立连接,并请求获取主服务器当前的数据快照(Snapshot)。主服务器将快照的数据以二进制日志的形式发送给从服务器,从服务器将这些数据应用到自己的数据库中。

    b. 主服务器二进制日志传输:一旦同步初始化完成,主服务器将持续记录数据变更操作到二进制日志中,并将这些日志文件以连续的方式传输给从服务器。主服务器将二进制日志文件发送给从服务器的过程中,使用的是基于TCP/IP的二进制日志传输协议。

    c. 从服务器应用日志:从服务器接收到主服务器的二进制日志文件后,将这些日志文件中的数据变更操作逐条应用到自己的数据库中,保持与主服务器的数据一致性。从服务器会在本地记录已经应用的二进制日志位置,以便在后续的复制过程中从正确的位置继续应用数据变更操作。

  4. 复制延迟和主从同步:由于网络延迟、主服务器负载等原因,从服务器的数据更新可能会有一定的延迟,即复制延迟。MySQL提供了主从同步机制,确保从服务器尽可能与主服务器保持数据的一致性。通过主从同步,从服务器会定期向主服务器发送心跳信号,主服务器会记录从服务器的复制位置,并确保从服务器在断线重连后可以继续从正确的位置进行复制。

  5. 高可用性和读写分离:通过配置多个从服务器,可以实现MySQL的高可用性和读写分离。当主服务器故障时,可以将其中一个从服务器提升为新的主服务器,确保系统的可用性。同时,通过将读操作分发到从服务器,可以减轻主服务器的负载,提高系统的性能和吞吐量。

总结起来,MySQL的主从复制通过将主服务器上的数据变更操作记录到二进制日志中,并将这些日志文件传输给从服务器,实现了数据的复制和同步。主从复制提供了数据冗余、读写分离、高可用性等重要功能,是MySQL中常用的数据复制和数据同步技术。

6、mysql主从延迟如何解决

查看MySQL主从复制的延迟情况,可以采取以下方法:

  1. 使用命令查看延迟:在从服务器上使用MySQL命令 SHOW SLAVE STATUS\G 可以查看主从复制的状态信息。在输出结果中,可以查看到 Seconds_Behind_Master 字段,该字段表示从服务器当前与主服务器之间的复制延迟时间(以秒为单位)。如果该值为0,则表示没有延迟;如果该值大于0,则表示存在延迟。
  2. 使用工具监控延迟:可以使用一些第三方的MySQL监控工具,如Percona Toolkit、pt-heartbeat等,来监控主从复制的延迟情况。这些工具可以提供更详细的延迟信息和统计数据,并支持设置告警机制,以便及时发现和解决延迟问题。

要解决MySQL主从复制的延迟问题,可以考虑以下几个方面:

  1. 网络优化:延迟问题可能与网络带宽和延迟有关。确保主从服务器之间的网络连接稳定,并优化网络带宽,可以减少复制延迟。
  2. 优化复制线程:MySQL主从复制中有一个I/O线程负责读取主服务器的二进制日志,另一个SQL线程负责应用日志到从服务器。优化这些复制线程的性能参数和配置,如增加线程数、调整缓冲区大小等,可以提高复制的效率。
  3. 减少主服务器的负载:如果主服务器的负载较高,可能会导致复制延迟。考虑优化主服务器的性能和负载,如调整查询优化、增加硬件资源等,以减轻主服务器的负载,提高复制性能。
  4. 优化从服务器的配置:从服务器的性能和配置也会影响复制延迟。确保从服务器具备足够的资源,如CPU、内存、磁盘等,并根据实际情况进行适当的配置优化,以提高复制性能。
  5. 监控和调优:定期监控主从复制的延迟情况,并分析延迟发生的原因。根据监控结果进行调优,如调整复制参数、优化查询语句、增加硬件资源等,以缩小复制延迟。

7、主从切换操作

  1. 选取新的主服务器:在进行主从切换之前,需要选择一个新的主服务器。这可以是当前的从服务器或者是另一个备用服务器。确保选取的服务器具备足够的资源和性能来承担新的主服务器的角色。
  2. 停止主服务器的写操作:在进行主从切换之前,需要停止当前的主服务器上的写操作,以确保在切换过程中不会有新的数据变更操作。可以使用MySQL命令 FLUSH TABLES WITH READ LOCK 来锁定所有表,阻止写操作。
  3. 确认主从复制的同步状态:在主服务器停止写操作之后,需要确认主从复制的同步状态。使用MySQL命令 SHOW SLAVE STATUS\G 检查从服务器的 Seconds_Behind_Master 字段是否为0,确认数据已经与主服务器同步。
  4. 修改从服务器的配置:将之前的从服务器配置为新的主服务器。需要修改从服务器的配置文件(如my.cnf)中的 server-id 参数为一个新的唯一值,并确保其他相关的复制参数配置正确。
  5. 启动新的主服务器:启动新的主服务器,并确保数据库服务正常运行。在确认新的主服务器正常运行后,可以继续进行后续的步骤。
  6. 配置其他从服务器:对于之前的主服务器,现在需要将其配置为从服务器,并指向新的主服务器。需要修改其配置文件中的 server-id 参数和主服务器的连接信息。
  7. 开放写操作:在新的主服务器和其他从服务器都正常配置后,可以解除之前停止的写操作。在新的主服务器上使用MySQL命令 UNLOCK TABLES 解锁所有表,允许写操作继续。
  8. 检查主从复制状态:在主从切换完成后,使用MySQL命令 SHOW SLAVE STATUS\G 再次检查主从复制的状态,确保复制正常运行并且没有延迟。