第1章 MySQL介绍
MySQL入门概述
1. 数据库技术发展与选型
数据库技术演进
RDBMS(第一代):以 Oracle、MySQL、SQL Server 为代表的关系型数据库,强调 ACID 特性和数据一致性。
NoSQL(第二代):以 Redis、MongoDB、Elasticsearch 为代表,解决海量数据存储和高并发访问需求。
NewSQL(第三代):融合 SQL 接口与分布式架构,代表产品包括 OceanBase、TiDB、Spanner,实现了横向扩展与强一致性的统一。
主流数据库产品对比
-
关系型数据库:MySQL(开源首选)、Oracle(企业级标准)、PostgreSQL(功能丰富)、SQL Server(Windows 生态)
-
非关系型数据库:Redis(缓存与消息队列)、MongoDB(文档存储)、Elasticsearch(全文检索)
-
云数据库服务:各大云厂商的 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