题目
前言
什么叫DBA?
DBA:Database Administrator,数据库管理员,是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师分支。
任务职责:主要负责业务数据库从设计、测试到部署交付的全生命周期管理。
核心目标:保证数据库管理系统的稳定性、安全性、完整性和高性能。
什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
1、数据库产品简介
1.1 数据库类型介绍
RDBMS
关系数据库管理系统(Relational Database Management System)是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数据逻辑组织的系统。
主流产品:Oracle ,MySQL ,PG,MSSQL
NoSQL
最常见解释:non-relational, “Not Only SQL”也被很多人接受。NoSQL是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性,其拥护者们提倡运用非关系型的数据存储。
NoSQL有如下优点:易扩展,NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系(易于扩展原因)。
主流产品:MongoDB ,Redis ,ES
NewSQL
NewSQL是对各种新的可扩展/高性能数据库的简称,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性。
特点:无共享存储、多节点的并发控制、基于多副本做高可用和容灾、流量控制、分布式查询处理。
主流产品:TiDB,Spanner ,AliSQL ,OB ,PolarDB
1.2 数据库使用趋势与发展趋势
数据库使用趋势——》》》DB-ENGINES
数据库发展趋势:RDBMS —> NOSQL+RDBMS —> NoSQL(RDBMS),RDBMS(NoSQL)----> NewSQL (spanner TiDB PDB)
1.3 MySQL 企业主要版本选择
MySQL下载地址:MySQL Product Archives。建议先下载到本地再上传解压安装,因为下载有点慢。
版本号+发行时间,较稳定版本:
5.6 版本
5.6.34(2016.9.30)、5.6.36 (2017.3.18)、5.6.38(2017.9.13)、 5.6.40 (2018.2.26)
5.7 版本
5.7.18(2018.3.18)、5.7.20(2017.9.13)、5.7.24(2018.10.4) ,学习选择:5.7.26(2019.4.13)
8.0 版本
8.0.14(2019.12.20)、8.0.15(2019.1.26)、8.0.16(2019.4.13)
2、MySQL简介与安装
关系型数据库管理系统,瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。
最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS应用软件之一。
属于关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
2.1 MySQL 安装
二进制编译安装
1、下载
以下操作都是与5.7.26版本相关的,操作环境:CentOS 7.8
官网下载地址:https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar(建议先下载到本地再上传Linux安装,因为有点慢)
2、上传
上传命令:rz(先安装:yum install lrzsz -y)
[root@db01 /server/tools]# ls
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
3、解压软件
[root@db01 /server/tools]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64_2.tar
[root@CCTV /server/tools]#ls
mysql-5.7.26-linux-glibc2.12-x86_64_2.tar #刚才上传的
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz #我们想要的
mysql-test-5.7.26-linux-glibc2.12-x86_64.tar.gz #测试,不用理会,可以删除
[root@CCTV /server/tools]#tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz #再次解压
[root@CCTV /server/tools]#ls
mysql-5.7.26-linux-glibc2.12-x86_64
[root@db01 ~]# mkdir /application
[root@db01 /server/tools]# mv mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql
这里也可以软连接:ln -s mysql-5.7.26-linux-glibc2.12-x86_64/ /application/mysql
或者直接解压指定目录:tar xf mysql-5.7.26-linux-glibc2.12-x86_64_2.tar.gz -C /application
4、用户的创建处理原始环境
先:rpm -qa |grep mariadb #查看是否存在软件包,安装了就有
[root@db01 ~]# yum remove mariadb-libs-5.5.60-1.el7_5.x86_64 -y #不卸载会存在一些配置文件,如/etc/my.cnf
[root@db01 ~]# rpm -qa |grep mariadb #再次检查软件包是否还在
[root@db01 ~]# useradd -s /sbin/nologin mysql -M #M不创建家目录
5、 设置环境变量
echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
source /etc/profile #使环境变量生效
mysql -V #V查看版本,不显示说明解压或者PATH不正确
6、添加数据盘并挂载(使数据盘独立)(可以跳过此步)
- 添加一块新磁盘模拟数据盘(5G硬盘,压力测试需要空间大)
- 格式化并挂载磁盘
[root@db01 ~]# mkfs.xfs /dev/sdb #格式化磁盘
[root@db01 ~]# mkdir /data #存放数据
[root@db01 ~]# blkid #查看UUID
#实现开机自动挂载
UUID="b21ec3e0-e251-4ded-bc12-2d940f938dd5" /data xfs defaults 0 0 #写入/etc/fstab,双引号可以加上
mount -a #Mount all filesystems
df -h #检查是否挂载成功
7、创建数据目录并授权
[root@db01 ~]# mkdir /data/mysql/data -p
[root@db01 ~]# chown -R mysql.mysql /data #给数据授权
[root@db01 ~]# chown -R mysql.mysql /application/* #授权软件归属
8、 初始化数据(创建系统数据)
维持mysql正常运行的数据
# 5.6 版本 初始化命令 /application/mysql/scripts/mysql_install_db
# 5.7 版本
方法一:初始化带密码
[root@db01 ~]# mysqld --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
此处没有error即为成功,初始化成功后面带有数据库初始密码,需要保存一下
--initialize 参数:
1. 对于密码复杂度进行定制:12位,4种
2. 密码过期时间:180
3. 给root@localhost用户设置临时密码
方法二:初始化不带密码,常规操作
#--initialize-insecure #初始化不带密码,无限制
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
9、配置文件的准备
cat >/etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=6
port=3306
[mysql]
socket=/tmp/mysql.sock
EOF
10、启动数据库方式
方式1:sys-v
[root@db01 /]#/application/mysql/support-files/mysql.server start|stop
或者:
[root@db01 /etc/init.d]# cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@db01 /etc/init.d]# service mysqld restart|start|stop #操作选项
方式2:systemd
注意: sysv方式启动过的话,需要先提前关闭,才能以下方式登录(/etc/init.d/mysqld stop)
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
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF
#更新启动文件
systemctl daemon-reload
[root@db01 /]#systemctl restart|start|stop mysqld #操作选项
2.2 MySQL数据库无法启动分析
# without updating PID 类似错误
查看错误日志:/data/mysql/data/主机名.err
[ERROR] 上下文
可能情况:
1、/etc/my.cnf 路径不对等
2、/tmp/mysql.sock文件修改过 或 删除过----------重新初始化,再启动
3、数据目录权限不是mysql------------------------chown重新授权
4、参数改错了
2.3.管理员密码的设定(root@localhost)
[root@db01 ~]# mysqladmin -uroot -p password 旧密码
Enter password:
修改密码
mysqladmin -uroot -p旧密码 password 新密码
2.4 管理员用户密码忘记如何操作?
1、先关闭数据库
[root@db01 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
ps -ef|grep mysql确认一下
2、 启动数据库到维护模式
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
[1] 13192
[root@db01 ~]#2020-11-06T13:07:39.855593Z mysqld_safe Logging to '/data/mysql/data/db01.err'.
2020-11-06T13:07:39.895458Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/data
回车
#到这里就不需要密码登录了
3、登录并修改密码
mysql登录
mysql> alter user root@'localhost' identified by '1'; #修改数据库密码为1
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges; #刷新权限,因为以上密码太过简单,显示error,刷新一下权限就可以了
mysql> alter user root@'localhost' identified by '1';
Query OK, 0 rows affected (0.01 sec)
4、关闭数据库,正常启动验证