找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1009

积分

0

好友

131

主题
发表于 3 天前 | 查看: 7| 回复: 0

部署概述

本文档旨在提供一份基于Anolis OS 8.6(龙蜥OS)操作系统的MySQL 8.4.7数据库生产级部署指南。内容涵盖使用官方二进制压缩包进行安装、针对高性能硬件(16核CPU, 64GB内存, SSD磁盘)的深度参数调优,以及配置基于GTID的异步主从复制架构。所有步骤与配置均遵循稳定性、安全性与性能最佳实践。

环境介绍

  • 操作系统: Anolis OS 8.6 x86_64
  • CPU: 16 核
  • 内存: 64 GB
  • 硬盘: 1 TB SSD

环境准备

在安装MySQL之前,需要对操作系统进行一系列基础配置与优化,为数据库运行提供稳固的环境。

  1. 系统内核参数调整
    编辑 /etc/sysctl.conf 文件,添加或修改以下内核参数,以优化网络、内存及文件系统性能。

    # 编辑系统参数配置文件
    vi /etc/sysctl.conf
    
    # 添加或修改如下内容:
    # 网络核心参数
    net.core.somaxconn = 65535
    net.core.netdev_max_backlog = 65535
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    
    # 网络TCP参数
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_max_syn_backlog = 65535
    net.ipv4.tcp_keepalive_time = 600
    
    # 内存与虚拟内存
    vm.swappiness = 1
    vm.dirty_ratio = 60
    vm.dirty_background_ratio = 5
    
    # 文件系统与Inode
    fs.file-max = 655350
    fs.aio-max-nr = 1048576

    执行 sysctl -p 使配置生效。

  2. 用户资源限制调整
    编辑 /etc/security/limits.conf 文件,提高未来MySQL服务用户的可用的进程数和文件打开数限制。

    vi /etc/security/limits.conf
    
    # 在文件末尾添加:
    mysql soft nproc 65535
    mysql hard nproc 65535
    mysql soft nofile 65535
    mysql hard nofile 65535
  3. 创建用户与目录
    为MySQL服务创建专用的系统用户、组,并规划好数据目录,设置严格的权限控制。

    # 创建mysql用户组和用户(无登录权限)
    groupadd mysql
    useradd -r -g mysql -s /bin/false mysql
    
    # 创建MySQL基础目录和数据目录
    mkdir -p /usr/local/mysql
    mkdir -p /data/mysql/{data,logs,binlogs,tmp,run}
    
    # 更改目录所有者
    chown -R mysql:mysql /usr/local/mysql
    chown -R mysql:mysql /data/mysql
  4. 磁盘I/O调度策略优化(针对SSD)
    对于SSD磁盘,建议将I/O调度策略设置为 deadlinenone(对应多队列的blk-mq)。

    # 查看当前磁盘调度策略,假设数据盘为 /dev/nvme0n1
    cat /sys/block/nvme0n1/queue/scheduler
    
    # 临时修改调度策略(重启失效)
    echo deadline | sudo tee /sys/block/nvme0n1/queue/scheduler
    
    # 如需永久生效,可将上述命令写入 /etc/rc.local 或对应的系统启动脚本

二进制安装部署

  1. 下载与解压
    从MySQL官方网站下载适用于Linux的二进制压缩包(例如 mysql-8.4.7-linux-glibc2.17-x86_64.tar.xz),并解压到预定的安装目录。

    # 切换到安装包所在目录(例如 /tmp)
    cd /tmp
    
    # 解压并移动到目标目录
    tar -xvf mysql-8.4.7-linux-glibc2.17-x86_64.tar.xz -C /usr/local/mysql
  2. 设置环境变量
    为方便使用MySQL命令行工具,将其路径加入系统环境变量。

    # 创建环境变量脚本
    vi /etc/profile.d/mysql.sh
    
    # 添加以下内容:
    export MYSQL_HOME=/usr/local/mysql
    export PATH=$MYSQL_HOME/bin:$PATH
    
    # 使环境变量立即生效
    source /etc/profile.d/mysql.sh
  3. MySQL参数配置文件
    根据64GB内存和SSD磁盘的特性,精心调优的my.cnf是数据库高性能与稳定运行的核心。以下为主库的配置示例(从库需修改server_id)。
    主库配置文件 /etc/my.cnf

    [client]
    port = 3306
    socket = /data/mysql/run/mysql.sock
    
    [mysql]
    prompt="\\u@\\h : \\d \\r:\\m:\\s> "
    default_character_set = utf8mb4
    no_auto_rehash
    
    [mysqld]
    # === 基础路径与标识 ===
    port = 3306
    basedir = /usr/local/mysql
    datadir = /data/mysql/data
    socket = /data/mysql/run/mysql.sock
    pid_file = /data/mysql/run/mysql.pid
    tmpdir = /data/mysql/tmp
    
    # === 服务器标识(主从必须不同)===
    server_id = 101
    report_host = master_ip_or_hostname # 请替换为主库实际IP或主机名
    
    # === 字符集与语言设置 ===
    character_set_server = utf8mb4
    collation_server = utf8mb4_general_ci
    lower_case_table_names = 1
    
    # === 内存配置(64G内存优化)===
    # InnoDB缓冲池,约占物理内存的50%
    innodb_buffer_pool_size = 32G
    # 缓冲池实例数
    innodb_buffer_pool_instances = 8
    # 其他内存缓冲区
    key_buffer_size = 64M
    innodb_log_buffer_size = 256M
    sort_buffer_size = 4M
    read_buffer_size = 1M
    read_rnd_buffer_size = 4M
    join_buffer_size = 4M
    thread_stack = 512K
    binlog_cache_size = 2M
    
    # === 连接与线程 ===
    max_connections = 2000
    max_connect_errors = 1000000
    thread_cache_size = 64
    table_open_cache = 4096
    table_definition_cache = 2048
    
    # === InnoDB引擎核心优化(针对SSD)===
    # 事务日志刷盘策略
    innodb_flush_log_at_trx_commit = 1
    # redo日志文件总容量
    innodb_redo_log_capacity = 6G
    # IO线程数
    innodb_read_io_threads = 8
    innodb_write_io_threads = 8
    # 刷盘方式,Linux下建议O_DIRECT
    innodb_flush_method = O_DIRECT
    # 独立表空间
    innodb_file_per_table = 1
    # 打开文件数限制
    innodb_open_files = 65535
    
    # === 二进制日志与复制(启用GTID模式)===
    log_bin = /data/mysql/binlogs/mysql-bin
    binlog_format = ROW
    relay_log = /data/mysql/binlogs/relay-log
    relay_log_index = /data/mysql/binlogs/relay-log.index
    # GTID相关
    gtid_mode = ON
    enforce_gtid_consistency = ON
    log_replica_updates = ON
    # 二进制日志保留7天
    binlog_expire_logs_seconds = 604800
    max_binlog_size = 1G
    sync_binlog = 1
    
    # === 其他重要参数 ===
    # 跳过域名解析
    skip_name_resolve = 1
    # 错误日志路径
    log_error = /data/mysql/logs/error.log
    # 慢查询日志
    slow_query_log = 1
    long_query_time = 1
    slow_query_log_file = /data/mysql/logs/slow.log
    # 最大数据包
    max_allowed_packet = 1G
    # 连接超时
    interactive_timeout = 10800
    wait_timeout = 10800

    从库配置差异
    从库的my.cnf文件绝大部分与主库相同,只需确保以下参数唯一或按需调整:

    [mysqld]
    # 服务器标识必须唯一
    server_id = 102
    report_host = slave_ip_or_hostname # 请替换为从库实际IP或主机名
    
    # 从库可选项:开启以下参数可增强只读安全性
    # read_only = 1
    # super_read_only = 1 (如果希望超级用户也只读)
  4. 初始化数据库与启动服务
    4.1 初始化数据目录
    使用--initialize选项进行初始化,此过程会为root@localhost用户生成一个临时密码。

    sudo -u mysql /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql

    重要:初始化完成后,务必在错误日志中查找并记录生成的临时密码。

    grep 'temporary password' /data/mysql/logs/error.log

    4.2 配置启动与关闭脚本
    为方便管理,可以创建简单的启动和关闭脚本。

    # 创建启动脚本
    cd /data/mysql
    vi startMySQL.sh
    # 内容如下:
    /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
    
    # 创建关闭脚本
    vi stopMySQL.sh
    # 内容如下(需使用正确的root密码):
    /usr/local/mysql/bin/mysqladmin -uroot -p'your_password' -S /data/mysql/run/mysql.sock shutdown
    
    # 赋予执行权限
    chmod +x /data/mysql/startMySQL.sh
    chmod +x /data/mysql/stopMySQL.sh

    启动MySQL服务:

    /data/mysql/startMySQL.sh

    4.3 修改root密码并初始化权限
    使用临时密码登录,并立即修改为强密码。

    mysql -uroot -p -S /data/mysql/run/mysql.sock

    在MySQL提示符下执行:

    -- 输入临时密码登录后,立即修改密码
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'Your_New_Strong_Password_123!';
    -- 刷新权限
    FLUSH PRIVILEGES;
  5. 配置基于GTID的主从复制
    5.1 主库操作
    在主库上创建一个用于复制的专用用户。

    -- 创建复制用户
    CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password_123!';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%';
    -- 刷新权限
    FLUSH PRIVILEGES;

    5.2 从库操作
    在从库上配置主库连接信息并启动复制进程。GTID模式简化了主从复制的配置与管理

    -- 配置主库连接信息(使用CHANGE REPLICATION SOURCE TO语法,MySQL 8.0+)
    CHANGE REPLICATION SOURCE TO
    SOURCE_HOST='master_ip',  -- 替换为主库IP地址
    SOURCE_PORT=3306,
    SOURCE_USER='repl',
    SOURCE_PASSWORD='repl_password_123!',
    SOURCE_AUTO_POSITION=1, -- 启用基于GTID的自动定位
    GET_SOURCE_PUBLIC_KEY=1; -- MySQL 8.0 caching_sha2_password认证需要
    
    -- 启动复制
    START REPLICA;
    
    -- 检查复制状态
    SHOW REPLICA STATUS\G

    需要关注的状态信息:

    • Slave_IO_Running: Yes
    • Slave_SQL_Running: Yes
    • Seconds_Behind_Master: 0 (或一个很小的值)
    • Retrieved_Gtid_SetExecuted_Gtid_Set 应正常显示并同步增长。

总结

本文档提供了一套完整的、针对生产环境的MySQL 8.4.7二进制安装与部署方案,特别是详细阐述了基于GTID的主从复制配置。所有核心参数均基于16核CPU、64GB内存及SSD存储的硬件配置进行了深度优化。这套数据库部署方案为构建高可用、高性能的数据服务层奠定了坚实基础。在实际应用时,仍需结合具体业务负载特征进行监控与微调,并严格执行备份、监控和告警等运维策略。




上一篇:RTOS与Linux核心差异解析:嵌入式开发选型指南
下一篇:MySQL大数据表高效清空:TRUNCATE与DELETE性能深度对比
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-17 19:40 , Processed in 0.108989 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表