1. 硬件环境要求
MySQL是关系型数据库,对硬件环境有一定要求,特别是内存和CPU。更多学习教程www.fgedu.net.cn
– 最小内存:8GB(测试环境),生产环境建议32GB以上
– CPU:至少4核心,生产环境建议8核心以上
– 磁盘:SSD存储,数据盘至少500GB(几百GB数据量需要更大)
– 网络:千兆网卡,生产环境建议万兆网卡
# 检查内存大小
# free -h
total used free shared buff/cache available
Mem: 64G 2.1G 60G 8.5M 1.8G 61G
Swap: 32G 0B 32G
# 检查CPU核心数
# nproc
8
# 检查磁盘空间
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 32G 0 32G 0% /dev
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 8.5M 32G 1% /run
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/sda1 50G 15G 36G 30% /
/dev/sdb1 1.0T 20G 980G 2% /mysql
# 检查网络状态
# ethtool eth0 | grep -i speed
Speed: 1000Mb/s
2. 操作系统准备
在安装MySQL之前,需要对操作系统进行准备,包括关闭SELinux、防火墙配置、安装依赖包等。学习交流加群风哥微信: itpux-com
# cat /etc/kylin-release
Kylin Linux Advanced Server release V10 (Tercel)
# 检查内核版本
# uname -r
4.19.90-24.4.v2101.ky10.x86_64
# 关闭SELinux
# vi /etc/selinux/config
SELINUX=disabled
# 使SELinux配置生效
# setenforce 0
# 检查SELinux状态
# getenforce
Disabled
# 关闭防火墙(生产环境建议开放特定端口)
# systemctl stop firewalld
# systemctl disable firewalld
# 安装依赖包
# yum install -y libaio numactl libnuma-devel perl-Data-Dumper
3. MySQL安装步骤
本文以MySQL 8.0.28为例,从官方网站下载安装包进行安装。
# cd /tmp
# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28-el7-x86_64.tar.gz
# 解压安装包
# tar -zxvf mysql-8.0.28-el7-x86_64.tar.gz
# 移动到安装目录
# mv mysql-8.0.28-el7-x86_64 /mysql
# 创建符号链接
# ln -s /mysql/mysql-8.0.28-el7-x86_64 /mysql/current
# 创建MySQL用户和组
# groupadd -g 27018 mysql
# useradd -u 27018 -g mysql -m -d /mysql mysql
# 创建数据目录
# mkdir -p /mysql/data
# 设置目录权限
# chown -R mysql:mysql /mysql
# chmod 755 /mysql/data
# cd /mysql/current
# bin/mysqld –initialize-insecure –user=mysql –basedir=/mysql/current –datadir=/mysql/data
# 复制配置文件
# cp support-files/my-default.cnf /mysql/current/my.cnf
# 编辑配置文件
# vi /mysql/current/my.cnf
# 配置文件内容
[mysqld]
basedir=/mysql/current
datadir=/mysql/data
port=3306
socket=/mysql/mysql.sock
user=mysql
bind-address=192.168.1.51
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 日志设置
log-error=/mysql/log/mysql-error.log
slow-query-log=1
slow-query-log-file=/mysql/log/mysql-slow.log
long-query-time=1
# 性能设置
max_connections=2000
innodb_buffer_pool_size=48G
innodb_log_file_size=2G
innodb_flush_method=O_DIRECT
# 安全设置
symbolic-links=0
skip-external-locking
[client]
socket=/mysql/mysql.sock
# mkdir -p /mysql/log
# chown -R mysql:mysql /mysql/log
4. 配置文件优化
MySQL的配置文件对性能和稳定性有重要影响,需要根据硬件环境进行优化。学习交流加群风哥QQ113257174
# vi /mysql/current/my.cnf
# 优化配置
[mysqld]
# 基本配置
basedir=/mysql/current
datadir=/mysql/data
port=3306
socket=/mysql/mysql.sock
user=mysql
bind-address=192.168.1.51
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 日志设置
log-error=/mysql/log/mysql-error.log
slow-query-log=1
slow-query-log-file=/mysql/log/mysql-slow.log
long-query-time=1
general-log=0
general-log-file=/mysql/log/mysql-general.log
# 性能设置
max_connections=2000
max_connect_errors=1000000
wait_timeout=300
interactive_timeout=300
# InnoDB设置
innodb_buffer_pool_size=48G
innodb_buffer_pool_instances=8
innodb_log_file_size=2G
innodb_log_files_in_group=2
innodb_flush_method=O_DIRECT
innodb_flush_log_at_trx_commit=1
innodb_file_per_table=1
innodb_max_dirty_pages_pct=75
innodb_io_capacity=2000
innodb_io_capacity_max=4000
# MyISAM设置
key_buffer_size=256M
myisam_sort_buffer_size=128M
# 连接设置
max_allowed_packet=64M
net_buffer_length=16384
# 查询缓存设置
query_cache_type=0
query_cache_size=0
# 安全设置
symbolic-links=0
skip-external-locking
skip-name-resolve
[client]
socket=/mysql/mysql.sock
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
5. 服务管理
为了方便管理MySQL服务,我们需要创建系统服务文件。更多学习教程公众号风哥教程itpux_com
# vi /etc/systemd/system/mysql.service
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
PIDFile=/mysql/data/fgedudb01.pid
ExecStart=/mysql/current/bin/mysqld –defaults-file=/mysql/current/my.cnf
ExecStop=/mysql/current/bin/mysqladmin -u root -p shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# 启动MySQL服务
# systemctl start mysql
# 查看服务状态
# systemctl status mysql
● mysql.service – MySQL Server
Loaded: loaded (/etc/systemd/system/mysql.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2026-03-31 11:30:00 CST; 1min ago
Main PID: 12345 (mysqld)
Tasks: 38
Memory: 2.0G
CGroup: /system.slice/mysql.service
└─12345 /mysql/current/bin/mysqld –defaults-file=/mysql/current/my.cnf
# 设置开机自启
# systemctl enable mysql
Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /etc/systemd/system/mysql.service.
6. 性能调优
MySQL的性能调优包括操作系统参数调优和MySQL配置调优两个方面。
# 编辑sysctl.conf文件
# vi /etc/sysctl.conf
# 添加以下参数
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
vm.overcommit_memory = 1
vm.swappiness = 0
fs.file-max = 6815744
fs.aio-max-nr = 1048576
# 使参数生效
# sysctl -p
# vi /etc/security/limits.conf
# 添加以下内容
* soft nofile 65535
* hard nofile 65535
mysql soft nofile 65535
mysql hard nofile 65535
– net.core.somaxconn设置为65535,提高TCP连接队列长度
– vm.overcommit_memory设置为1,允许MySQL使用更多内存
– vm.swappiness设置为0,减少使用swap
– 文件描述符限制设置为65535,支持更多连接
– innodb_buffer_pool_size设置为物理内存的70%-80%
7. 备份策略
MySQL的备份策略包括mysqldump命令和物理备份,需要定期进行备份。from:www.itpux.com
# mkdir -p /backup/mysql
# 编写备份脚本
# vi /backup/mysql/backup.sh
#!/bin/bash
# 备份时间
BACKUP_TIME=$(date +”%Y-%m-%d-%H-%M-%S”)
# 备份目录
BACKUP_DIR=”/backup/mysql/${BACKUP_TIME}”
# 创建备份目录
mkdir -p ${BACKUP_DIR}
# 执行备份
/mysql/current/bin/mysqldump –all-databases –single-transaction –master-data=2 –flush-logs –triggers –routines –events -u root -p”fgedudb123″ > ${BACKUP_DIR}/all_databases.sql
# 保留最近7天的备份
find /backup/mysql -type d -mtime +7 -exec rm -rf {} \;
# 输出备份信息
echo “MySQL backup completed: ${BACKUP_DIR}”
# chmod +x /backup/mysql/backup.sh
# 添加到定时任务
# crontab -e
# 每天凌晨2点执行备份
0 2 * * * /backup/mysql/backup.sh >> /backup/mysql/backup.log 2>&1
8. 安全设置
MySQL的安全设置包括密码设置、用户管理、权限控制等。
# /mysql/current/bin/mysql -u root
# 设置root密码
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘fgedudb123’;
Query OK, 0 rows affected (0.00 sec)
# 创建远程连接用户
mysql> CREATE USER ‘root’@’%’ IDENTIFIED BY ‘fgedudb123’;
Query OK, 0 rows affected (0.00 sec)
# 授权
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
# 创建应用用户
mysql> CREATE DATABASE fgedudb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER ‘fgedu’@’%’ IDENTIFIED BY ‘fgedudb123’;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON fgedudb.* TO ‘fgedu’@’%’;
Query OK, 0 rows affected (0.00 sec)
# 刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
# 退出MySQL
mysql> exit
– 设置强密码,定期更换
– 限制用户的访问权限,遵循最小权限原则
– 启用SSL加密传输
– 定期更新MySQL版本,修复安全漏洞
– 开启防火墙,限制MySQL端口的访问
9. 安装验证
安装完成后,需要验证MySQL服务是否正常运行。
# /mysql/current/bin/mysql -u root -p
# 测试命令
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sys |
| fgedudb |
+——————–+
5 rows in set (0.00 sec)
mysql> use fgedudb;
Database changed
mysql> create table fgedu_users (
-> id int primary key auto_increment,
-> name varchar(50) not null,
-> age int,
-> email varchar(100)
-> ) engine=InnoDB default charset=utf8mb4;
Query OK, 0 rows affected (0.01 sec)
mysql> insert into fgedu_users (name, age, email) values (‘测试用户’, 25, ‘test@fgedu.net.cn’);
Query OK, 1 row affected (0.00 sec)
mysql> select * from fgedu_users;
+—-+———–+—–+———————+
| id | name | age | email |
+—-+———–+—–+———————+
| 1 | 测试用户 | 25 | test@fgedu.net.cn |
+—-+———–+—–+———————+
1 row in set (0.00 sec)
mysql> status;
————–
/mysql/current/bin/mysql Ver 8.0.28 for Linux on x86_64 (MySQL Community Server – GPL)
Connection id: 8
Current database: fgedudb
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 8.0.28 MySQL Community Server – GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /mysql/mysql.sock
Binary data as: Hexadecimal
Uptime: 3600 sec
Threads: 2 Questions: 15 Slow queries: 0 Opens: 131 Flush tables: 3 Open tables: 48 Queries per second avg: 0.004
————–
mysql> exit
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
