MySQL 8.4.9 部署

📅 2026/6/26 6:55:54
MySQL 8.4.9 部署
一、下载下载地址https://dev.mysql.com/downloads/mysql/# 查看服务器 glibc# 结果 2.17如 CentOS 7→ 下 glibc2.17 包# 结果 ≥2.28如 CentOS 8/9、Ubuntu 20.04→ 下 glibc2.28 包ldd--version二、部署2.1 卸载mariadbMariaDB 和 MySQL 默认都使用 3306 端口如果同时运行会报错等原因。# 卸载yum remove-ymariadb mariadb-server mariadb-libs# 检查是否还有未删除的包rpm-qa|grepmariadb# 清理 yum 的缓存yum clean all2.2 安装依赖包yuminstall-ylibaio libaio-devel numactl numactl-libs libncurses* openssl openssl-libs libtirpc-devel2.3 解压cd/opt/mysql# 解压tar-Jxvfmysql-8.4.9-linux-glibc2.17-x86_64.tar.xz-C/usr/local# 改名mv/usr/local/mysql-8.4.9-linux-glibc2.17-x86_64 /usr/local/mysql2.4 创建用户和组# 创建用户组sudogroupaddmysql# 创建系统用户创建禁止登录系统的专用 mysql 用户并归属到 mysql 用户组# -r创建系统用户-g指定归属用户组-s /bin/nologin禁止登录保证安全sudouseradd-r-gmysql-s/bin/nologin mysql# 创建 MySQL 数据存储目录sudomkdir-p/usr/local/mysql/data# 创建 MySQL 日志目录sudomkdir-p/usr/local/mysql/logs# 创建 MySQL 运行时目录sudomkdir-p/usr/local/mysql/run# 授权sudochown-Rmysql:mysql /usr/local/mysql2.5 配置环境变量echoexport PATH/usr/local/mysql/bin:$PATH/etc/profilesource/etc/profile# 验证输出版本信息即配置成功mysql--version2.6 创建配置文件vi/etc/my.cnf[mysqld]# 基础路径配置 # MySQL程序根目录basedir/usr/local/mysql# 数据库数据文件存储目录datadir/usr/local/mysql/data# 本地连接套接字文件仅本机客户端使用socket/usr/local/mysql/run/mysqld.sock# 进程PID文件记录mysqld进程号用于服务启停、进程校验pid-file/usr/local/mysql/run/mysqld.pid# 错误日志文件路径log-error/usr/local/mysql/logs/error.log# 服务监听端口port3306# MySQL 运行用户usermysql# 服务端字符集 utf8mb4 支持emoji、完整中文替代老旧utf8character-set-serverutf8mb4# 默认排序规则collation-serverutf8mb4_unicode_ci# 网络连接相关 # 监听地址 0.0.0.0 表示监听所有网卡允许远程连接如果只允许本机访问可改为 127.0.0.1bind-address0.0.0.0# 数据库最大并发连接数生产根据业务调整max_connections1024# 非交互式连接超时时间单位秒wait_timeout86400# 交互式连接超时时间单位秒interactive_timeout86400# 最大数据包大小适配大字段、批量数据导入max_allowed_packet128M# InnoDB性能核心配置 # 默认存储引擎InnoDB支持事务、行锁、崩溃恢复default-storage-engineInnoDB# InnoDB Buffer Pool 大小最重要的内存参数之一建议占物理内存的 50%~70%# 示例# 4G 内存机器 - 1G~2G# 8G 内存机器 - 4G~5G# 16G 内存机器 - 10G~12G# 32G 内存机器 - 20G~24G# 64G 内存机器 - 40G~48Ginnodb_buffer_pool_size20G# Buffer Pool 分片数# 示例# innodb_buffer_pool_size 1G - 1# 1G innodb_buffer_pool_size 4G - 2# 4G innodb_buffer_pool_size 8G - 4# 8G innodb_buffer_pool_size 16G - 8# 16G innodb_buffer_pool_size - 8~16innodb_buffer_pool_instances10# redo总容量动态自动拆分文件测试环境建议1G 生产环境建议4G~16G高写入业务拉满16Ginnodb_redo_log_capacity4G# redo log buffer 大小测试环境建议64M生产建议256Minnodb_log_buffer_size256M# 是否每表单独建表空间生产环境推荐开启便于单表管理和回收空间innodb_file_per_table1# 事务提交时 redo log 刷盘策略# 1最安全每次提交都刷盘# 2每秒刷盘一次性能更好但可能丢 1 秒数据innodb_flush_log_at_trx_commit1# binlog 刷盘策略1每次提交都刷盘最安全sync_binlog1# 刷盘方式O_DIRECT 可减少双缓存innodb_flush_methodO_DIRECT# 事务隔离级别读提交线上主流transaction_isolationREAD-COMMITTED# InnoDB读IO线程数高并发调大innodb_read_io_threads16# InnoDB写IO线程数高并发调大innodb_write_io_threads16# MySQL8专属缓冲池热数据持久化重启快速预热innodb_buffer_pool_dump_at_shutdown1innodb_buffer_pool_load_at_startup1# 慢查询日志配置 # 开启慢查询日志排查低效SQLslow_query_log1# 慢查询阈值执行超过3秒判定为慢SQLlong_query_time3# 慢查询日志存储路径slow_query_log_file/usr/local/mysql/logs/slow.log# 记录未使用索引的查询log_queries_not_using_indexes1# 二进制日志 binlog # 开启二进制日志binlog用于主从复制、数据误删恢复生产强制开启log-bin/usr/local/mysql/logs/mysql-bin# binlog 格式ROW 模式最适合生产环境和复制binlog_formatROW# binlog自动清理时长单位秒binlog_expire_logs_seconds604800# server-id 必须唯一主库和每个从库都要不同server-id1# SQL语法模式 # 严格 SQL 模式生产环境建议开启严格模式避免脏数据# 各模式说明# STRICT_TRANS_TABLES对事务表InnoDB进行严格数据校验# NO_ZERO_DATE禁止零日期如 0000-00-00# NO_ZERO_IN_DATE禁止零月零日如 2025-00-01、2025-08-00# ERROR_FOR_DIVISION_BY_ZERO除零报错# NO_ENGINE_SUBSTITUTION指定的存储引擎不存在时直接报错不自动替换为其他存储引擎# ONLY_FULL_GROUP_BY要求 GROUP BY 必须包含所有非聚合列否则报错sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY# 表名大小写规则1表名/库名统一小写存储、查询不区分大小写推荐0严格区分大小写注意只能在初始化前设置运行后修改会启动失败lower_case_table_names1[mysql]# 本机客户端套接字文件匹配socket/usr/local/mysql/run/mysqld.sock[client]# 客户端连接端口port3306# 客户端套接字文件socket/usr/local/mysql/run/mysqld.sock# 客户端统一字符集default-character-setutf8mb42.7 初始化数据库sudo/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf--initialize--usermysql--basedir/usr/local/mysql--datadir/usr/local/mysql/data2.8 创建 systemd 服务并启动sudotee/etc/systemd/system/mysqld.service/dev/nullEOF [Unit] DescriptionMySQL Server Afternetwork.target [Service] Typesimple Usermysql Groupmysql ExecStart/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf ExecStop/bin/kill -s TERM$MAINPIDExecReload/bin/kill -s HUP$MAINPIDRestarton-failure RestartSec5 LimitNOFILE65535 LimitNPROC65535 TimeoutStartSec300 [Install] WantedBymulti-user.target EOF# 启动服务sudosystemctl daemon-reloadsudosystemctlenablemysqldsudosystemctl start mysqld2.9 查看临时密码sudogreptemporary password/usr/local/mysql/logs/error.log2.10 修改密码# 修改密码mysql-uroot-p临时密码--connect-expired-password-eALTER USER rootlocalhost IDENTIFIED BY 你的新密码;# 如果密码不对跳过认证修改# 停掉 mysqlsystemctl stop mysqld# 跳过权限启动/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf --skip-grant-tables--usermysql# 等几秒后登录mysql-uroot# 重置密码# 刷新权限必须先执行否则改密码报错FLUSH PRIVILEGES;ALTERUSERrootlocalhostIDENTIFIED BY你的新密码;FLUSH PRIVILEGES;exit;# 杀掉进程正常启动kill$(pgrep mysqld)systemctl start mysqld# 用新密码登录mysql-uroot-p2.11 开启远程访问# 登录mysqlmysql-uroot-p# 切换到mysql系统库use mysql;# 查看root账户信息# user账号名root# host允许哪个IP连接localhost仅本地、%任意远程 IP、192.168.1.%网段# plugin密码加密方式mysql_native_password → Navicat/DBeaver 正常连接、caching_sha2_password → MySQL8.0 默认旧客户端连不上selectuser,host,plugin from user whereuserroot;# 创建允许任意IP访问的root账号CREATEUSERroot%IDENTIFIED BY密码;# 赋予全部权限GRANT ALL PRIVILEGES ON *.* TOroot%WITH GRANT OPTION;# 刷新权限立即生效FLUSH PRIVILEGES;exit;2.12 注意服务器重启之后/tmp 会清空使用mysql -uroot -p登录会报错ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’# 解决方式一创建别名强制读取配置解决socket问题echoalias mysqlmysql --defaults-file/etc/mysql.cnf/etc/profilesource/etc/profile mysql-uroot-p# 解决方式二指定 sock 文件不使用系统默认 /tmp/mysql.sockmysql-uroot-p-S/usr/local/mysql/run/mysqld.sock