一、MySQL初步认识
1. 什么是MySQL
MySQL 是一个开源的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言------结构化查询语言(SQL)进行数据库管理。
text
MySQL 特点:
├── 开源免费(也有商业版)
├── 高性能、高可靠性
├── 跨平台支持(Windows、Linux、macOS)
├── 支持多种存储引擎
├── 支持事务处理
├── 支持主从复制
├── 支持分区和分表
└── 提供丰富的API接口
2. 数据库基本概念
sql
-- 数据库术语对照
MySQL术语 → 说明
----------------------------------------
数据库(Database) → 存储数据的容器
表(Table) → 数据的矩阵结构
行(Row) → 一条记录
列(Column) → 一个字段
主键(Primary Key) → 唯一标识一条记录
外键(Foreign Key) → 表与表之间的关联
索引(Index) → 提高查询速度
视图(View) → 虚拟表
存储过程(Procedure) → 预编译的SQL语句
触发器(Trigger) → 自动执行的SQL
3. MySQL版本发展
text
MySQL版本历史:
5.5 (2010年) → InnoDB成为默认引擎
5.6 (2013年) → 全文索引、性能提升
5.7 (2015年) → JSON支持、GIS支持
8.0 (2018年) → 窗口函数、CTE、角色管理
8.1+ (2023年) → 持续更新,性能优化
版本选择建议:
├── 新项目:MySQL 8.0 或更高
├── 旧项目兼容:MySQL 5.7
├── 生产环境:选择最新稳定版
└── 学习环境:8.0 社区版
4. MySQL与MariaDB关系
text
MySQL (1995) - 被Sun收购 (2008) - 被Oracle收购 (2010)
↓
MariaDB (2009) - MySQL创始人创建,完全兼容MySQL
↓
分支关系:
├── MySQL:Oracle公司维护
├── MariaDB:社区维护
├── Percona Server:Percona公司维护
└── 兼容性:MariaDB兼容MySQL,可无缝切换
二、MySQL应用场景
1. 典型应用场景
text
1. Web网站
├── 电商网站:用户、商品、订单数据
├── 内容管理:文章、分类、评论
├── 社交平台:用户关系、动态
└── 论坛/BBS:帖子、回复
2. 企业应用
├── ERP系统
├── CRM系统
├── OA系统
└── 进销存管理
3. 数据分析
├── 数据仓库
├── 日志分析
└── 商业智能
4. 嵌入式应用
├── 移动APP
├── 桌面软件
└── 物联网设备
2. 适用规模
sql
-- MySQL可以支持的规模
单表记录数:百万到亿级
数据库大小:GB到TB级
并发连接:数百到数千
读写比例:读多写少
-- 性能指标(参考)
每秒查询数(QPS):数千到数万
每秒事务数(TPS):数百到数千
响应时间:毫秒级
三、Linux环境安装MySQL
1. 系统要求检查
bash
# 1. 检查操作系统
cat /etc/os-release
uname -a
# 2. 检查内存(推荐至少1GB)
free -h
# 3. 检查磁盘空间(推荐至少10GB)
df -h
# 4. 检查端口(3306是否被占用)
netstat -tlnp | grep 3306
ss -tlnp | grep 3306
# 5. 检查防火墙
systemctl status firewalld
iptables -L -n
# 6. 关闭SELinux(可选)
getenforce
setenforce 0 # 临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 永久关闭
2. 安装方式选择
bash
# MySQL安装方式对比
1. 包管理器安装:简单、易维护(yum/apt)
2. 官方仓库安装:版本新、更新方便
3. 二进制安装:灵活、可定制
4. 源码编译安装:高度定制、性能优化
5. Docker安装:快速部署、隔离性好
# 本文主要介绍前两种方式
3. CentOS/RHEL系统安装
3.1 使用官方YUM仓库安装
bash
# 1. 添加MySQL官方YUM仓库
# CentOS 7
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
# CentOS 8
yum install -y https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm
# CentOS 9
yum install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
# 2. 查看可用的MySQL版本
yum repolist all | grep mysql
# 3. 选择版本(默认8.0,如需5.7请切换)
# 禁用8.0,启用5.7
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
# 4. 安装MySQL
yum install -y mysql-community-server
# 5. 安装完成后查看版本
mysql --version
3.2 使用EPEL仓库安装(MariaDB)
bash
# 1. 添加EPEL仓库
yum install -y epel-release
# 2. 安装MariaDB
yum install -y mariadb-server mariadb
# 3. 启动服务
systemctl start mariadb
systemctl enable mariadb
3.3 二进制安装(通用Linux)
bash
# 1. 下载MySQL二进制包
cd /usr/local/src
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
# 2. 解压
tar -xvf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql
# 3. 创建mysql用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 4. 创建数据目录
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql
# 5. 初始化数据库
cd /usr/local/mysql
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
# 记录初始密码(显示在输出中)
# [Note] A temporary password is generated for root@localhost: xxxxxxxx
# 6. 配置文件
cat > /etc/my.cnf << 'EOF'
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8mb4
[mysql]
prompt="\\u@\\h [\\d]> "
no-auto-rehash
default-character-set = utf8mb4
[mysqld]
user = mysql
port = 3306
basedir = /usr/local/mysql
datadir = /data/mysql
socket = /tmp/mysql.sock
pid-file = /data/mysql/mysql.pid
log-error = /data/mysql/error.log
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
# 连接设置
max_connections = 500
max_connect_errors = 100
wait_timeout = 600
interactive_timeout = 28800
# 存储引擎
default-storage-engine = InnoDB
# InnoDB设置
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
# 字符集
skip-character-set-client-handshake
EOF
# 7. 设置systemd服务
cat > /etc/systemd/system/mysqld.service << 'EOF'
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/data/mysql/mysql.pid
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecReload=/bin/kill -HUP $MAINPID
TimeoutSec=300
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
# 8. 添加环境变量
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source /etc/profile
# 9. 启动服务
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
4. Ubuntu/Debian系统安装
4.1 使用APT仓库安装
bash
# 1. 更新包索引
apt update
# 2. 安装MySQL 8.0(Ubuntu 20.04+默认)
apt install -y mysql-server
# 3. 或者添加MySQL官方APT仓库
# 下载APT仓库配置包
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
# 安装仓库配置(会提示选择版本)
dpkg -i mysql-apt-config_0.8.24-1_all.deb
# 更新包索引
apt update
# 安装MySQL
apt install -y mysql-server
# 4. 安装MariaDB
apt install -y mariadb-server
4.2 使用Percona仓库
bash
# 添加Percona仓库
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
dpkg -i percona-release_latest.generic_all.deb
apt update
# 安装Percona Server
apt install -y percona-server-server
5. Docker安装MySQL
bash
# 1. 安装Docker
# CentOS
yum install -y docker-ce
# Ubuntu
apt install -y docker.io
# 2. 启动Docker
systemctl start docker
systemctl enable docker
# 3. 拉取MySQL镜像
docker pull mysql:8.0
docker pull mysql:5.7
# 4. 运行MySQL容器
# 简单运行
docker run -d \
--name mysql8 \
-e MYSQL_ROOT_PASSWORD=root123 \
-p 3306:3306 \
mysql:8.0
# 带数据卷的完整运行
docker run -d \
--name mysql8 \
--restart always \
-e MYSQL_ROOT_PASSWORD=root123 \
-e MYSQL_DATABASE=testdb \
-e MYSQL_USER=testuser \
-e MYSQL_PASSWORD=testpass \
-p 3306:3306 \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-v /data/mysql/logs:/var/log/mysql \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--max_connections=500
# 5. 进入容器
docker exec -it mysql8 mysql -uroot -p
# 6. 查看日志
docker logs mysql8
# 7. 备份数据库
docker exec mysql8 mysqldump -uroot -proot123 --all-databases > backup.sql
# 8. Docker Compose方式
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql8
restart: always
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: appdb
MYSQL_USER: appuser
MYSQL_PASSWORD: apppass
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/var/log/mysql
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--max_connections=500
EOF
docker-compose up -d
四、Windows系统安装MySQL
1. 下载MySQL安装包
powershell
# 1. 访问MySQL官网下载
# https://dev.mysql.com/downloads/mysql/
# 选择版本:
# Windows (x86, 64-bit), MSI Installer
# 或下载ZIP压缩包
# 2. 使用winget安装(Windows 10/11)
winget search mysql
winget install MySQL.Server
2. MSI安装步骤
powershell
# 安装步骤:
1. 双击下载的MSI安装包
2. 选择安装类型:
- Developer Default(开发默认)
- Server only(仅服务器)
- Client only(仅客户端)
- Full(全部安装)
- Custom(自定义)
3. 选择安装路径(建议:C:\Program Files\MySQL\MySQL Server 8.0)
4. 配置MySQL服务器
- 配置类型:Development Computer(开发机)
- 端口:3306
- 认证方式:Use Strong Password Encryption
5. 设置root密码(必须记住!)
6. 配置Windows Service
- Service Name: MySQL80
- 启动类型:Automatic
7. 应用配置并完成安装
3. ZIP包安装(免安装版)
powershell
# 1. 解压ZIP包到指定目录
# 例如:C:\mysql-8.0.33-winx64
# 2. 创建配置文件 my.ini
# C:\mysql-8.0.33-winx64\my.ini
[client]
port=3306
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
prompt="\\u@\\h [\\d]> "
[mysqld]
# 基础设置
port=3306
basedir=C:/mysql-8.0.33-winx64
datadir=C:/mysql-8.0.33-winx64/data
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 连接设置
max_connections=500
max_connect_errors=100
# 存储引擎
default-storage-engine=INNODB
# InnoDB设置
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=1
# 日志
log-error=error.log
slow_query_log=1
slow_query_log_file=slow.log
long_query_time=2
# 3. 初始化数据库
# 以管理员身份运行cmd
cd C:\mysql-8.0.33-winx64\bin
mysqld --initialize --console
# 记录初始密码(显示在输出中)
# 4. 安装Windows服务
mysqld --install MySQL80
# 5. 启动服务
net start MySQL80
# 6. 登录并修改密码
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
# 7. 添加到系统PATH
# 将 C:\mysql-8.0.33-winx64\bin 添加到系统环境变量 Path 中
五、MySQL初始化配置
1. 启动MySQL服务
bash
# CentOS/RHEL
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
# Ubuntu
systemctl start mysql
systemctl enable mysql
# 通用
service mysql start
service mysql status
# 查看进程
ps aux | grep mysql
# 查看端口
netstat -tlnp | grep 3306
2. 获取初始密码
bash
# MySQL 5.7+ 会生成随机初始密码
# CentOS/RHEL
grep 'temporary password' /var/log/mysqld.log
# Ubuntu
grep 'temporary password' /var/log/mysql/error.log
# 或查看完整日志
cat /var/log/mysqld.log | grep password
# 如果没有密码,可能需要空密码登录
mysql -u root
3. 安全配置向导
bash
# 运行安全配置脚本
mysql_secure_installation
# 交互过程:
# 1. 输入当前root密码
# 2. 是否修改root密码? (y/n)
# 3. 输入新密码
# 4. 是否移除匿名用户? (y/n) -> y
# 5. 是否禁止root远程登录? (y/n) -> y
# 6. 是否移除test数据库? (y/n) -> y
# 7. 是否重新加载权限表? (y/n) -> y
# 示例输出:
Enter password: ****
New password: ********
Re-enter new password: ********
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
All done!
4. 手动安全配置
sql
-- 登录MySQL
mysql -u root -p
-- 1. 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
-- 2. 删除匿名用户
DELETE FROM mysql.user WHERE User='';
-- 3. 禁止root远程登录
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- 4. 删除测试数据库
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
-- 5. 创建普通用户
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'AppPass123!';
CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPass123!';
-- 6. 授权
GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'%' WITH GRANT OPTION;
-- 7. 刷新权限
FLUSH PRIVILEGES;
-- 8. 查看用户
SELECT User, Host, authentication_string FROM mysql.user;
5. 配置文件优化
ini
# /etc/my.cnf 或 /etc/mysql/my.cnf
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set = utf8mb4
[mysql]
prompt="\\u@\\h [\\d]> "
no-auto-rehash
default-character-set = utf8mb4
[mysqld]
user = mysql
port = 3306
socket = /var/lib/mysql/mysql.sock
pid-file = /var/run/mysqld/mysqld.pid
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address = 0.0.0.0
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
skip-character-set-client-handshake
# 连接设置
max_connections = 500
max_connect_errors = 100
connect_timeout = 10
wait_timeout = 600
max_allowed_packet = 64M
interactive_timeout = 28800
# 缓冲区
key_buffer_size = 256M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
join_buffer_size = 2M
# 临时表
tmp_table_size = 64M
max_heap_table_size = 64M
# 表缓存
table_open_cache = 2048
table_definition_cache = 2048
# 线程缓存
thread_cache_size = 256
thread_stack = 256K
# 查询缓存(MySQL 8.0已移除)
# query_cache_type = 1
# query_cache_size = 64M
# query_cache_limit = 2M
# InnoDB设置
default-storage-engine = InnoDB
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_open_files = 2048
innodb_io_capacity = 2000
innodb_read_io_threads = 4
innodb_write_io_threads = 4
# 日志设置
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
# 二进制日志
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 100M
# 安全设置
local_infile = 0
skip_symbolic_links = yes
secure_file_priv = /var/lib/mysql-files
[mysqldump]
quick
quote-names
max_allowed_packet = 64M
六、验证安装
1. 基本验证
bash
# 1. 检查版本
mysql --version
# 输出示例:mysql Ver 8.0.33 for Linux on x86_64 (MySQL Community Server)
# 2. 查看服务状态
systemctl status mysqld
# 3. 查看进程
ps aux | grep mysql
# 4. 查看端口
netstat -tlnp | grep 3306
# 5. 测试登录
mysql -u root -p
# 输入密码后进入MySQL提示符
2. 执行简单SQL
sql
-- 登录后执行
mysql> SELECT VERSION();
mysql> SELECT NOW();
mysql> SELECT USER();
mysql> SELECT DATABASE();
-- 创建测试数据库
mysql> CREATE DATABASE testdb;
mysql> USE testdb;
-- 创建测试表
mysql> CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT,
department VARCHAR(50),
salary DECIMAL(10,2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入数据
mysql> INSERT INTO employees (name, age, department, salary) VALUES
('张三', 28, '技术部', 12000.00),
('李四', 32, '市场部', 10000.00),
('王五', 35, '技术部', 15000.00);
-- 查询数据
mysql> SELECT * FROM employees;
mysql> SELECT department, AVG(salary) as avg_salary FROM employees GROUP BY department;
-- 删除测试数据
mysql> DROP DATABASE testdb;
3. 性能测试
bash
# 1. 使用mysqlslap进行压力测试
mysqlslap --user=root --password --concurrency=50 --iterations=10 \
--query="SELECT * FROM mysql.user;" --create-schema=mysql
# 2. 查看数据库状态
mysql -e "SHOW STATUS LIKE '%connect%';"
mysql -e "SHOW STATUS LIKE '%thread%';"
# 3. 查看变量
mysql -e "SHOW VARIABLES LIKE '%buffer%';"
# 4. 查看进程列表
mysql -e "SHOW PROCESSLIST;"
4. 编写测试脚本
bash
#!/bin/bash
# mysql_test.sh - MySQL连接测试脚本
MYSQL_USER="root"
MYSQL_PASS="your_password"
MYSQL_HOST="localhost"
MYSQL_PORT="3306"
echo "MySQL连接测试"
echo "=============="
# 1. 测试网络连接
echo "1. 测试端口连通性..."
nc -zv $MYSQL_HOST $MYSQL_PORT 2>&1
if [ $? -eq 0 ]; then
echo " ✓ 端口可达"
else
echo " ✗ 端口不可达"
fi
# 2. 测试MySQL登录
echo "2. 测试MySQL登录..."
mysql -u$MYSQL_USER -p$MYSQL_PASS -h$MYSQL_HOST -P$MYSQL_PORT -e "SELECT 1" > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✓ 登录成功"
else
echo " ✗ 登录失败"
fi
# 3. 获取MySQL信息
echo "3. MySQL信息:"
mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SELECT VERSION() as Version, NOW() as CurrentTime, USER() as User\G"
# 4. 获取数据库列表
echo "4. 数据库列表:"
mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;"
# 5. 获取状态信息
echo "5. 关键状态指标:"
mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW STATUS LIKE 'Threads_connected';"
mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW STATUS LIKE 'Questions';"
mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW STATUS LIKE 'Slow_queries';"
echo "测试完成!"
七、MySQL常用命令
1. 服务管理命令
bash
# 启动
systemctl start mysqld
service mysql start
# 停止
systemctl stop mysqld
service mysql stop
# 重启
systemctl restart mysqld
service mysql restart
# 重载配置
systemctl reload mysqld
mysqladmin reload
# 查看状态
systemctl status mysqld
service mysql status
2. 连接管理命令
bash
# 本地连接
mysql -u root -p
mysql -u root -p123456
# 远程连接
mysql -u root -p -h 192.168.1.100 -P 3306
# 使用socket连接
mysql -u root -p -S /tmp/mysql.sock
# 执行单条命令
mysql -u root -p -e "SHOW DATABASES;"
# 执行SQL文件
mysql -u root -p < backup.sql
# 带配置文件连接
mysql --defaults-file=/etc/my.cnf -u root -p
3. 管理命令
bash
# 查看MySQL进程
ps aux | grep mysql
# 查看端口
netstat -tlnp | grep mysql
# 查看日志
tail -f /var/log/mysql/error.log
tail -f /var/log/mysql/slow.log
# 备份数据库
mysqldump -u root -p --all-databases > all.sql
mysqldump -u root -p --databases db1 db2 > dbs.sql
mysqldump -u root -p db1 table1 > table.sql
# 恢复数据库
mysql -u root -p < all.sql
mysql -u root -p db1 < backup.sql
# 优化表
mysqlcheck -u root -p --optimize --all-databases
# 修复表
mysqlcheck -u root -p --repair --all-databases
# 检查表
mysqlcheck -u root -p --check --all-databases
八、常见问题排查
1. 无法启动MySQL
bash
# 1. 查看错误日志
tail -f /var/log/mysql/error.log
# 2. 检查端口冲突
netstat -tlnp | grep 3306
# 3. 检查权限
chown -R mysql:mysql /var/lib/mysql
chmod -R 755 /var/lib/mysql
# 4. 检查配置文件语法
mysqld --verbose --help | grep -A 1 "Default options"
# 5. 尝试手动启动
mysqld --console --skip-grant-tables
2. 忘记root密码
bash
# 方法1:使用init-file(推荐)
# 创建密码重置文件
cat > /tmp/mysql-init << EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
FLUSH PRIVILEGES;
EOF
# 重启MySQL并加载init-file
systemctl stop mysqld
mysqld --init-file=/tmp/mysql-init &
# 或使用配置文件
echo "init-file=/tmp/mysql-init" >> /etc/my.cnf
systemctl start mysqld
# 方法2:跳过授权表
systemctl stop mysqld
mysqld_safe --skip-grant-tables &
mysql -u root
# 在MySQL中执行
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
quit
# 重启正常模式
systemctl restart mysqld
3. 连接问题
bash
# 1. 检查网络
ping 192.168.1.100
telnet 192.168.1.100 3306
# 2. 检查防火墙
iptables -L -n | grep 3306
firewall-cmd --list-all
# 3. 检查MySQL配置
grep bind-address /etc/my.cnf
# bind-address应该为0.0.0.0允许远程连接
# 4. 检查用户权限
mysql -e "SELECT User, Host FROM mysql.user WHERE User='root';"
# 5. 授权远程访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
九、卸载MySQL
1. CentOS/RHEL卸载
bash
# 1. 停止服务
systemctl stop mysqld
# 2. 查看已安装的包
rpm -qa | grep -i mysql
# 3. 卸载包
yum remove mysql-community-server mysql-community-client \
mysql-community-common mysql-community-libs
# 4. 删除配置文件和数据
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
rm -rf /var/log/mysql
# 5. 删除用户
userdel mysql
groupdel mysql
2. Ubuntu/Debian卸载
bash
# 1. 停止服务
systemctl stop mysql
# 2. 卸载包
apt purge mysql-server mysql-client mysql-common
apt autoremove
# 3. 删除配置文件和数据
rm -rf /var/lib/mysql
rm -rf /etc/mysql
rm -rf /var/log/mysql
# 4. 删除用户
deluser mysql
delgroup mysql
十、总结
MySQL安装方式对比
| 安装方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| YUM/APT | 简单、易维护 | 版本可能较旧 | 生产环境 |
| 官方仓库 | 版本新、更新方便 | 需添加仓库 | 生产环境 |
| 二进制 | 灵活、可定制 | 配置复杂 | 特殊需求 |
| 源码编译 | 高度优化 | 耗时、复杂 | 性能优化 |
| Docker | 快速、隔离 | 性能略差 | 开发测试 |
安装后检查清单
-
MySQL服务正常运行
-
root密码已修改
-
匿名用户已删除
-
禁止root远程登录
-
test数据库已删除
-
配置文件已优化
-
防火墙已配置
-
日志目录权限正确
-
备份策略已制定