运维开发宝典025-MySQL01数据库的安装和配置



大家好,我是云计算磊哥,从业20年的IT老鸟。运维培训15年,总结了一套从入门到精通的全运维开发宝典手册。准备用300天时间写一套博文,手把手从安装软件讲起,从行业到产品,从过去到未来,从理论到操作,从视频到文档工具,一站式。从零基础入门到20k运维开发工程师岗位诸多就业问题。多方位全方面的给你讲清楚云计算这个行业该如何做。关注我。后续AI大模型开发课程更精彩。


开源数据库MySQL DBA运维实战 部署

1 前言
1.1 数据库由来

1 人工管理阶段。(过去)

2 文件系统阶段(近代)

3 数据库系统管理阶段(目前)

1.2 数据库能做什么?

存储数据,会话,账户注册信息。

1.3 阶段概述

1 安装部署(RPM,源码)

2 备份恢复(数据损失最低)

3 主从复制(减轻单点服务器的压力和可靠性)

4 读写分离

5 HA

6 分布式数据库

7 压力测试

8 性能优化

9 自动化运维

专业分类:运维

1.4 分类

关系型

非关系型

1.5 数据库-系统结构
  1. 数据库系统 DBS

A.数据库管理系统(DataBase Management System, DBMS)

B.DBA:工程师

  1. SQL语言(结构化查询语言)

    SQL(Structured Query Language 即结构化查询语言)

    A. DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程、函数, CREATE DROP ALTER //开发人员

    B. DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE //开发人员

    C. DQL语句 数据库查询语言: 查询数据 SELECT

    D. DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

  2. 数据访问技术

    A. ODBC PHP <.php>

    B. JDBC JAVA <.jsp>

    3.ASP.NET<c#>

1.6 版本

5.7.19

2 部署
2.1 地址

www.mysql.com

www.oracle.com

2.2 Select Platform

Yum Repository 二进制 rpm mysql57-community-release-el7-9.noarch.rpm

Generic 二进制 预编译  mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz

Source Code 源码包安装 mysql-5.7.19.tar.gz

2.3 YUM安装

特点

1 无需编译,快

2 无法个性化设置

3 无法增删安装的工具

设置资源

a.请适当调整内存空间

b.请关闭selinux

获取软件包,下YUM库

1 通过下载库得到的RPM包或者地址,使用RPM命令安装即可。

shell 复制代码
rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

2 刷新YUM仓库

shell 复制代码
# yum makecache

3 校验rpm完整性

shell 复制代码
# md5sum mysql57-community-release-el7-11.noarch.rpm
shell 复制代码
[root@localhost ~]# md5sum mysql57-community-release-el7-11.noarch.rpm 
c070b754ce2de9f714ab4db4736c7e05  mysql57-community-release-el7-11.noarch.rpm

4 YUM安装mysql-server

shell 复制代码
[root@localhost ~]# yum list | grep mysql-community-server
mysql-community-server.x86_64           5.7.20-1.el7                   mysql57-community
shell 复制代码
[root@localhost ~]# yum install -y mysql-community-server.x86_64

5 启动

shell 复制代码
[root@localhost ~]# systemctl start mysqld
shell 复制代码
[root@localhost ~]# systemctl enable mysqld

6 登陆mysql

shell 复制代码
[root@localhost ~]# grep 'password' /var/log/mysqld.log 
2017-08-13T15:14:31.176905Z 1 [Note] A temporary password is generated for root@localhost: k12zPB1r;2Ta
[root@localhost ~]# mysql -u root -p'k12zPB1r;2Ta'

修改密码

shell 复制代码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'QianFeng@123';
2.4 预编译

特点

a 通用性强

b 可以调整部分设置

基础环境

shell 复制代码
[root@localhost ~] #yum install libaio
软件包 libaio-0.3.109-13.el7.x86_64 已安装并且是最新版本

用户组

shell 复制代码
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -r -g mysql -s /bin/false mysql
[root@localhost ~]# cd /usr/local

安装

shell 复制代码
[root@mysql1 local]# tar xf  mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
[root@mysql1 local]# ln -s mysql-5.7.19-linux-glibc2.12-x86_64 mysql

初始化

shell 复制代码
设置mysql的启动参数:用户、组、权限、工作目录、配置文件
# cd mysql
# mkdir mysql-files
# chmod 750 mysql-files
# chown -R mysql.mysql  .
# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

注意保留初始密码,如遗忘密码,可观察后续操作(重新初始化步骤) SiZt#ueiP3*%

# bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
# chown -R root .
# chown -R mysql data mysql-files

建立MySQL配置文件my.cnf(如果有,请备份)

shell 复制代码
[root@mysql1 mysql]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

启动MySQL

shell 复制代码
# cp support-files/mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on
# service mysqld start
# ps aux |grep mysqld
# bin/mysql -uroot -p'SiZt#ueiP3*%'
2.5 源码包

特点

复制代码
源码安装

与二进制发行版本相比,如果我们选择了通过源代码进行安装,那么在安装过程中我们能够对MySQL

所做的调整将会更多更灵活一些。因为通过源代码编译我们可以:

a) 针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码;

b) 根据不同的软件平台环境调整相关的编译参数;

c) 针对我们特定应用场景选择需要什么组件不需要什么组件;

d) 根据我们的所需要存储的数据内容选择只安装我们需要的字符集;

e) 同一台主机上面可以安装多个MySQL;

f) 等等其他一些可以根据特定应用场景所作的各种调整。

在源码安装给我们带来更大灵活性的同时,同样也给我们带来了可能引入的隐患:

a) 对编译参数的不够了解造成编译参数使用不当可能使编译出来的二进制代码不够稳定;

b) 对自己的应用环境把握失误而使用的优化参数可能反而使系统性能更差;

c) 还有一个并不能称之为隐患的小问题就是源码编译安装将使安装部署过程更为复杂,所花费的时间更长;

基础环境

shell 复制代码
# yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake
# wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

安装mysql

复制代码
# groupadd mysql
# useradd -r -g mysql -s /bin/false mysql
# tar xvf mysql-5.7.19.tar.gz  注意目录权限
# cd mysql-5.7.19
[root@mysql3 mysql-5.7.19]# pwd
/root/mysql-5.7.19
[root@mysql3 mysql-5.7.19]# tar xf  boost_1_59_0.tar.gz		注意包的位置

配置

shell 复制代码
[root@mysql-5.7.17 ~]# cmake . \
-DWITH_BOOST=boost_1_59_0/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DINSTALL_MANDIR=/usr/share/man \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1

编译

shell 复制代码
# make 		等待

安装

shell 复制代码
# make install

初始化

复制代码
# cd /usr/local/mysql
# mkdir mysql-files
# chown -R mysql.mysql .		注意目录名称
# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data	保存临时密码。
	x/dwiQ2<l:hb
# bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

建立MySQL配置文件my.cnf

shell 复制代码
[root@mysql1 mysql]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

启动MySQL

shell 复制代码
# cp support-files/mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld	添加mysql服务
# chkconfig mysqld on	开机自动启动mysql服务
# service mysqld start
# ps aux |grep mysqld
#/usr/local/mysql/bin/mysql -u root -p'x/dwiQ2<l:hb'		临时密码

配置新密码

shell 复制代码
/usr/local/mysql/bin/mysqladmin -u root -p 'x/dwiQ2<l:hb' password 'QinFeng@123'
3 存储引擎
3.1 什么是存储引擎

Storage Engine的存在,能解决并发访问等问题,也能提高数据增删改查、数据压缩存储的效率。

3.2 MySQL常用存储引擎

在MySQL中使用"show engines"命令,能看到MySQL常用的Storage Engine有"InnoDB","MEMORY","MyISAM"等。缺省用"InnoDB"。 MySQL中每个表都能设置自己的Storage Engine。

不同的Storage Engine,对数据的组织方式不一样,下表简单列举了他们的区别

(1)MyISAM:选择密集型(筛选大量数据时非常迅速)、插入密集型的表(管理邮件或Web服务器日志数据);

(2)MEMORY:数据量小,且被频繁访问,内存型数据库RAM;

(3)InnoDB:需要事务支持,并且有较高的并发读取频率。默认类型。

创建 3 张表,分别用 3 种引擎

sql 复制代码
-- 1. 用户表(必须安全、支持事务)→ InnoDB(默认)
CREATE TABLE user (
    id INT PRIMARY KEY,
    name VARCHAR(20)
) ENGINE=InnoDB;

-- 2. 日志表(只插入、大量查询)→ MyISAM
CREATE TABLE log (
    id INT PRIMARY KEY,
    content TEXT
) ENGINE=MyISAM;

-- 3. 临时缓存表(速度快、重启消失)→ MEMORY
CREATE TABLE temp_cache (
    id INT PRIMARY KEY,
    info VARCHAR(50)
) ENGINE=MEMORY;

查看表用了什么引擎

复制代码
SHOW TABLE STATUS LIKE 'user';
SHOW TABLE STATUS LIKE 'log';
SHOW TABLE STATUS LIKE 'temp_cache';

最关键的区别演示:事务(只有 InnoDB 支持)

  1. InnoDB 可以回滚(撤销操作)

    复制代码
    START TRANSACTION;  -- 开始事务
    INSERT INTO user VALUES(1,'张三');
    ROLLBACK;           -- 撤销!
    SELECT * FROM user; -- 数据没了 ✅
  2. MyISAM 不支持事务

    复制代码
    START TRANSACTION;
    INSERT INTO log VALUES(1,'测试日志');
    ROLLBACK;
    SELECT * FROM log;  -- 数据还在!无法撤销 ❌

这就是引擎最核心的区别

真实业务怎么选?

表用途 推荐引擎
用户、订单、支付 InnoDB
日志、统计报表 MyISAM
临时缓存、会话 MEMORY

99% 的业务直接用 InnoDB 就够了。

总结

  1. 存储引擎 = 表的存储方式 / 底层规则
  2. InnoDB:支持事务、并发强、默认
  3. MyISAM:只读快、不支持事务
  4. MEMORY:内存存储、重启消失
  5. 一个库里不同表可以用不同引擎

mysql阶段csdn配套视频 https://edu.csdn.net/course/detail/40864

相关推荐
Dxy12393102161 小时前
BAT 窗口不输出日志:三种静默方案,从半隐藏到完全消失
linux·运维·服务器
kida_yuan1 小时前
不想花钱写了一个 Flask 知识库
运维·python
Tian_Hang1 小时前
Linux基础知识(一)
linux·运维·服务器
Bert.Cai1 小时前
SQLPlus简介
数据库·oracle
超梦dasgg2 小时前
Redis ZSet(有序集合)底层数据结构
数据结构·数据库·redis
渣渣盟2 小时前
MySQL DQL全面解析:从入门到精通
数据库·sql·mysql·dql
这个DBA有点耶2 小时前
InnoDB架构深潜:从磁盘到内存,一条SQL的生命周期
数据库·mysql·程序员
小小龙学IT4 小时前
Drizzle ORM:TypeScript 生态中冉冉升起的数据库工具链引言
javascript·数据库·typescript
江华森6 小时前
操作系统与 Linux 内核实战教程
linux·运维·服务器