1. 首页 > MariaDB教程 > 正文

MariaDB教程FG004-MariaDB源码编译安装与官方推荐参数配置实战

本文档风哥主要介绍MariaDB的源码编译安装方法及官方推荐参数配置,包括源码下载、编译环境准备、编译安装步骤和参数调优等内容。风哥教程参考MariaDB官方文档Installation Guides和Performance Tuning内容,适合数据库管理员学习和实施。

Part01-基础概念与理论知识

1.1 源码编译概念

源码编译是指从源代码构建软件的过程,相比二进制安装,具有以下优势:

  • 可定制性强,可根据需要开启或关闭特定功能
  • 可针对特定硬件平台进行优化
  • 可获取最新版本的功能
  • 更适合需要深度定制的生产环境

1.2 编译环境要求

风哥提示:源码编译需要安装完整的开发环境和依赖包,确保编译过程顺利进行。

1.3 参数配置基础

MariaDB参数配置包括:

  • 基本参数:端口、数据目录等
  • 性能参数:缓冲区大小、连接数等
  • 安全参数:访问控制、加密等
  • 存储引擎参数:InnoDB、MyISAM等
更多视频教程www.fgedu.net.cn

Part02-生产环境规划与建议

2.1 编译规划

编译规划包括:

  • 安装路径:/usr/local/mariadb
  • 数据路径:/mariadb/fgdata
  • 编译选项:开启必要功能,关闭不需要的功能
  • 优化选项:针对硬件平台进行编译优化

2.2 依赖包准备

更多学习教程公众号风哥教程itpux_com

# 安装编译依赖
[root@fgedu.net.cn ~]# yum install -y \
gcc gcc-c++ make cmake \
ncurses-devel bison openssl-devel \
zlib-devel libaio-devel libxml2-devel \
libevent-devel gnutls-devel
# 安装其他依赖
[root@fgedu.net.cn ~]# yum install -y \
perl-Data-Dumper perl-DBI \
perl-DBD-MySQL perl-Time-HiRes

2.3 优化策略

编译优化策略:

  • 使用-O2或-O3编译优化
  • 针对CPU架构进行优化
  • 开启必要的存储引擎
  • 关闭不需要的功能模块
学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 源码下载与准备

# 下载MariaDB源码
[root@fgedu.net.cn ~]# wget https://downloads.mariadb.org/interstitial/mariadb-10.11.8/source/mariadb-10.11.8.tar.gz
# 解压源码
[root@fgedu.net.cn ~]# tar -zxvf mariadb-10.11.8.tar.gz
[root@fgedu.net.cn ~]# cd mariadb-10.11.8
# 创建用户和组
[root@fgedu.net.cn ~]# groupadd mysql
[root@fgedu.net.cn ~]# useradd -r -g mysql -s /sbin/nologin mysql
# 创建目录结构
[root@fgedu.net.cn ~]# mkdir -p /usr/local/mariadb
[root@fgedu.net.cn ~]# mkdir -p /mariadb/fgdata
[root@fgedu.net.cn ~]# chown -R mysql:mysql /mariadb/

3.2 编译安装步骤

# 配置编译选项
[root@fgedu.net.cn mariadb-10.11.8]# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-DMYSQL_DATADIR=/mariadb/fgdata \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DCMAKE_BUILD_TYPE=RelWithDebInfo
# 编译
[root@fgedu.net.cn mariadb-10.11.8]# make -j $(nproc)
# 安装
[root@fgedu.net.cn mariadb-10.11.8]# make install
# 初始化数据库
[root@fgedu.net.cn ~]# cd /usr/local/mariadb
[root@fgedu.net.cn mariadb]# ./scripts/mysql_install_db –user=mysql –datadir=/mariadb/fgdata

3.3 官方推荐参数配置

# 配置my.cnf
[root@fgedu.net.cn ~]# cat > /etc/my.cnf << 'EOF'
[mysqld]
# 基本配置
user = mysql
basedir = /usr/local/mariadb
datadir = /mariadb/fgdata
socket = /tmp/mysql.sock
pid-file = /mariadb/fgdata/mysql.pid
# 官方推荐性能参数
innodb_buffer_pool_size = 8G
innodb_log_file_size = 2G
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_buffer_pool_instances = 8
innodb_thread_concurrency = 16
# 连接配置
max_connections = 2000
max_connect_errors = 10000
wait_timeout = 300
interactive_timeout = 300
# 查询缓存(已废弃,建议关闭)
query_cache_size = 0
query_cache_type = 0
# 其他配置
tmp_table_size = 64M
max_heap_table_size = 64M
table_open_cache = 4096
table_definition_cache = 4096
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
join_buffer_size = 8M
# 安全配置
bind-address = 0.0.0.0
skip-name-resolve
EOF
# 创建systemd服务文件
[root@fgedu.net.cn ~]# cat > /etc/systemd/system/mariadb.service << 'EOF'
[Unit]
Description=MariaDB 10.11.8 database server
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mariadb/bin/mysqld –defaults-file=/etc/my.cnf
ExecStop=/usr/local/mariadb/bin/mysqladmin -u root -p shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
[root@fgedu.net.cn ~]# systemctl daemon-reload
[root@fgedu.net.cn ~]# systemctl start mariadb
[root@fgedu.net.cn ~]# systemctl enable mariadb
学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 源码编译实战

# 检查编译结果
[root@fgedu.net.cn ~]# ls -la /usr/local/mariadb/
total 48
drwxr-xr-x 13 root root 4096 Apr 7 12:00 .
drwxr-xr-x. 1 root root 4096 Apr 7 11:30 ..
drwxr-xr-x 2 root root 4096 Apr 7 12:00 bin
drwxr-xr-x 3 root root 4096 Apr 7 12:00 docs
drwxr-xr-x 3 root root 4096 Apr 7 12:00 include
drwxr-xr-x 4 root root 4096 Apr 7 12:00 lib
drwxr-xr-x 4 root root 4096 Apr 7 12:00 man
drwxr-xr-x 10 root root 4096 Apr 7 12:00 mysql-test
drwxr-xr-x 2 root root 4096 Apr 7 12:00 scripts
drwxr-xr-x 28 root root 4096 Apr 7 12:00 share
drwxr-xr-x 4 root root 4096 Apr 7 12:00 sql-bench
drwxr-xr-x 3 root root 4096 Apr 7 12:00 support-files
# 检查服务状态
[root@fgedu.net.cn ~]# systemctl status mariadb
● mariadb.service – MariaDB 10.11.8 database server
Loaded: loaded (/etc/systemd/system/mariadb.service;
enabled;
vendor preset: disabled)
Active: active (running) since Mon 2026-04-07 12:10:00 CST;
5min ago
Main PID: 3456 (mysqld)
Status: “Taking your SQL requests now…”
Tasks: 35 (limit: 32768)
Memory: 1.5G
CPU: 3.2s
CGroup: /system.slice/mariadb.service
└─3456 /usr/local/mariadb/bin/mysqld –defaults-file=/etc/my.cnf
Apr 07 12:10:00 fgedu.net.cn systemd[1]: Started MariaDB 10.11.8 database server.

4.2 参数调优实战

# 连接MariaDB
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with;
or \g.
Your MariaDB connection id is 8
Server version: 10.11.8-MariaDB Source distribution
# 查看参数配置
MariaDB [(none)]> SHOW VARIABLES LIKE ‘innodb_buffer_pool_size’;
+————————-+————+
| Variable_name | Value |
+————————-+————+
| innodb_buffer_pool_size | 8589934592 |
+————————-+————+
1 row in set (0.00 sec)
MariaDB [(none)]> SHOW VARIABLES LIKE ‘max_connections’;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 2000 |
+—————–+——-+
1 row in set (0.00 sec)
# 查看状态
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE ‘Innodb_buffer_pool_%’;
+—————————————+————-+
| Variable_name | Value |
+—————————————+————-+
| Innodb_buffer_pool_dump_status | not started |
| Innodb_buffer_pool_load_status | not started |
| Innodb_buffer_pool_resize_status | not started |
| Innodb_buffer_pool_pages_data | 262144 |
| Innodb_buffer_pool_bytes_data | 4294967296 |
| Innodb_buffer_pool_pages_dirty | 0 |
| Innodb_buffer_pool_bytes_dirty | 0 |
| Innodb_buffer_pool_pages_flushed | 0 |
| Innodb_buffer_pool_pages_free | 262144 |
| Innodb_buffer_pool_pages_misc | 0 |
| Innodb_buffer_pool_pages_total | 524288 |
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 0 |
| Innodb_buffer_pool_read_ahead_evicted | 0 |
| Innodb_buffer_pool_read_requests | 12345 |
| Innodb_buffer_pool_reads | 123 |
| Innodb_buffer_pool_wait_free | 0 |
| Innodb_buffer_pool_write_requests | 6789 |
+—————————————+————-+
18 rows in set (0.01 sec)

4.3 性能验证

# 创建测试数据库
MariaDB [(none)]> CREATE DATABASE fgedudb;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> USE fgedudb;
Database changed
# 创建测试表
MariaDB [fgedudb]> CREATE TABLE fgedu_test (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(100),
-> value INT,
-> created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-> ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.01 sec)
# 插入测试数据
MariaDB [fgedudb]> DELIMITER //
MariaDB [fgedudb]> CREATE PROCEDURE insert_large_data()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 200000 DO
INSERT INTO fgedu_test (name, value) VALUES (CONCAT(‘test_’, i), i);
SET i = i + 1;
END WHILE;
END //
MariaDB [fgedudb]> DELIMITER;
MariaDB [fgedudb]> CALL insert_large_data();
Query OK, 1 row affected (8.45 sec)
# 测试查询性能
MariaDB [fgedudb]> EXPLAIN SELECT * FROM fgedu_test WHERE id BETWEEN 100000 AND 100100;
+——+————-+———–+——-+—————+———+———+——+——+————-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+——+————-+———–+——-+—————+———+———+——+——+————-+
| 1 | SIMPLE | fgedu_test | range | PRIMARY | PRIMARY | 4 | NULL | 101 | Using where |
+——+————-+———–+——-+—————+———+———+——+——+————-+
1 row in set (0.00 sec)
MariaDB [fgedudb]> SELECT COUNT(*) FROM fgedu_test;
+———-+
| COUNT(*) |
+———-+
| 200000 |
+———-+
1 row in set (0.04 sec)
风哥提示:安全开发是防止SQL注入的第一道防线

Part05-风哥经验总结与分享

5.1 编译常见问题与解决

  • 依赖包缺失:使用yum安装缺失的依赖
  • 编译失败:检查错误信息,针对性解决
  • 内存不足:增加系统内存或使用swap
  • 磁盘空间不足:确保有足够的临时空间

5.2 参数配置最佳实践

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息