编译安装MySQL 5.7
预装编译环境
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
- gcc / gcc-c++:编译工具
- ncurses / ncurses-devel:字符终端交互库
- bison:语法分析器
- cmake:MySQL 编译工具
创建 MySQL 专用用户:
useradd -s /sbin/nologin mysql
源码解压与依赖
tar zxvf mysql-5.7.17.tar.gz -C /opt tar zxvf boost_1_59_0.tar.gz -C /usr/local/ mv /usr/local/boost_1_59_0 /usr/local/boost
在 编译安装 MySQL(尤其是 8.0 及以上版本) 的过程中,会看到一个依赖项叫 Boost。
Boost 是一个广泛使用的 C++ 库集合,提供了大量功能,包括:
- 高性能的算法和数据结构(如智能指针、容器)
- 日期时间处理(Date/Time)
- 正则表达式(Regex)
- 跨平台线程(Threading)支持
- 其他工具函数和模板库
简单来说,Boost 就像是 C++ 的标准库的“增强版”,很多 MySQL 代码会依赖它来完成一些通用功能。
CMake 编译配置
进入源码目录:cd /opt/mysql-5.7.17/
执行cmake
cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DSYSCONFDIR=/etc \ -DSYSTEMD_PID_DIR=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DWITH_BOOST=/usr/local/boost \ -DWITH_SYSTEMD=1
编译安装:make &&make install
⚠️ 注意:如果 CMake 出错,解决后需删除 CMakeCache.txt 再重新执行。
说明:
cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定mysql的安装路径 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定mysql进程监听套接字文件(数据库连接文件)的存储路径 -DSYSCONFDIR=/etc \ #指定配置文件的存储路径 -DSYSTEMD_PID_DIR=/usr/local/mysql \ #指定进程文件的存储路径 -DDEFAULT_CHARSET=utf8 \ #指定默认使用的字符集编码,如 utf8 -DDEFAULT_COLLATION=utf8_general_ci \ #指定默认使用的字符集校对规则 -DWITH_EXTRA_CHARSETS=all \ #指定支持其他字符集编码 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安装INNOBASE存储引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #安装ARCHIVE存储引擎 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #安装BLACKHOLE存储引擎 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ #安装FEDERATED存储引擎 -DMYSQL_DATADIR=/usr/local/mysql/data \ #指定数据库文件的存储路径 -DWITH_BOOST=/usr/local/boost \ #指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost -DWITH_SYSTEMD=1 #生成便于systemctl管理的文件
存储引擎选项:
MYISAM,MERGE,MEMORY和cSv引擎是默认编译到服务器中,并不需要明确地安装。静态编译一个存储引擎到服务器,使用-DWITH engine STORAGE ENGINE= 1
可用的存储引擎值有:ARCHIVE,BLACKHOLE,EXAMPLE,FBDERATBD,IMNOBASB(InnoDB),PARTTTON(partitioning support),和PERFSCHEMA(Performance schema)
配置 MySQL
权限管理
x chown -R mysql:mysql /usr/local/mysql/ chown mysql:mysql /etc/my.cnf
修改配置文件 /etc/my.cnf
[client] port = 3306 socket=/usr/local/mysql/mysql.sock default-character-set=utf8 [mysqld] user = mysql basedir=/usr/local/mysql datadir=/usr/local/mysql/data port = 3306 character-set-server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket=/usr/local/mysql/mysql.sock bind-address = 0.0.0.0 skip-name-resolve max_connections=2048 default-storage-engine=INNODB max_allowed_packet=16M server-id = 1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES [mysql] port = 3306 default-character-set=utf8 socket=/usr/local/mysql/mysql.sock auto-rehash
详细说明:
[client] 客户端配置 port = 3306:客户端连接 MySQL 的端口,默认是 3306。 socket=/usr/local/mysql/mysql.sock:客户端通过 Unix socket 文件连接 MySQL(Linux/Unix 环境)。 default-character-set=utf8:默认字符集为 UTF-8。 [mysqld] 服务器端配置 user = mysql:MySQL 服务以 `mysql` 用户身份运行。 basedir=/usr/local/mysql:MySQL 安装目录。 datadir=/usr/local/mysql/data:MySQL 数据库文件存放目录。 port = 3306:MySQL 服务监听端口。 character-set-server=utf8:服务器默认字符集 UTF-8。 pid-file = /usr/local/mysql/mysqld.pid:存放 MySQL 进程 ID 的文件路径。 socket=/usr/local/mysql/mysql.sock:服务器端 socket 文件路径。 bind-address = 0.0.0.0:允许任意 IP 连接 MySQL(0.0.0.0 表示监听所有网卡)。 skip-name-resolve:关闭 DNS 解析,使用 IP 地址验证用户,提高连接速度。 max\_connections=2048:最大允许同时连接数。 default-storage-engine=INNODB:默认存储引擎为 InnoDB。 max\_allowed\_packet=16M:最大允许传输的数据包大小。 server-id = 1:MySQL 唯一 ID,常用于主从复制。 sql\_mode=...:设置 SQL 模式,控制 SQL 语法和数据校验规则,如严格模式、禁止零日期、ANSI 引号模式等。 --- ### `[mysql]` 客户端工具配置 port = 3306:客户端连接端口。 default-character-set=utf8:客户端默认字符集 UTF-8。 socket=/usr/local/mysql/mysql.sock:使用 Unix socket 文件连接。 auto-rehash:开启自动补全功能(方便在 `mysql` 命令行中自动补全数据库和表名)。
环境变量设置
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile
数据库初始化
cd /usr/local/mysql/bin/ ./mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data
服务管理
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ systemctl daemon-reload systemctl start mysqld.service systemctl enable mysqld netstat -anpt | grep 3306
账号密码管理
设置ROOT密码: mysqladmin -u root -p password "123456"