MySQL-源码安装
访问MySQL的官方网站下载页面:https://dev.mysql.com/downloads/mysql/
源码安装 RHEL
MySQL 5.7
清除 MariaDB
bash
# 清理现有 MySQL/MariaDB 安装...
rpm -qa | grep -E "mariadb|mysql" | xargs rpm -e --nodeps环境准备
bash
#创建程序用户
useradd -M -s /sbin/nologin mysql
# 创建MySQL的数据目录
mkdir -p /data/mysql/{data,logs,mysql-files}
chown -R mysql:mysql /data/mysql
chmod 750 -R /data/mysql/mysql-files安装依赖
bash
yum -y install cmake gcc gcc-c++ ncurses-devel bison libaio-devel编译 cmake
bash
# 检测版本
cmake --version
# 手动安装
wget https://cmake.org/files/v2.8/cmake-2.8.12.tar.gz
tar -xf cmake-2.8.12.tar.gz -C /usr/src/
cd /usr/src/cmake-2.8.12/
./bootstrap
gmake -j$(nproc)
gmake install- cmake-2.8版本适合在Centos7操作系统安装
- gcc和g++版本较高的话建议安装新版如cmake-3.10.2
安装boost
bash
wget https://archives.boost.io/release/1.59.0/source/boost_1_59_0.tar.gz
# 解压boost
tar zxf boost_1_59_0.tar.gz -C /usr/local/创建配置文件
bash
cat >/etc/my.cnf <<EOF
#服务端配置
[mysqld]
#用户
user=mysql
#软件安装目录
basedir=/usr/local/mysql
#数据路径
datadir=/data/mysql/data
#socket文件位置
socket=/data/mysql/mysql.sock
#端口
port=3306
# 最大连接数
max_connections=500
# 连接超时时间(秒)
connect_timeout=10
wait_timeout=28800
interactive_timeout=28800
# 最大错误尝试次数
max_connect_errors=100
# 0:区分大小写,1:不区分大小写
lower_case_table_names=1
# 设置编码
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
# 默认采用InnoDB存储引擎
default_storage_engine=INNODB
# 主从复制
server_id=2 # 服务器id号
# 二进制日志
log_bin=mysql-bin # 启用二进制日志并设置文件名前缀
# MySQL 8.0+ 默认使用ROW格式,未来版本将移除配置选项
# binlog_format=ROW # 二进制日志格式:STATEMENT/ROW/MIXED
max_binlog_size=100M # 单个二进制日志文件大小
sync_binlog=1 # 控制binlog写入磁盘的频率,1表示每次事务提交都写入
gtid_mode=ON # 是否启用GTID模式(ON/OFF)
enforce_gtid_consistency=ON # 强制GTID一致性(ON/OFF)
# 错误日志
log_error=/data/mysql/logs/mysql-error.log # 错误日志文件路径
log_error_verbosity=3 # 日志详细程度:1=ERROR, 2=ERROR+WARNING, 3=ERROR+WARNING+INFORMATION
# log_error_services = log_filter_internal; log_sink_internal # MySQL 8.0+日志服务组件
log_timestamps=SYSTEM # 控制日志显示时间,建议设置为系统时区
# 查询日志
general_log=0 # 1表示开启,0表示关闭
general_log_file=/data/mysql/logs/mysql-query.log # 日志文件路径
log_output=FILE # 日志输出目标:FILE(文件)、TABLE(表)、NONE(不记录)
# 慢查询
slow_query_log=0 # 1表示开启,0表示关闭
slow_query_log_file=/data/mysql/logs/slow-query.log # 慢查询日志文件路径
long_query_time=2 # 慢查询阈值,单位秒(支持微秒级)
log_queries_not_using_indexes=0 # 是否记录未使用索引的查询,0=关闭
log_slow_admin_statements=0 # 是否记录慢管理语句(如ALTER TABLE)
min_examined_row_limit=0 # 查询扫描行数小于此值不记录
# InnoDB 引擎优化
innodb_buffer_pool_size=4G # 关键参数!建议为物理内存的50-70%
innodb_buffer_pool_instances=8 # 缓冲池分区数(建议每1GB分配1个)
innodb_flush_log_at_trx_commit=1 # 1=完全ACID(安全),2=折衷性能
innodb_log_file_size=4G # 日志文件大小 (建议4-8G)
innodb_io_capacity=2000 # SSD建议2000-4000,HDD建议200-400
# 安全加固
skip_name_resolve=ON # 禁用DNS反向解析连接
local_infile=OFF # 禁用本地文件加载(防注入)
performance_schema=ON # 启用监控(消耗5-10%性能)
secure_file_priv=/data/mysql/mysql-files # 限制MySQL文件导入/导出操作的目录
# 严格模式
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 资源限制
max_allowed_packet=64M # 最大数据包大小
wait_timeout=600 # 非交互连接超时(秒)
interactive_timeout=1800 # 交互式连接超时(秒)
# 文件描述符限制
open_files_limit=60000 # ulimit - 1000
table_open_cache=30000 # (open_files_limit - 500) / 2
# 客户端配置
[mysql]
socket=/data/mysql/mysql.sock
# 连接配置
[client]
socket=/data/mysql/mysql.sock
EOF编译安装MySQL
bash
# 下载源码包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26.tar.gz
tar -xf mysql-5.7.26.tar.gz -C /usr/src/
mkdir -p /usr/src/mysql-5.7.26/build
cd /usr/src/mysql-5.7.26/build
# cmake预配置
cmake .. -DWITH_LOWER_CASE_TABLE_NAMES=1 \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql/data \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DSYSTEMD_PID_DIR=/data/mysql \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1
# 编译安装
make -j$(nproc) && make install初始化数据库
bash
/usr/local/mysql/bin/mysqld --initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/data/mysql/data创建systemd管理文件
bash
cat > /usr/lib/systemd/system/mysqld.service << EOF
[Unit]
Description=MYSQL 5.7.26 server
Documentation=https://dev.mysql.com/doc/refman/
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
EnvironmentFile=/etc/my.cnf
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable mysqld --now
systemctl status mysqld声明环境变量
bash
echo 'export PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile
source /etc/profile创建超户密码
bash
# 无密码初始设置
mysqladmin -u root password '123456'
# 修改密码
mysqladmin -u root -p'旧密码' password '新密码'
# 设置远程登录
mysql -uroot -p'123456' -e "RENAME USER 'root'@'localhost' TO 'root'@'%';"
# 刷新权限表
mysql -uroot -p'123456' -e "FLUSH PRIVILEGES;"MySQL 8.4.5
MySQL 8 完整编译通常需要至少 15-20G 的可用空间。
清除 MariaDB
bash
# 清理现有 MySQL/MariaDB 安装...
rpm -qa | grep -E "mariadb|mysql" | xargs rpm -e --nodeps环境准备
bash
#创建程序用户
useradd -M -s /sbin/nologin mysql
# 创建MySQL的数据目录
mkdir -p /data/mysql/{data,logs,mysql-files}
chown -R mysql:mysql /data/mysql
chmod 750 -R /data/mysql/mysql-files安装依赖
bash
dnf -y install cmake gcc gcc-c++ ncurses-devel bison libaio-devel gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc openssl-devel libtirpc-devel编译 cmake
bash
# 检测版本
cmake --version
# 手动安装
wget https://cmake.org/files/v2.8/cmake-2.8.12.tar.gz
tar -xf cmake-2.8.12.tar.gz -C /usr/src/
cd /usr/src/cmake-2.8.12/
./bootstrap
gmake -j$(nproc)
gmake install- cmake-2.8版本适合在Centos7操作系统安装
- gcc和g++版本较高的话建议安装新版如cmake-3.10.2
安装boost
MySQL-8.4.5对应boost1_77_0
bash
wget https://archives.boost.io/release/1_77_0/source/boost_1_77_0.tar.gz
# 解压boost
tar zxf boost_1_77_0.tar.gz -C /usr/local/安装rpcgen
bash
# 下载源码(官方维护版本)
wget https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4.3/rpcsvc-proto-1.4.3.tar.xz
tar -xf rpcsvc-proto-1.4.3.tar.xz -C /usr/src
cd /usr/src/rpcsvc-proto-1.4.3
# 编译安装
./configure --prefix=/usr
make
sudo make install
# 验证
rpcgen --version创建配置文件
bash
cat >/etc/my.cnf <<EOF
#服务端配置
[mysqld]
#用户
user=mysql
#软件安装目录
basedir=/usr/local/mysql
#数据路径
datadir=/data/mysql/data
#socket文件位置
socket=/data/mysql/mysql.sock
#端口
port=3306
# 最大连接数
max_connections=500
# 连接超时时间(秒)
connect_timeout=10
wait_timeout=28800
interactive_timeout=28800
# 最大错误尝试次数
max_connect_errors=100
# 0:区分大小写,1:不区分大小写
lower_case_table_names=1
# 设置编码
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
# 默认采用InnoDB存储引擎
default_storage_engine=INNODB
# 主从复制
server_id=2 # 服务器id号
log_bin=mysql-bin # 启用二进制日志并设置文件名前缀
# 二进制日志
# MySQL 8.0+ 默认使用ROW格式,未来版本将移除配置选项
# binlog_format=ROW # 二进制日志格式:STATEMENT/ROW/MIXED
max_binlog_size=100M # 单个二进制日志文件大小
sync_binlog=1 # 控制binlog写入磁盘的频率,1表示每次事务提交都写入
gtid_mode=ON # 是否启用GTID模式(ON/OFF)
enforce_gtid_consistency=ON # 强制GTID一致性(ON/OFF)
# 7天自动清理
binlog_expire_logs_seconds=604800
binlog_row_metadata=FULL # 控制二进制日志(ROW格式)中记录的元数据信息量(FULL所有/MINIMAL)
# 错误日志
log_error=/data/mysql/logs/mysql-error.log # 错误日志文件路径
log_error_verbosity=3 # 日志详细程度:1=ERROR, 2=ERROR+WARNING, 3=ERROR+WARNING+INFORMATION
log_error_services=log_filter_internal; log_sink_internal # MySQL 8.0+日志服务组件
log_timestamps= SYSTEM # 控制日志显示时间,建议设置为系统时区
# 查询日志
general_log=0 # 1表示开启,0表示关闭
general_log_file=/data/mysql/logs/mysql-query.log # 日志文件路径
log_output=FILE # 日志输出目标:FILE(文件)、TABLE(表)、NONE(不记录)
# 慢查询
slow_query_log= 0 # 1表示开启,0表示关闭
slow_query_log_file=/data/mysql/logs/slow-query.log # 慢查询日志文件路径
long_query_time=2 # 慢查询阈值,单位秒(支持微秒级)
log_queries_not_using_indexes=0 # 是否记录未使用索引的查询,0=关闭
log_slow_admin_statements=0 # 是否记录慢管理语句(如ALTER TABLE)
min_examined_row_limit=0 # 查询扫描行数小于此值不记录
# InnoDB 引擎优化
innodb_buffer_pool_size=4G # 关键参数!建议为物理内存的50-70%
innodb_buffer_pool_instances=8 # 缓冲池分区数(建议每1GB分配1个)
innodb_flush_log_at_trx_commit=1 # 1=完全ACID(安全),2=折衷性能
innodb_redo_log_capacity=8G # 日志文件大小 (建议4-8G)
innodb_io_capacity=2000 # SSD建议2000-4000,HDD建议200-400
# 安全加固
local_infile=OFF # 禁用本地文件加载(防注入)
performance_schema=ON # 启用监控(消耗5-10%性能)
secure_file_priv=/data/mysql/mysql-files # 限制MySQL文件导入/导出操作的目录
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 严格模式
# 资源限制
max_allowed_packet=64M # 最大数据包大小
wait_timeout=600 # 非交互连接超时(秒)
interactive_timeout=1800 # 交互式连接超时(秒)
# 文件描述符限制
open_files_limit=60000 # ulimit - 1000
table_open_cache=30000 # (open_files_limit - 500) / 2
# 客户端配置
[mysql]
socket=/data/mysql/mysql.sock
# 连接配置
[client]
socket=/data/mysql/mysql.sock
EOF编译安装MySQL
bash
# 下载源码包
wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.5.tar.gz
tar -xvf mysql-8.4.5.tar.gz -C /usr/src/
mkdir -p /usr/src/mysql-8.4.5/build
cd /usr/src/mysql-8.4.5/build
# cmake预配置
cmake .. -DWITH_LOWER_CASE_TABLE_NAMES=1 \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql/data \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_77_0 \
-DSYSTEMD_PID_DIR=/data/mysql \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1
# 编译安装
make -j$(nproc) && make install初始化数据库
bash
/usr/local/mysql/bin/mysqld --initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/data/mysql/data \
--lower_case_table_names=1
# 安全配置
mysql_secure_installation创建systemd管理文件
bash
cat > /usr/lib/systemd/system/mysqld.service << EOF
[Unit]
Description=MYSQL 8.4.5 server
Documentation=https://dev.mysql.com/doc/refman/
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
EnvironmentFile=/etc/my.cnf
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable mysqld --now
systemctl status mysqld声明环境变量
bash
echo 'export PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile
source /etc/profile创建超户密码
bash
# 无密码初始设置
mysqladmin -u root password '123456'
# 修改密码
mysqladmin -u root -p'旧密码' password '新密码'
# 设置远程登录
mysql -uroot -p'123456' -e "RENAME USER 'root'@'localhost' TO 'root'@'%';"
# 刷新权限表
mysql -uroot -p'123456' -e "FLUSH PRIVILEGES;"源码安装-openEuler
MySQL 5.7
环境准备
bash
# 创建程序用户
useradd -M -s /sbin/nologin mysql
# 创建MySQL的数据目录
mkdir -p /data/mysql/{data,logs,mysql-files}
chown -R mysql:mysql /data/mysql
chmod 750 -R /data/mysql/mysql-files安装依赖
bash
dnf -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make libtirpc-devel rpcgen安装 boost
bash
wget https://archives.boost.io/release/1.59.0/source/boost_1_59_0.tar.gz
# 解压boost
tar zxf boost_1_59_0.tar.gz -C /usr/local/安装 cmake
bash
# 验证
cmake --version
# 如果不存在手动安装
wget https://cmake.org/files/v3.24/cmake-3.24.0.tar.gz
tar -zxvf cmake-3.24.0.tar.gz -C /usr/src
cd /usr/src/cmake-3.24.0
./bootstrap
make -j$(nproc)
sudo make install创建 MySQL配置文件
bash
cat >/etc/my.cnf <<EOF
#服务端配置
[mysqld]
#用户
user=mysql
#软件安装目录
basedir=/usr/local/mysql
#数据路径
datadir=/data/mysql/data
#socket文件位置
socket=/data/mysql/mysql.sock
#端口
port=3306
# 最大连接数
max_connections=500
# 连接超时时间(秒)
connect_timeout=10
wait_timeout=28800
interactive_timeout=28800
# 最大错误尝试次数
max_connect_errors=100
# 0:区分大小写,1:不区分大小写
lower_case_table_names=1
# 设置编码
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
# 默认采用InnoDB存储引擎
default_storage_engine=INNODB
# 主从复制
server_id=2 # 服务器id号
# 二进制日志
log_bin=mysql-bin # 启用二进制日志并设置文件名前缀
# MySQL 8.0+ 默认使用ROW格式,未来版本将移除配置选项
binlog_format=ROW # 二进制日志格式:STATEMENT/ROW/MIXED
max_binlog_size=100M # 单个二进制日志文件大小
sync_binlog=1 # 控制binlog写入磁盘的频率,1表示每次事务提交都写入
gtid_mode=ON # 是否启用GTID模式(ON/OFF)
enforce_gtid_consistency=ON # 强制GTID一致性(ON/OFF)
# 错误日志
log_error=/data/mysql/logs/mysql-error.log # 错误日志文件路径
log_error_verbosity=3 # 日志详细程度:1=ERROR, 2=ERROR+WARNING, 3=ERROR+WARNING+INFORMATION
# log_error_services = log_filter_internal; log_sink_internal # MySQL 8.0+日志服务组件
log_timestamps=SYSTEM # 控制日志显示时间,建议设置为系统时区
# 查询日志
general_log=0 # 1表示开启,0表示关闭
general_log_file=/data/mysql/logs/mysql-query.log # 日志文件路径
log_output=FILE # 日志输出目标:FILE(文件)、TABLE(表)、NONE(不记录)
# 慢查询
slow_query_log=0 # 1表示开启,0表示关闭
slow_query_log_file=/data/mysql/logs/slow-query.log # 慢查询日志文件路径
long_query_time=2 # 慢查询阈值,单位秒(支持微秒级)
log_queries_not_using_indexes=0 # 是否记录未使用索引的查询,0=关闭
log_slow_admin_statements=0 # 是否记录慢管理语句(如ALTER TABLE)
min_examined_row_limit=0 # 查询扫描行数小于此值不记录
# InnoDB 引擎优化
innodb_buffer_pool_size=4G # 关键参数!建议为物理内存的50-70%
innodb_buffer_pool_instances=8 # 缓冲池分区数(建议每1GB分配1个)
innodb_flush_log_at_trx_commit=1 # 1=完全ACID(安全),2=折衷性能
innodb_log_file_size=4G # 日志文件大小 (建议4-8G)
innodb_io_capacity=2000 # SSD建议2000-4000,HDD建议200-400
# 安全加固
skip_name_resolve=ON # 禁用DNS反向解析连接
local_infile=OFF # 禁用本地文件加载(防注入)
performance_schema=ON # 启用监控(消耗5-10%性能)
secure_file_priv=/data/mysql/mysql-files # 限制MySQL文件导入/导出操作的目录
# 严格模式
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 资源限制
max_allowed_packet=64M # 最大数据包大小
wait_timeout=600 # 非交互连接超时(秒)
interactive_timeout=1800 # 交互式连接超时(秒)
# 文件描述符限制
open_files_limit=60000 # ulimit - 1000
table_open_cache=30000 # (open_files_limit - 500) / 2
# 客户端配置
[mysql]
socket=/data/mysql/mysql.sock
# 连接配置
[client]
socket=/data/mysql/mysql.sock
EOF安装MySQL
bash
# 创建MySQL的数据目录
mkdir /data/mysql -p
chown -R mysql:mysql /data
# 下载解压MySQL
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26.tar.gz
tar zxf mysql-5.7.26.tar.gz -C /usr/src
cd /usr/src/mysql-5.7.26/
# cmake预配置
cmake . -DWITH_LOWER_CASE_TABLE_NAMES=1 \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql/data \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DSYSTEMD_PID_DIR=/data/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1
# 安装
make -j$(nproc) && make install-DWITH_LOWER_CASE_TABLE_NAMES=1- 控制数据库和表名的大小写敏感性(0:区分大小写,1:不区分大小写)。
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql- 指定 MySQL 的安装目录,编译后的二进制文件、库等将安装到此路径。
-DMYSQL_DATADIR=/data/mysql- 设置 MySQL 数据文件的存储目录(如表数据、日志等)。
-DSYSCONFDIR=/etc- 指定配置文件
my.cnf的默认存放目录(通常为/etc/my.cnf或/etc/mysql/my.cnf)。
- 指定配置文件
-DDOWNLOAD_BOOST=1- 允许 CMake 自动下载所需的 Boost 库(若本地未安装)。
-DWITH_BOOST=/usr/local/boost- 指定 Boost 库的源码或安装路径。MySQL 8.0 依赖 Boost(如 1.77.0+),需确保路径正确。
-DSYSTEMD_PID_DIR=/data/mysql- 设置 systemd 服务的 PID 文件存放目录(需与
systemd服务配置匹配)。
- 设置 systemd 服务的 PID 文件存放目录(需与
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock- 定义 MySQL 的 Unix 套接字文件路径,客户端通过此文件与服务器通信。
-DWITH_INNOBASE_STORAGE_ENGINE=1- 启用 InnoDB 存储引擎(默认已启用,此为显式确认)。
-DWITH_PARTITION_STORAGE_ENGINE=1
- 启用分区表支持。
-DWITH_FEDERATED_STORAGE_ENGINE=1- 启用 FEDERATED 存储引擎(允许访问远程表)。
-DWITH_BLACKHOLE_STORAGE_ENGINE=1- 启用 BLACKHOLE 引擎(写入数据会被丢弃,用于复制或测试)。
-DWITH_MYISAM_STORAGE_ENGINE=1- 启用 MyISAM 引擎(MySQL 5.7 前的默认引擎)。
-DENABLED_LOCAL_INFILE=1- 允许通过
LOAD DATA LOCAL INFILE从本地文件导入数据(需注意安全风险)。
- 允许通过
-DENABLE_DTRACE=0- 禁用 DTrace 支持(用于动态跟踪,通常非必需)。
-DDEFAULT_CHARSET=utf8mb4- 设置默认字符集为
utf8mb4(支持完整的 Unicode,包括表情符号)。
- 设置默认字符集为
-DDEFAULT_COLLATION=utf8mb4_general_ci- 设置默认排序规则为
utf8mb4_general_ci(大小写不敏感的比较)。
- 设置默认排序规则为
-DWITH_EMBEDDED_SERVER=1- 编译嵌入式服务器库(
libmysqld),供应用程序内置使用。
- 编译嵌入式服务器库(
初始化数据库
bash
/usr/local/mysql/bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/data/mysql/data创建systemd管理文件
bash
cat > /usr/lib/systemd/system/mysqld.service << EOF
[Unit]
Description=MYSQL server
Documentation=https://dev.mysql.com/doc/refman/
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
EnvironmentFile=/etc/my.cnf
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable mysqld --now
systemctl status mysqld声明环境变量
bash
echo 'export PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile
source /etc/profile创建超户密码
bash
mysqladmin -u root password '123456'
# 修改密码
mysqladmin -u root -p'旧密码' password '新密码'
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
# 设置远程登录
mysql -uroot -p'123456' -e'rename user root@"localhost" to root@"%"'
RENAME USER 'root'@'localhost' TO 'root'@'%';
# 刷新权限表
mysql -uroot -p'123456' -e'FLUSH PRIVILEGES;'MySQL 8.0
环境准备
bash
# 创建程序用户
useradd -M -s /sbin/nologin mysql
# 创建MySQL的数据目录
mkdir -p /data/mysql/{data,logs,mysql-files}
chown -R mysql:mysql /data/mysql
chmod 750 -R /data/mysql/mysql-files安装依赖
bash
dnf install -y tar cmake gcc gcc-c++ make bison ncurses-devel libaio-devel openssl-devel libtirpc-devel rpcgen m4安装 cmake
bash
# 检测版本
cmake --version
# 如果不存在手动安装
mkdir build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_SSL=system \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1
make -j$(nproc) # 多线程加速编译
make install关键选项说明:
CMAKE_INSTALL_PREFIX:指定安装目录。WITH_SSL:启用SSL加密支持。- 字符集建议统一为
utf8mb4以支持完整Unicode
安装 boost
bash
wget https://archives.boost.io/release/1.77.0/source/boost_1_77_0.tar.gz
# 解压boost
tar zxf boost_1_77_0.tar.gz -C /usr/local/- MySQL8.0对应boost_1_77_0
- MySQL8.4.5对应boost_1_84_0
创建MySQL配置文件
bash
cat >/etc/my.cnf <<EOF
#服务端配置
[mysqld]
#用户
user=mysql
#软件安装目录
basedir=/usr/local/mysql
#数据路径
datadir=/data/mysql/data
#socket文件位置
socket=/data/mysql/mysql.sock
#端口
port=3306
# 最大连接数
max_connections=500
# 连接超时时间(秒)
connect_timeout=10
wait_timeout=28800
interactive_timeout=28800
# 最大错误尝试次数
max_connect_errors=100
# 0:区分大小写,1:不区分大小写
lower_case_table_names=1
# 设置编码
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
# 默认采用InnoDB存储引擎
default_storage_engine=INNODB
# 主从复制
server_id=2 # 服务器id号
log_bin=mysql-bin # 启用二进制日志并设置文件名前缀
# 二进制日志
# MySQL 8.0+ 默认使用ROW格式,未来版本将移除配置选项
# binlog_format=ROW # 二进制日志格式:STATEMENT/ROW/MIXED
max_binlog_size=100M # 单个二进制日志文件大小
sync_binlog=1 # 控制binlog写入磁盘的频率,1表示每次事务提交都写入
gtid_mode=ON # 是否启用GTID模式(ON/OFF)
enforce_gtid_consistency=ON # 强制GTID一致性(ON/OFF)
# 7天自动清理
binlog_expire_logs_seconds=604800
binlog_row_metadata=FULL # 控制二进制日志(ROW格式)中记录的元数据信息量(FULL所有/MINIMAL)
# 错误日志
log_error=/data/mysql/logs/mysql-error.log # 错误日志文件路径
log_error_verbosity=3 # 日志详细程度:1=ERROR, 2=ERROR+WARNING, 3=ERROR+WARNING+INFORMATION
log_error_services=log_filter_internal; log_sink_internal # MySQL 8.0+日志服务组件
log_timestamps= SYSTEM # 控制日志显示时间,建议设置为系统时区
# 查询日志
general_log=0 # 1表示开启,0表示关闭
general_log_file=/data/mysql/logs/mysql-query.log # 日志文件路径
log_output=FILE # 日志输出目标:FILE(文件)、TABLE(表)、NONE(不记录)
# 慢查询
slow_query_log= 0 # 1表示开启,0表示关闭
slow_query_log_file=/data/mysql/logs/slow-query.log # 慢查询日志文件路径
long_query_time=2 # 慢查询阈值,单位秒(支持微秒级)
log_queries_not_using_indexes=0 # 是否记录未使用索引的查询,0=关闭
log_slow_admin_statements=0 # 是否记录慢管理语句(如ALTER TABLE)
min_examined_row_limit=0 # 查询扫描行数小于此值不记录
# InnoDB 引擎优化
innodb_buffer_pool_size=4G # 关键参数!建议为物理内存的50-70%
innodb_buffer_pool_instances=8 # 缓冲池分区数(建议每1GB分配1个)
innodb_flush_log_at_trx_commit=1 # 1=完全ACID(安全),2=折衷性能
innodb_redo_log_capacity=8G # 日志文件大小 (建议4-8G)
innodb_io_capacity=2000 # SSD建议2000-4000,HDD建议200-400
# 安全加固
local_infile=OFF # 禁用本地文件加载(防注入)
performance_schema=ON # 启用监控(消耗5-10%性能)
secure_file_priv=/data/mysql/mysql-files # 限制MySQL文件导入/导出操作的目录
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 严格模式
# 资源限制
max_allowed_packet=64M # 最大数据包大小
wait_timeout=600 # 非交互连接超时(秒)
interactive_timeout=1800 # 交互式连接超时(秒)
# 文件描述符限制
open_files_limit=60000 # ulimit - 1000
table_open_cache=30000 # (open_files_limit - 500) / 2
# 客户端配置
[mysql]
socket=/data/mysql/mysql.sock
# 连接配置
[client]
socket=/data/mysql/mysql.sock
default_authentication_plugin=mysql_native_password
#default_authentication_plugin=caching_sha2_password # MySQL 8.0+的默认认证插件替代旧的mysql_native_password
EOF编译安装MySQL
bash
# 创建MySQL的数据目录
mkdir /data/mysql -p
chown -R mysql:mysql /data
# 下载
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.42.tar.gz
tar -zxvf mysql-8.0.42.tar.gz -C /usr/src
# MySQL 官方强烈推荐使用 out-of-source build(即在单独的目录中编译)
mkdir /usr/src/mysql-8.0.42/build
cd /usr/src/mysql-8.0.42/build
# 预配置
cmake .. \
-DDOWNLOAD_BOOST=0 \
-DWITH_BOOST=/usr/local/boost_1_77_0 \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/data/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_SYSTEMD=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0
# 编译安装 make VERBOSE=1查看完整日志信息
make -j2 && make install
# 清理并重新编译
rm -rf CMakeCache.txt CMakeFiles/
make clean-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost- 作用:自动下载并指定 Boost 库路径(MySQL 8 必须依赖 Boost,如 1.77.0+)。
- 注意:若
/usr/local/boost已存在旧版本,需手动清理或强制重新下载。
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql- 安装目录,所有二进制文件、库、头文件将安装到此路径。需确保用户有写入权限。
-DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci-DWITH_INNOBASE_STORAGE_ENGINE=1- 强制启用 InnoDB(默认已包含),建议保留以支持事务和行级锁。
-DENABLED_LOCAL_INFILE=1- 允许通过
LOAD DATA LOCAL INFILE导入本地文件,但需注意安全风险(需在my.cnf中限制权限)。
- 允许通过
-DMYSQL_DATADIR=/data/mysql- 数据存储目录,需提前创建并赋予
mysql用户权限
- 数据存储目录,需提前创建并赋予
-DSYSCONFDIR=/etc- 配置文件
my.cnf的默认路径。建议编译后手动创建或复制模板
- 配置文件
-DWITH_SYSTEMD=1- 生成 systemd 服务文件(如
mysqld.service),便于通过systemctl管理服务。 - 依赖:需提前安装
systemd-devel包(CentOS/RHEL)或类似。
- 生成 systemd 服务文件(如
-DWITH_EMBEDDED_SERVER=1- 编译嵌入式库
libmysqld,供应用程序内嵌使用(非必需可移除以减少体积)。
- 编译嵌入式库
-DWITH_PARTITION_STORAGE_ENGINE=1- 启用分区表功能,适合大数据场景。
-DWITH_DEBUG=0- 禁用调试模式,提升性能(生产环境推荐)。
设置 systemd 服务
bash
cat > /usr/lib/systemd/system/mysqld.service << EOF
[Unit]
Description=MYSQL 8.0.42 server
Documentation=https://dev.mysql.com/doc/refman/
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
EnvironmentFile=/etc/my.cnf
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=5000
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable mysqld --now
systemctl status mysqld设置环境变量
bash
echo 'export PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile
source /etc/profile初始化数据库
bash
/usr/local/mysql/bin/mysqld --initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/data/mysql/data \
--lower_case_table_names=1
# 安全配置
mysql_secure_installationCAUTION
- 在 MySQL 8.0 中,
lower_case_table_names只能在 初始化数据目录时 设置 - 虽然可以在编译时通过 CMake 选项指定默认值 (
-DWITH_LOWER_CASE_TABLE_NAMES=1),但最终生效值是在初始化时确定的
设置超级用户密码
bash
# 无密码初始设置
mysqladmin -u root password '123456'
# 修改密码
mysqladmin -u root -p'旧密码' password '新密码'
# MySQL 8.0 默认使用 caching_sha2_password 认证插件
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
# 设置远程登录
RENAME USER 'root'@'localhost' TO 'root'@'%';
# 刷新权限表
FLUSH PRIVILEGES;MySQl-RPM包方式安装
手动下载RPM包
- 官网地址:https://www.mysql.com/downloads/
- 步骤一:选择“MySQL Community (GPL) Downloads »”
- 步骤二:选择“MySQL Communtiy Server”
- 步骤三:下载对应操作系统版本的MySQL版本
- 步骤四:选择适合操作系统的版本
RPM包安装-RHEL
基于RedHat和Oracle Linux操作系统的MySQL5.7版本的RPM包
安装前准备工作
bash
# 卸载旧版本和自带的mariadb
rpm -qa |grep -i mysql
rpm -qa |grep -i mariadb | xargs -I{} rpm -e {} --nodeps
# 创建MySQL的数据目录
mkdir -p /data/mysql/{data,logs}
chown -R mysql:mysql /data/mysql安装依赖
bash
yum install -y wget libaio numactl perl net-toolsMySQL RPM包下载与解压
bash
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar安装MySQL RPM包
bash
yum localinstall -y mysql-*.rpm设置配置文件
bash
cat >/etc/my.cnf <<EOF
#服务端配置
[mysqld]
#用户
user=mysql
#软件安装目录
basedir=/usr/local/mysql
#数据路径
datadir=/data/mysql/data
#socket文件位置
socket=/data/mysql/mysql.sock
#端口
port=3306
# 最大连接数
max_connections=500
# 连接超时时间(秒)
connect_timeout=10
wait_timeout=28800
interactive_timeout=28800
# 最大错误尝试次数
max_connect_errors=100
# 0:区分大小写,1:不区分大小写
lower_case_table_names=1
# 设置编码
character_set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 默认采用InnoDB存储引擎
default_storage_engine=INNODB
# 主从复制
server_id=2 # 服务器id号
log_bin = mysql-bin # 启用二进制日志并设置文件名前缀
binlog_format = ROW # 二进制日志格式:STATEMENT/ROW/MIXED
max_binlog_size = 100M # 单个二进制日志文件大小
sync_binlog = 1 # 控制binlog写入磁盘的频率,1表示每次事务提交都写入
gtid_mode=ON # 是否启用GTID模式(ON/OFF)
enforce_gtid_consistency=ON # 强制GTID一致性(ON/OFF)
# 错误日志
log_error = /data/mysql/logs/mysql-error.log # 错误日志文件路径
log_error_verbosity = 3 # 日志详细程度:1=ERROR, 2=ERROR+WARNING, 3=ERROR+WARNING+INFORMATION
log_error_services = log_filter_internal; log_sink_internal # MySQL 8.0+日志服务组件
log_timestamps = SYSTEM # 控制日志显示时间,建议设置为系统时区
# 查询日志
general_log = 0 # 1表示开启,0表示关闭
general_log_file = /data/mysql/logs/mysql-query.log # 日志文件路径
log_output = FILE # 日志输出目标:FILE(文件)、TABLE(表)、NONE(不记录)
# 慢查询
slow_query_log = 0 # 1表示开启,0表示关闭
slow_query_log_file = /data/mysql/logs/slow-query.log # 慢查询日志文件路径
long_query_time = 2 # 慢查询阈值,单位秒(支持微秒级)
log_queries_not_using_indexes = 0 # 是否记录未使用索引的查询,0=关闭
log_slow_admin_statements = 0 # 是否记录慢管理语句(如ALTER TABLE)
min_examined_row_limit = 0 # 查询扫描行数小于此值不记录
# InnoDB 引擎优化
innodb_buffer_pool_size = 4G # 关键参数!建议为物理内存的50-70%
innodb_buffer_pool_instances = 8 # 缓冲池分区数(建议每1GB分配1个)
innodb_flush_log_at_trx_commit = 1 # 1=完全ACID(安全),2=折衷性能
innodb_log_file_size = 4G # 日志文件大小 (建议4-8G)
innodb_io_capacity = 2000 # SSD建议2000-4000,HDD建议200-400
# 安全加固
skip_name_resolve = ON # 禁用DNS反向解析连接
local_infile = OFF # 禁用本地文件加载(防注入)
performance_schema = ON # 启用监控(消耗5-10%性能)
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION # 严格模式
# 资源限制
max_allowed_packet = 64M # 最大数据包大小
wait_timeout = 600 # 非交互连接超时(秒)
interactive_timeout = 1800 # 交互式连接超时(秒)
# 客户端配置
[mysql]
socket=/data/mysql/mysql.sock
# 连接配置
[client]
socket=/data/mysql/mysql.sock
EOF设置 root 密码
bash
# 查看初始密码
grep 'temporary password' /var/log/mysqld.log
# 设置密码
mysqladmin -uroot -p"旧密码" password 'Qwer@1234!';
# 设置远程登录
mysql -uroot -p'Qwer@1234!' -e "RENAME USER 'root'@'localhost' TO 'root'@'%';"
# 刷新权限表
mysql -uroot -p'Qwer@1234!' -e "FLUSH PRIVILEGES;"RPM包安装-openEuler
安装前准备
bash
# 卸载旧版本和自带的mariadb
rpm -qa |grep -i mysql
rpm -qa |grep -i mariadb | xargs -I{} rpm -e {} --nodeps
# 创建MySQL的数据目录
mkdir -p /data/mysql/{data,logs}
chown -R mysql:mysql /data/mysql下载 MySQL Yum 源
bash
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
# 查看可用的 mysql 安装文件
dnf repolist all | grep mysql
# 非常重要:防止GPG key报错
rm -rf /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022安装MySQL服务
bash
dnf install -y mysql-community-server设置配置文件
bash
cat >/etc/my.cnf <<EOF
#服务端配置
[mysqld]
#用户
user=mysql
#软件安装目录
basedir=/usr/local/mysql
#数据路径
datadir=/data/mysql/data
#socket文件位置
socket=/data/mysql/mysql.sock
#端口
port=3306
# 最大连接数
max_connections=500
# 连接超时时间(秒)
connect_timeout=10
wait_timeout=28800
interactive_timeout=28800
# 最大错误尝试次数
max_connect_errors=100
# 0:区分大小写,1:不区分大小写
lower_case_table_names=1
# 设置编码
character_set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 默认采用InnoDB存储引擎
default_storage_engine=INNODB
# 主从复制
server_id=2 # 服务器id号
log_bin = mysql-bin # 启用二进制日志并设置文件名前缀
binlog_format = ROW # 二进制日志格式:STATEMENT/ROW/MIXED
max_binlog_size = 100M # 单个二进制日志文件大小
sync_binlog = 1 # 控制binlog写入磁盘的频率,1表示每次事务提交都写入
gtid_mode=ON # 是否启用GTID模式(ON/OFF)
enforce_gtid_consistency=ON # 强制GTID一致性(ON/OFF)
# 错误日志
log_error = /data/mysql/logs/mysql-error.log # 错误日志文件路径
log_error_verbosity = 3 # 日志详细程度:1=ERROR, 2=ERROR+WARNING, 3=ERROR+WARNING+INFORMATION
log_error_services = log_filter_internal; log_sink_internal # MySQL 8.0+日志服务组件
log_timestamps = SYSTEM # 控制日志显示时间,建议设置为系统时区
# 查询日志
general_log = 0 # 1表示开启,0表示关闭
general_log_file = /data/mysql/logs/mysql-query.log # 日志文件路径
log_output = FILE # 日志输出目标:FILE(文件)、TABLE(表)、NONE(不记录)
# 慢查询
slow_query_log = 0 # 1表示开启,0表示关闭
slow_query_log_file = /data/mysql/logs/slow-query.log # 慢查询日志文件路径
long_query_time = 2 # 慢查询阈值,单位秒(支持微秒级)
log_queries_not_using_indexes = 0 # 是否记录未使用索引的查询,0=关闭
log_slow_admin_statements = 0 # 是否记录慢管理语句(如ALTER TABLE)
min_examined_row_limit = 0 # 查询扫描行数小于此值不记录
# InnoDB 引擎优化
innodb_buffer_pool_size = 4G # 关键参数!建议为物理内存的50-70%
innodb_buffer_pool_instances = 8 # 缓冲池分区数(建议每1GB分配1个)
innodb_flush_log_at_trx_commit = 1 # 1=完全ACID(安全),2=折衷性能
innodb_log_file_size = 4G # 日志文件大小 (建议4-8G)
innodb_io_capacity = 2000 # SSD建议2000-4000,HDD建议200-400
# 安全加固
skip_name_resolve = ON # 禁用DNS反向解析连接
local_infile = OFF # 禁用本地文件加载(防注入)
performance_schema = ON # 启用监控(消耗5-10%性能)
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION # 严格模式
# 资源限制
max_allowed_packet = 64M # 最大数据包大小
wait_timeout = 600 # 非交互连接超时(秒)
interactive_timeout = 1800 # 交互式连接超时(秒)
# 客户端配置
[mysql]
socket=/data/mysql/mysql.sock
# 连接配置
[client]
socket=/data/mysql/mysql.sock
EOF设置 root 密码
bash
# 查看初始密码
grep 'temporary password' /var/log/mysqld.log
# 设置密码
mysqladmin -uroot -p"旧密码" password 'Qwer@1234!';
# 设置远程登录
mysql -uroot -p'Qwer@1234!' -e "RENAME USER 'root'@'localhost' TO 'root'@'%';"
# 刷新权限表
mysql -uroot -p'Qwer@1234!' -e "FLUSH PRIVILEGES;"MySQL 数据库多实例
环境准备
bash
mkdir -p /data/mysql330{7,8}/{data,logs}
chown -R mysql:mysql /data/mysql330{7,8}创建配置文件
bash
# 3307
cat > /etc/my-3307.cnf <<EOF
[mysqld]
user=mysql
group=mysql
basedir=/usr/local/mysql
datadir=/data/mysql3307/data
socket=/data/mysql3307/mysql.sock
log_error=/data/mysql3307/logs/mysql-error.log
port=3307
server_id=7
log_bin=/data/mysql3307/logs/mysql-bin
# 最大连接数
max_connections=500
# 连接超时时间(秒)
connect_timeout=10
wait_timeout=28800
interactive_timeout=28800
# 最大错误尝试次数
max_connect_errors=100
#客户端配置
[mysql]
socket=/data/mysql3307/mysql.sock
EOF
# 3308
cat > /etc/my-3308.cnf <<EOF
[mysqld]
user=mysql
group=mysql
basedir=/usr/local/mysql
datadir=/data/mysql3308/data
socket=/data/mysql3308/mysql.sock
log_error=/data/mysql3308/logs/mysql-error.log
port=3308
server_id=8
log_bin=/data/mysql3308/logs/mysql-bin
# 最大连接数
max_connections=151
# 连接超时时间(秒)
connect_timeout=10
wait_timeout=28800
interactive_timeout=28800
# 最大错误尝试次数
max_connect_errors=100
#客户端配置
[mysql]
socket=/data/mysql3308/mysql.sock
EOF初始化数据库
bash
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql3307/data --basedir=/usr/local/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql3308/data --basedir=/usr/local/mysql创建启动文件
bash
cat > /usr/lib/systemd/system/mysqld@.service << EOF
[Unit]
Description=MYSQL Instance %i
Documentation=https://dev.mysql.com/doc/refman/
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
EnvironmentFile=/etc/my-%i.cnf
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my-%i.cnf
LimitNOFILE=5000
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload启动服务
bash
systemctl start mysqld@3307.service
systemctl start mysqld@3308.service
# 检测
netstat -antup |grep mysqldMySQL 优化
系统优化
bash
# 临时提高限制
sudo sysctl -w fs.file-max=655360
echo 655360 > /proc/sys/fs/file-max
# 永久修改(需重启)
echo "mysql soft nofile 65535" >> /etc/security/limits.conf
echo "mysql hard nofile 65535" >> /etc/security/limits.conf
echo "fs.file-max = 655360" >> /etc/sysctl.conf && sysctl -p
# MySQL配置调整
[mysqld]
# ulimit - 1000
open_files_limit = 64535
# (open_files_limit - 500) / 2
table_open_cache = 32000