跳到主要内容

第1章 MySQL介绍

MySQL入门概述

1. 数据库技术发展与选型

数据库技术演进

RDBMS(第一代):以 Oracle、MySQL、SQL Server 为代表的关系型数据库,强调 ACID 特性和数据一致性。

NoSQL(第二代):以 Redis、MongoDB、Elasticsearch 为代表,解决海量数据存储和高并发访问需求。

NewSQL(第三代):融合 SQL 接口与分布式架构,代表产品包括 OceanBase、TiDB、Spanner,实现了横向扩展与强一致性的统一。

主流数据库产品对比

  1. 关系型数据库:MySQL(开源首选)、Oracle(企业级标准)、PostgreSQL(功能丰富)、SQL Server(Windows 生态)

  2. 非关系型数据库:Redis(缓存与消息队列)、MongoDB(文档存储)、Elasticsearch(全文检索)

  3. 云数据库服务:各大云厂商的 RDS 产品,提供托管式数据库服务

2. MySQL版本与发行版选择

MySQL 核心优势

MySQL 具备企业级的稳定性和性能表现,开源免费降低了总体拥有成本(TCO)。拥有成熟的社区生态和丰富的技术资源,运维简单,学习曲线平缓。广泛支持主流开发语言和操作系统,成为 LAMP/LNMP 技术栈的标准组件。

MySQL 发行版对比

Oracle MySQL:官方版本,分为社区版(免费)、企业版(商业支持)、集群版(NDB Cluster)

Percona Server:完全兼容 MySQL,增强了性能监控和管理特性

MariaDB:MySQL 创始人主导的分支,API 兼容但底层有较大改进

云厂商版本:阿里云 RDS for MySQL、腾讯云 TDSQL 等,提供增值服务和运维支持

版本选择策略

MySQL 5.6:选择 GA 发布 6-12 个月后的稳定版本,适合保守型企业

MySQL 5.7:目前主流选择,推荐 5.7.26 或更高版本,功能成熟稳定

MySQL 8.0:新项目首选,推荐 8.0.17 以上版本,性能提升显著

部署方式选择

下载渠道:官方归档站点

安装方法对比

二进制安装:推荐方式,部署快速,易于标准化

源码编译:可定制化编译参数,适合特殊需求

RPM/DEB 包:系统集成度高,适合批量部署

3. DBA职业发展路径

学习路线规划

基础阶段:MySQL 安装部署、基础管理、SQL 语句应用

进阶阶段:索引原理与执行计划、存储引擎特性、日志体系、备份恢复策略、主从复制架构

高级阶段:高可用架构设计、分布式架构实践、性能调优、MySQL 8.0 新特性应用

DBA 职业发展路径

初级 DBA:负责数据库安装部署、日常维护及简单故障处理。

中级 DBA:深入理解数据库体系结构,具备备份恢复、性能优化、高可用架构搭建和维护能力。

高级 DBA:精通架构设计,能够构建大规模分布式数据库系统,制定企业级数据库解决方案。

MySQL单实例安装

1. 环境准备与依赖

下载地址

https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz

创建目录

mkdir -p /data/soft
mkdir -p /data/mysql_3306/

清除遗留环境

yum remove mariadb* -y
rm -rf /var/lib/mysql*
rm -rf /etc/my.cnf

安装 MySQL 依赖包

yum install -y libaio-devel

创建 MySQL 普通用户并授权

useradd -s /sbin/nologin mysql
chown -R mysql:mysql /data/mysql_3306/
chown -R mysql:mysql /opt/mysql*

2. 二进制包安装步骤

下载并解压软件

cd /data/soft
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
tar zxf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz -C /opt/
mv /opt/mysql-5.7.28-linux-glibc2.12-x86_64 /opt/mysql-5.7.28
ln -s /opt/mysql-5.7.28 /opt/mysql

设置环境变量

echo 'export PATH=$PATH:/opt/mysql/bin' >>/etc/profile
source /etc/profile
mysql -V

3. 初始化与基础配置

初始化数据库

mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/mysql_3306

编辑 MySQL 配置文件

cat > /etc/my.cnf <<'EOF'
[mysql]
prompt=3306 [\\d]>

[mysqld]
basedir=/opt/mysql
datadir=/data/mysql_3306
socket=/tmp/mysql.sock
server-id=306
port=3306
log-error=/data/mysql_3306/mysql.err
[client]
socket=/tmp/mysql.sock
EOF

4. 服务启动与安全设置

准备启动脚本并启动数据库

cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i 's#^basedir=#basedir=/opt/mysql#g' /etc/init.d/mysqld
sed -i 's#^datadir=#datadir=/data/mysql_3306#g' /etc/init.d/mysqld
service mysqld start
netstat -tunpl | grep 3306

设置开机自启动

echo "/etc/init.d/mysqld start" >> /etc/rc.local
chmod +x /etc/rc.d/rc.local

配置 root 密码

mysqladmin -uroot password '123456'

登录 MySQL

mysql -u root -p123456

MySQL多实例部署

1. 多实例架构设计

MySQL 多实例介绍

MySQL多实例是在同一台物理服务器上运行多个独立的MySQL服务进程,每个实例拥有独立的端口、数据目录、配置文件和日志文件,实现资源隔离和服务独立。

2. 多实例安装配置

第二套实例(3307端口)

创建数据目录并更改授权

mkdir -p /data/mysql_3307
chown -R mysql:mysql /data/mysql_3307

初始化多实例数据

mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/mysql_3307

创建配置文件

cat > /data/mysql_3307/my.cnf <<'EOF'
[mysql]
prompt=3307 [\\d]>

[mysqld]
basedir=/opt/mysql
datadir=/data/mysql_3307
socket=/data/mysql_3307/mysql.sock
port=3307
server-id=307
log-error=/data/mysql_3307/mysql.err
[client]
socket=/data/mysql_3307/mysql.sock
EOF

创建多实例启动脚本

cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld3307
sed -i 's#^basedir=#basedir=/opt/mysql#g' /etc/init.d/mysqld3307
sed -i 's#^datadir=#datadir=/data/mysql_3307#g' /etc/init.d/mysqld3307
sed -i 's#conf=/etc/my.cnf#conf=/data/mysql_3307/my.cnf#g' /etc/init.d/mysqld3307
sed -i 's#$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null & #$bindir/mysqld_safe --defaults-file=/data/mysql_3307/my.cnf >/dev/null &#g' /etc/init.d/mysqld3307

启动多实例

service mysqld3307 start

第三套实例(3308端口)

# 重复上述步骤,将3307替换为3308,server-id改为308
mkdir -p /data/mysql_3308
chown -R mysql:mysql /data/mysql_3308
mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/mysql_3308

# 创建3308端口的配置文件和启动脚本(步骤同3307)

检查多实例

netstat -tulpn | grep mysql
ps -ef | grep mysql

多实例创建密码

mysqladmin -uroot password '123456' -S /data/mysql_3307/mysql.sock
mysqladmin -uroot password '123456' -S /data/mysql_3308/mysql.sock

登录多实例

mysql -uroot -p123456 -S /data/mysql_3307/mysql.sock
mysql -uroot -p123456 -S /data/mysql_3308/mysql.sock

3. systemd服务管理

创建 systemd 服务文件

3306端口实例:

cat > /etc/systemd/system/mysql3306.service <<'EOF'
[Unit]
Description=MySQL 3306 Instance
After=network.target

[Service]
Type=forking
ExecStart=/opt/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
ExecStop=/opt/mysql/bin/mysqladmin -uroot -p123456 shutdown
User=mysql
Group=mysql

[Install]
WantedBy=multi-user.target
EOF

3307端口实例:

cat > /etc/systemd/system/mysql3307.service <<'EOF'
[Unit]
Description=MySQL 3307 Instance
After=network.target

[Service]
Type=forking
ExecStart=/opt/mysql/bin/mysqld_safe --defaults-file=/data/mysql_3307/my.cnf
ExecStop=/opt/mysql/bin/mysqladmin -uroot -p123456 -S /data/mysql_3307/mysql.sock shutdown
User=mysql
Group=mysql

[Install]
WantedBy=multi-user.target
EOF

管理服务

# 重新加载 systemd
systemctl daemon-reload

# 启动服务
systemctl start mysql3306
systemctl start mysql3307

# 设置开机自启
systemctl enable mysql3306
systemctl enable mysql3307

# 查看服务状态
systemctl status mysql3306
systemctl status mysql3307

更新: 2024-12-01 17:44:15