MySQL 安装部署(源码/二进制)

本篇覆盖 MySQL 5.5 之前的 ./configure 源码安装、MySQL 5.6 的 cmake 源码编译安装、MySQL 5.7 二进制包(glibc 版)部署、初始化、启动配置、密码修改、服务管理以及 my.cnf 常用参数参考。


一、概述

源码版安装过程较复杂,技术要求高,但可以按需定制功能,生产环境如有特殊功能需求应尽量使用源码版。

MySQL 5.5 是编译方式的分界点:

版本 编译工具
5.5 之前 ./configure + make
5.5 及之后 cmake + make

二、MySQL 5.5 之前源码安装(了解)

2.1 编译准备

# 中文系统
yum groupinstall "开发工具" "开发库"

# 英文系统
yum groupinstall "Development tools" -y

# 编译工具与依赖
yum install gcc gcc-c++ ncurses-devel perl

查看 CPU 信息(影响编译速度):

cat /proc/cpuinfo

2.2 常用 configure 参数

可先导出参数帮助:

./configure --help > /root/Desktop/mysqlconfigure.help
参数 说明
--prefix 安装家目录
--enable-assembler 使用字符函数的汇编版本
--enable-profiling 构建带剖析(profiling)代码的版本
--enable-local-infile 允许外部表格数据导入数据库
--with-charset 默认字符集(MySQL 支持约 30 多种)
--with-collation 默认字符校验规则(约 80 多种)
--with-extra-charsets 扩展字符集
--with-server-suffix 数据库版本后缀
--with-pthread 线程库
--with-unix-socket-path socket 文件路径
--with-tcp-port 服务端口
--with-mysqld-user 运行 mysqld 的系统用户
--with-libwrap 支持 TCP Wrapper
--without-debug 关闭 debug 信息,提升性能
--with-mysqld-ldflags / --with-client-ldflags 静态编译可提升 5%~10% 性能
--with-low-memory 低内存支持
--with-mysqlmanager 启用 MySQL 多实例管理器
--with-big-tables 支持大表

存储引擎相关参数:

--with-example-storage-engine
--with-archive-storage-engine
--with-csv-storage-engine
--with-blackhole-storage-engine
--with-ndbcluster
--with-federated-storage-engine

5.1 之后存储引擎改为插件式,使用 --with-plugins 指定要编译进去的引擎。

2.3 解压、配置、编译、安装

tar xf mysql/mysql-5.1.72.tar.gz -C /usr/src
cd /usr/src/mysql-5.1.72/

./configure --prefix=/usr/local/mysql \
  --enable-assembler --enable-profiling --enable-local-infile \
  --with-charset=gbk --with-extra-charsets=utf8,gb2312 \
  --with-pthread \
  --with-mysqld-ldflags=-all-static \
  --with-client-ldflags=-all-static \
  --with-low-memory --with-big-tables \
  --with-plugins=myisam,innobase,ndbcluster \
  --with-mysqlmanager

make
make install

编译完成后安装目录结构:

bin    lib      mysql-test  sql-bench
docs   include  libexec     share

2.4 安装后配置

第一步:编写配置文件

mkdir /usr/local/mysql/etc
vim /usr/local/mysql/etc/my.cnf
[mysqld]
port=3307
datadir=/data/mysql51
socket=/data/mysql51/mysql51.socket
pid-file=/var/run/mysqld/mysql51.pid

log=/var/log/mysqld/mysql51.log
log-error=/var/log/mysqld/mysqld51.log

[client]
socket=/data/mysql51/mysql5.socket

第二步:创建目录并授权

mkdir /data/mysql51 /var/run/mysqld/ /var/log/mysqld
chown -R mysql.mysql /data/mysql51 /var/log/mysqld /var/run/mysqld/ /usr/local/mysql/

第三步:配置服务脚本

cp /usr/src/mysql-5.1.72/support-files/mysql.server /etc/init.d/mysql51
vim /etc/init.d/mysql51

修改以下两行:

47  datadir=/data/mysql51
218 conf=/usr/local/mysql/etc/my.cnf
chmod 755 /etc/init.d/mysql51

第四步:初始化数据库

/usr/local/mysql/bin/mysql_install_db \
  --datadir=/data/mysql51/ \
  --user=mysql

若本机已安装 RPM 版 MySQL,则不要执行 mysql_secure_installation;未安装时再执行。

第五步:启动并登录

/etc/init.d/mysql51 start

# 没有服务脚本时可用 mysqld_safe 启动
/usr/local/mysql/bin/mysqld_safe \
  --defaults-file=/usr/local/mysql/etc/my.cnf &

/usr/local/mysql/bin/mysql

2.5 socket 相关报错

若登录时报:

ERROR 2002 (HY000): Can't connect to local MySQL server through
socket '/tmp/mysql.sock' (111)

原因是编译时未指定 --with-unix-socket-path,客户端默认查找 /tmp/mysql.sock。可临时指定:

/usr/local/mysql/bin/mysql --socket=/data/mysql51/mysql5.socket

要免去每次指定,需在 my.cnf 中加入:

[client]
socket=/data/mysql51/mysql5.socket

为简化登录命令:

cp /usr/local/mysql/bin/mysql /bin/mysql5

2.6 关闭数据库

建议使用自带管理命令,不推荐直接用服务脚本:

/usr/local/mysql/bin/mysqladmin shutdown -p

三、MySQL 5.6 源码编译安装

3.1 编译前三切记

  1. 一定要安装软件依赖;
  2. 一定要学会看报错信息;
  3. 一定要学会自己查资料(官方文档、搜索引擎等)。

3.2 准备依赖

yum groupinstall "开发工具" "开发库"
yum groupinstall "Development tools" -y
yum install gcc gcc-c++ ncurses-devel perl cmake -y

下载源码包:

wget http://192.168.2.254/mysql/pack/mysql-5.6.41.tar.gz

3.3 cmake 常用参数

可通过以下命令查看支持的参数:

cmake . -LH
参数 说明
CMAKE_INSTALL_PREFIX MySQL 程序安装目录,默认 /usr/local/mysql
DEFAULT_CHARSET 服务器默认字符集,默认 latin1
DEFAULT_COLLATION 默认校对规则,默认 latin1_general_ci
ENABLED_LOCAL_INFILE 是否允许 LOAD DATA INFILE,默认 OFF
WITH_COMMENT 编译备注信息
WITH_xxx_STORAGE_ENGINE 静态编译进服务器的存储引擎;MyISAM、MERGE、MEMORY、CSV 默认已编译
WITHOUT_xxx_STORAGE_ENGINE 不编译的存储引擎
SYSCONFDIR 初始化参数文件目录
MYSQL_DATADIR 数据文件目录
MYSQL_TCP_PORT 服务端口,默认 3306
MYSQL_UNIX_ADDR socket 文件路径,默认 /tmp/mysql.sock

3.4 编译安装

tar xf mysql-5.6.26.tar.gz -C /usr/src/
cd /usr/src/mysql-5.6.26/

cmake . \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql56 \
  -DDEFAULT_CHARSET=utf8 \
  -DDEFAULT_COLLATION=utf8_general_ci \
  -DWITH_EXTRA_CHARSETS=gbk,gb2312 \
  -DENABLED_LOCAL_INFILE=1 \
  -DWITH_INNOBASE_STORAGE_ENGINE=1

make && make install

3.5 安装后配置

第一步:编写 my.cnf

mkdir /usr/local/mysql56/etc
vim /usr/local/mysql56/etc/my.cnf
[mysqld]
port=3307
user=mysql
datadir=/data/mysql56
log-error=/var/log/mysqld/mysql56-err.log

[mysqld_safe]
pid-file=/var/run/mysqld/mysql56.pid
socket=/data/mysql56/mysql56.socket

[client]
socket=/data/mysql56/mysql56.socket

第二步:创建目录并授权

mkdir /data/mysql56 /var/run/mysqld /var/log/mysqld
chown -R mysql.mysql /data/mysql56 /var/run/mysqld /var/log/mysqld /usr/local/mysql56/

第三步:初始化数据库

/usr/local/mysql56/scripts/mysql_install_db \
  --user=mysql \
  --basedir=/usr/local/mysql56 \
  --datadir=/data/mysql56

第四步:启动服务

/usr/local/mysql56/bin/mysqld \
  --user=mysql \
  --basedir=/usr/local/mysql56 \
  --datadir=/data/mysql56 \
  --defaults-file=/usr/local/mysql56/etc/my.cnf &

/usr/local/mysql56/bin/mysql

简化登录命令:

cp /usr/local/mysql56/bin/mysql /usr/bin/mysql56

配置环境变量(多版本共存时不推荐):

export PATH=$PATH:/usr/local/mysql56/bin

# 写入 /etc/profile 末尾持久化
vim /etc/profile
# export PATH=$PATH:/usr/local/mysql56/bin

第五步:配置系统服务(可选)

cp /usr/local/mysql56/support-files/mysql.server /etc/init.d/mysql56
vim /etc/init.d/mysql56

修改为实际路径:

basedir=/usr/local/mysql56
datadir=/data/mysql56
conf=/usr/local/mysql56/etc/my.cnf
/etc/init.d/mysql56 start
chkconfig --add mysql56
chkconfig mysql56 on

至此源码版 MySQL 安装完成。

3.6 启动故障排查

熟悉以上五步,常见问题一般是:权限问题、参数写错、磁盘空间满。

排查手段:

  1. 重新初始化数据库;
  2. 查看是否有卡死进程;
  3. 使用以下命令检查配置文件,无报错即 OK,并会打印所有参数及值:
/usr/local/mysql/libexec/mysqld --verbose --help

多版本 MySQL 共存可能导致配置文件查找混乱,参数不生效甚至服务无法启动,需特别注意。


四、MySQL 5.7 二进制包安装

4.1 下载并解压

wget -P /root/ \
  https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

# 或从内网拷贝
scp 192.168.2.254:/www/mysql/pack/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz /root/

tar xf /root/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /usr/local
cd /usr/local

注意:二进制版安装目录重命名时必须命名为 mysql,否则会报错。

mv mysql-5.7.23-linux-glibc2.12-x86_64 /usr/local/mysql

4.2 编写配置文件

cd /usr/local/mysql
mkdir etc
vim etc/my.cnf
[mysqld]
user=mysql
port=3308
basedir=/usr/local/mysql
datadir=/data
log-error=/var/log/mysqld/mysql57-err.log
socket=/data/mysql57.sock
pid-file=/data/mysql57.pid

[mysqld_safe]
log-error=/var/log/mysqld/mysql57-err.log
pid-file=/data/mysql57.pid

[client]
socket=/data/mysql57.sock

4.3 创建目录与用户

mkdir -p /data /var/log/mysqld

# 未安装 mariadb 时系统不存在 mysql 用户,需手动创建
useradd -s /usr/sbin/nologin mysql

chown -R mysql.mysql /data /var/log/mysqld

4.4 初始化数据库

/usr/local/mysql/bin/mysqld --initialize \
  --user=mysql \
  --basedir=/usr/local/mysql \
  --datadir=/data

初始化使用的目录必须与配置文件一致。

初始化成功后,数据目录内应有:

auto.cnf  ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1
mysql  performance_schema  sys

4.5 初始密码

初始密码存放在错误日志中:

cat /var/log/mysqld/mysql57-err.log | grep password

4.6 配置启动脚本

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/data
conf=$basedir/etc/my.cnf

启动:

/etc/init.d/mysqld start

验证端口:

lsof -i:3308

4.7 登录与密码修改

/usr/local/mysql/bin/mysql -p

加入环境变量简化命令:

export PATH=$PATH:/usr/local/mysql/bin
vim /etc/profile
# export PATH=$PATH:/usr/local/mysql/bin

修改初始密码:

/usr/local/mysql/bin/mysqladmin -uroot -p password "123"

五、my.cnf 参数参考大全

以下是 MySQL 5.7 常用配置参考。

5.1 基础设置

[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
################################ 基础设置 ################################
# MySQL 服务唯一编号,主从复制中每个实例必须唯一
server-id = 1

# 服务端口,默认 3306
port = 3306

# 安装根目录
basedir = /opt/mysql

# 数据文件目录
datadir = /opt/mysql/data

# 临时目录,load data infile 会用到
tmpdir = /tmp

# socket 文件目录
socket = /tmp/mysql.sock

# 主要用于 MyISAM,多台服务器连接同一库时建议注释
skip-external-locking

# 只通过 IP 检查客户端登录,不使用主机名
skip_name_resolve = 1

# 事务隔离级别,默认可重复读(RC 可减少间隙锁)
transaction_isolation = READ-COMMITTED

# 默认字符集,utf8mb4 支持 emoji 等 4 字节字符
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

# 客户端连接时设置字符集,防止乱码
init_connect = 'SET NAMES utf8mb4'

# SQL 是否大小写敏感,1 表示不敏感
lower_case_table_names = 1

# 最大连接数与最大错误连接数
max_connections = 400
max_connect_errors = 1000

# TIMESTAMP 未显式声明 NOT NULL 时允许 NULL
explicit_defaults_for_timestamp = true

# SQL 数据包大小,含 BLOB 时建议调大
max_allowed_packet = 128M

# 连接闲置超时(秒),interactive_timeout 需同时配置才生效
interactive_timeout = 1800
wait_timeout = 1800

# 内部内存临时表最大值,超过将写入磁盘
tmp_table_size = 134217728
max_heap_table_size = 134217728

# 查询缓存,多数情况下关闭
query_cache_size = 0
query_cache_type = 0

#------------------------ 用户进程内存设置 BEGIN ------------------------#
# 顺序扫描读缓冲,一般 128k~256k,用于 MyISAM
# read_buffer_size = 131072
# 随机读缓冲,按非索引字段排序时使用
# read_rnd_buffer_size = 262144
# order by / group by 缓冲,建议先设 2M
sort_buffer_size = 2097152
# 大事务不多时设为 1~2M,默认 32k
binlog_cache_size = 524288
#------------------------ 用户进程内存设置 END   ------------------------#

# 短时间内可存入堆栈的请求数
# 官方建议 back_log = 50 + (max_connections/5),封顶 900
back_log = 130

5.2 日志设置

################################ 日志设置 ################################
# 错误日志
log_error = error.log

# 慢查询日志
slow_query_log = 1
slow_query_log_file = slow.log
# 记录未使用索引的 SQL
log_queries_not_using_indexes = 1
# 每分钟记录未使用索引 SQL 的条数上限
log_throttle_queries_not_using_indexes = 5
# 从库复制中的慢 SQL 也记录
log_slow_slave_statements = 1
# 慢查询阈值(秒)
long_query_time = 8
# 检索行数达到此值才可被记为慢查询
min_examined_row_limit = 100

# binlog 过期天数
expire_logs_days = 5

5.3 主从复制设置

################################ 主从复制设置 #############################
# 开启 binlog
log-bin = mysql-bin
# ROW 模式记录每行变更
binlog_format = ROW
# 只记录受影响的列
binlog_row_image = minimal

# master info / relay log info 存放于表
master_info_repository = TABLE
relay_log_info_repository = TABLE

# 级联复制时从库也记录 binlog
log_slave_updates

# 中继日志自我修复
relay_log_recovery = 1

# 主从复制时忽略的错误
slave_skip_errors = ddl_exist_errors

#---------------- redo log 与 binlog 关系 BEGIN ----------------#
# 提交流程:
# 1) prepare DML,将 redo log buffer 持久化到磁盘
# 2) prepare 成功后将事务日志持久化到 binlog
# 3) 成功后在 redo log 写入 commit 记录
#
# innodb_flush_log_at_trx_commit 与 sync_binlog 都为 1 最安全,但 IO 最频繁、最慢。
#   =0:mysqld 进程崩溃可能丢失上一秒所有事务
#   =2:仅操作系统崩溃或掉电才可能丢失上一秒事务
innodb_flush_log_at_trx_commit = 2
sync_binlog = 1
#---------------- redo log 与 binlog 关系 END   ----------------#

5.4 InnoDB 设置

################################ InnoDB 设置 ##############################
# 数据页大小,默认 16k;8k 对 SELECT 吞吐更大
# innodb_page_size = 8192

# buffer pool 一般设为物理内存的 60%~70%
innodb_buffer_pool_size = 1G

# 5.7.6 之后默认 16M
# innodb_log_buffer_size = 16777216

# O_DIRECT 减少 OS VFS 缓存与 InnoDB buffer 的双重缓存
innodb_flush_method = O_DIRECT

# 支持压缩的文件格式,5.7.7 后默认
innodb_file_format = Barracuda

# 多核 IO 线程,读多写少可设为 2:6 比例
innodb_write_io_threads = 4
innodb_read_io_threads = 4

# 刷新脏页数量,根据近期 IOPS 调整
innodb_io_capacity = 500

# 锁等待超时(秒),超过报错:
# ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
innodb_lock_wait_timeout = 30

# buffer pool 转储时最近使用页的百分比
innodb_buffer_pool_dump_pct = 40

# redo log 目录与文件数量
innodb_log_group_home_dir = /opt/mysql/redolog/
innodb_log_files_in_group = 3

# 官方建议尽量大;单文件 <=256GB,总大小 <=512GB
innodb_log_file_size = 1024M

# undo log 目录与回收
innodb_undo_directory = /opt/mysql/undolog/
innodb_undo_log_truncate = 1
innodb_undo_tablespaces = 3
innodb_undo_logs = 128

# 5.7.7 默认开启,单列索引最大可达 3072 字节
# innodb_large_prefix = 1
# 5.7.8 默认 4,后台 purge 线程数
# innodb_purge_threads = 4

# 并发线程限制,官方建议:
#   并发 < 64:设 0
#   负载较高:先设 128,再逐步降低到最佳值
# innodb_thread_concurrency = 0

# 将所有死锁记录到 error.log
innodb_print_all_deadlocks = 1

5.5 其他工具段

################################ 其他设置 ################################
[mysqldump]
quick
max_allowed_packet = 128M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 256k
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
# 每个进程可打开的文件数
open-files-limit = 28192

六、安装与启动小结

版本/方式 编译/部署工具 初始化命令 启动方式
5.1 源码 ./configure + make mysql_install_db mysql.server / mysqld_safe
5.6 源码 cmake + make scripts/mysql_install_db mysqld / mysql.server
5.7 二进制 解压即用 mysqld --initialize support-files/mysql.server

启动失败排查顺序:权限 → 配置参数 → 磁盘空间 → 残留进程 → 错误日志。

最后修改:2026 年 09 月 20 日
如果觉得我的文章对你有用,请随意赞赏