MySQL的初步认识和安装

一、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数据库已删除

  • 配置文件已优化

  • 防火墙已配置

  • 日志目录权限正确

  • 备份策略已制定

相关推荐
电商API&Tina2 小时前
淘宝商品视频的采集需要注意哪些问题||item_video-获得淘宝商品视频
大数据·网络·数据库·人工智能·python·音视频
czlczl200209252 小时前
Redis集群批处理下的陷阱
数据库·redis·缓存
悲伤小伞2 小时前
6-MySQL_表的内置函数
数据库·mysql
wei_shuo2 小时前
数据库安全最后一公里:金仓SQL防火墙如何填平开发留下的注入坑
数据库·kingbase·金仓
深念Y2 小时前
Elasticsearch 8.11 + IK 分词器安装踩坑记录
大数据·数据库·elasticsearch·中文分词·jenkins·ki分词器
light blue bird2 小时前
MES/ERP 多维度整周期场景报表
数据库·ai大数据·大数据报表·多功能图表报表
颜颜颜yan_2 小时前
让数据库学会说“不“——金仓 SQL 防火墙深度解析
数据库·后端
m0_706653232 小时前
数据库与缓存操作策略:数据一致性与并发问题
java·数据库·缓存
JosieBook2 小时前
【数据库】金仓数据库智能SQL防护机制,实现99.99%异常语句精准拦截
数据库·sql