数据库管理员DBA

一、DBA的工作

在这里插入图片描述

1.初级:mysql安装、搭建

2.中级:数据库管理员DBA

1)用户管理

1.用户的权限
2.用户可以操作的库
3.用户的来源主机
4.用户的密码

grant show,create on zh.* to zh@'172.16.1.%' identified by '123';

2)数据管理

1.数据备份
2.数据恢复
3.SQL语句管理
    DDL: CREATE(表,视图,索引)
    DCL: GRANT
    DML: INSERT UPDATE DELETE
    DQL: SELECT

3)配置管理

4)集群管理

5)监控

1.进程
2.端口
3.主从状态
4.主从延迟情况
5.sql读写速率
6.慢查询

6)运维的监控

1.系统监控
2.服务监控
3.端口监控
4.网络监控
5.业务监控

二、数据库课程体系

img

三、DBA职业素养

在这里插入图片描述

1.人品

1.不要动不动就删库跑路
2.不要轻易甩锅,甩锅也甩到其他部门

2.严谨

1.每条sql执行前,必须经过测试
    delete from mysql.user where 1=1;(很多人喜欢使用第三方工具)
drop: 删除表
truncate: 清空表
delete: 删除数据

3.细心

1.敲命令时要细心, show slave status\G 不用加;

4.心态

5.熟悉操作系统

6.熟悉业务

1.熟悉到每一个库下每一个表是做什么的

7.熟悉行业

8.喜欢数据库

MySQL简介及安装

一、MySQL简介

1.什么是数据

数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据。
在计算机系统中,数据以二进制信息单元0,1的形式表示。

数据的定义: 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。*

一般数据存储:
存储在word里,缺点:
    1.word存储,打开时加载内存
    2.数据查询不方便
    3.安全级别不高
    4.word不支持集群
所以,我们需要数据库管理系统

2.什么是数据库管理系统

用来管理数据的系统 DBMS(database management system)

3.数据库管理系统的种类

1)关系型数据库(RDBMS)

MySQL
Oracle
MSSQL(SQLserver)

以多张二维表的方式来存储,又给多张表建立了一定的关系(关系型数据库)

范式:把数据库数据拆分成多个表,拆到不能再拆

2)非关系型数据库(NoSQL)

redis
    set key value  设置值
    get key        获取值
memcache
mongodb
elasticsearch(搜索引擎式数据库)

一般情况NoSQL用来做缓存

很多以json格式进行存储数据的(mogodb),java代码的数据可以转成json格式给到python或者php进行解析

3)关系型数据库和非关系型数据库对比

关系型数据库:
    1.强大的查询功能
    2.强一致性(事务)
    3.二级索引

非关系型数据库:
    1.灵活
    2.扩展性(扩展比较方便)
    3.性能高(缓存)

4)关系型数据库和非关系型数据库特点

特点对比:
关系型数据库(RDBMS)的特点:
1.二维表
2.数据存取是通过SQL(Structured Query Language结构化查询语言)
3.最大特点数据安全性方面强(ACID)
    原子性,一致性,隔离性,持久性

非关系型数据库(NoSQL:Not only SQL)的特点:
1.不是否定关系型数据库,而是做关系型数据库的补充。
2.性能高

5)NoSQL特性总览

1. 不是否定关系型数据库,而是做关系型数据库的补充,现在也有部分替代mongodb的趋势。
2. 关注高性能,高并发,灵活性,忽略和上述无关的功能。
3. 现在也在提升安全性和使用功能。
4. 典型产品:redis(持久化缓存)、MongoDB(最接近关系型数据库的NoSQL)、memcached。
5. 管理不使用SQL管理,而是用一些特殊的API或数据接口。

6)NoSQL的分类、特点、典型产品

1.键值(KV)存储:memcached、redis
2.列存储(column-oriented):HBASE(新浪、360)Cassandra(200台服务器集群)
3.文档数据库(document-oriented):MongoDB(最接近关系型数据库的NoSQL)
4.图形存储(Graph):Neo4j

4.MySQL数据库产品

1)MySQL数据库版本介绍

- 1.0
- 5.1
- 5.5
- 5.6
- 5.7
- 8.0

我们选择数据库的时候,选择版本潜规则:
    5.6版本选择:GA 6-12个月 ,小版本是偶数版
    5.7版本选择:GA 6-12个月 ,小版本是偶数版 , 5.7.17版本以上(MGR,MySQL自带的高可用)

二、MySQL安装

安装方式:
    1.yum的rpm安装
    2.二进制安装
    3.源码包安装

1.二进制安装

1)上传或者下载二进制包

[root@db02 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
或者
[root@db02 ~]# rz mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz

2)安装依赖

[root@db02 ~]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf

3)解压安装包

[root@db02 ~]# tar xf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz

4)移动目录并改名

[root@db02 ~]# mv mysql-5.6.46-linux-glibc2.12-x86_64 /usr/local/mysql-5.6.46

5)做软连接

[root@db02 ~]# ln -s /usr/local/mysql-5.6.46 /usr/local/mysql

6)创建数据库用户

[root@db02 ~]# useradd mysql -s /sbin/nologin -M

7)拷贝配置文件和启动文件

#1.进入配置文件和脚本的目录
[root@db02 ~]# cd /usr/local/mysql/support-files/

#2.拷贝配置文件
[root@db02 support-files]# cp my-default.cnf /etc/my.cnf

#3.拷贝启动脚本
[root@db02 support-files]# cp mysql.server /etc/init.d/mysqld

8)初始化数据库

#1.进入初始化目录
[root@db02 support-files]# cd /usr/local/mysql/scripts/

#2.执行初始化命令
[root@db02 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

    --user:指定用户
    --basedir:指定mysql的安装目录
    --datadir:指定MySQL的数据目录

#3.初始化成功的标示
    1.出现2个 ok
    2.ll /usr/local/mysql/data/目录下有多个文件
    正经的数据库里面应该有四个库:
        mysql
        performance_schema
        test
        information_schema

9)启动数据库

[root@db02 scripts]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/usr/local/mysql/data/db02.err'.
 SUCCESS!

10)检查进程和端口

[root@db02 scripts]# ps -ef | grep [m]ysql
root      23083      1  0 20:36 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/db02.pid
mysql     23191  23083  0 20:36 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=db02.err --pid-file=/usr/local/mysql/data/db02.pid
[root@db02 scripts]# netstat -lntp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      23191/mysqld        
[root@db02 scripts]#

11)配置system管理MySQL服务

#1.配置system管理MySQL
[root@db02 ~]# vim /usr/lib/systemd/system/mysql.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://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=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

#2.重新加载启动文件列表
[root@db02 ~]# systemctl daemon-reload

#3.system管理启动MySQL
[root@db02 ~]# systemctl start mysql
[root@db02 ~]# ps -ef | grep [m]ysql
mysql     23509      1  3 22:36 ?        00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
[root@db02 ~]# netstat -lntp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      23509/mysqld

12)配置环境变量直接使用mysql

[root@db02 ~]# vim /etc/profile.d/mysql.sh 
export PATH=/usr/local/mysql/bin:$PATH
[root@db02 ~]# source /etc/profile

2.MySQL源码安装

1)上传或下载代码包

[root@db03 ~]# rz mysql-5.6.46.tar.gz
或者
[root@db03 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.46.tar.gz

2)安装依赖

[root@db03 ~]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf openssl openssl-devel

3)解压

[root@db03 ~]# tar xf mysql-5.6.46.tar.gz

4)生成cmake

[root@db03 ~]# cd mysql-5.6.46/
[root@db03 ~]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.46 \
-DMYSQL_DATADIR=/usr/local/mysql-5.6.46/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.46/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0

5)编译 make

[root@db03 mysql-5.6.46]# make

6)安装 make install

[root@db03 mysql-5.6.46]# make install

7)做软连接

[root@db02 ~]# ln -s /usr/local/mysql-5.6.46 /usr/local/mysql

8)创建数据库用户

[root@db02 ~]# useradd mysql -s /sbin/nologin -M

9)拷贝配置文件和启动文件

#1.进入配置文件和脚本的目录
[root@db02 ~]# cd /usr/local/mysql/support-files/

#2.拷贝配置文件
[root@db02 support-files]# cp my-default.cnf /etc/my.cnf

10)配置system管理MySQL服务

#1.配置system管理MySQL
[root@db02 ~]# vim /usr/lib/systemd/system/mysql.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://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=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

#2.重新加载启动文件列表
[root@db02 ~]# systemctl daemon-reload

11)初始化数据库

#1.进入初始化目录
[root@db02 support-files]# cd /usr/local/mysql/scripts/

#2.执行初始化命令
[root@db02 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

12)创建socket文件目录(二进制安装没有)

#先创建tmp目录
[root@db02 ~]# mkdir /usr/local/mysql/tmp

13)授权数据库目录(二进制安装没有)

[root@db02 ~]# chown -R mysql.mysql /usr/local/mysql
[root@db02 ~]# chown -R mysql.mysql /usr/local/mysql-5.6.46

14)system管理启动MySQL

[root@db02 ~]# systemctl start mysql
[root@db02 ~]# ps -ef | grep [m]ysql
mysql     23509      1  3 22:36 ?        00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
[root@db02 ~]# netstat -lntp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      23509/mysqld

15)检查进程和端口

[root@db02 scripts]# ps -ef | grep [m]ysql
root      23083      1  0 20:36 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/db02.pid
mysql     23191  23083  0 20:36 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=db02.err --pid-file=/usr/local/mysql/data/db02.pid
[root@db02 scripts]# netstat -lntp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      23191/mysqld        
[root@db02 scripts]#

16)配置环境变量直接使用mysql

[root@db02 ~]# vim /etc/profile.d/mysql.sh 
export PATH=/usr/local/mysql/bin:$PATH
[root@db02 ~]# source /etc/profile

1.源码包安装数据库(自定义安装目录)

1)上传代码包

[root@db01 ~]# rz mysql-5.6.46.tar.gz

2)安装依赖

[root@db01 ~]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf openssl openssl-devel

3)解压

[root@db01 ~]# tar xf mysql-5.6.46.tar.gz

4)创建自定义目录

[root@db01 ~]# mkdir /service

5)生成

[root@db01 ~]# cd mysql-5.6.46/
[root@db01 mysql-5.6.46]# cmake . -DCMAKE_INSTALL_PREFIX=/service/mysql-5.6.46 \
-DMYSQL_DATADIR=/service/mysql-5.6.46/data \
-DMYSQL_UNIX_ADDR=/service/mysql-5.6.46/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0

6)编译安装

[root@db01 mysql-5.6.46]# make && make install

7)做软连接

[root@db01 ~]# ln -s /service/mysql-5.6.46 /service/mysql

8)创建用户

[root@db01 ~]# useradd mysql -s /sbin/login -M

9)拷贝配置文件

[root@db01 service]# cd /service/mysql/support-files/
[root@db01 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite ‘/etc/my.cnf’? y
[root@db01 support-files]# cp mysql.server /etc/init.d/mysqld

10)初始化数据库

[root@db01 support-files]# cd /service/mysql/scripts/
[root@db01 scripts]# ./mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/service/mysql/data

11)启动mysql

#1.启动数据库
[root@db01 scripts]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/service/mysql-5.6.46/data/db01.err'.
200414 09:32:26 mysqld_safe Directory '/service/mysql-5.6.46/tmp' for UNIX socket file don't exists.
 ERROR! The server quit without updating PID file (/service/mysql-5.6.46/data/db01.pid).

#报错原因:
启动数据库会生成socket文件,保存在/service/mysql-5.6.46/tmp下面,但是这个目录不会自动创建
#解决:
[root@db01 scripts]# mkdir /service/mysql-5.6.46/tmp/


#2.再次启动数据库
[root@db01 scripts]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/service/mysql-5.6.46/data/db01.err'.
.. ERROR! The server quit without updating PID file (/service/mysql-5.6.46/data/db01.pid).

#查看报错日志:
[root@db01 scripts]# less /service/mysql-5.6.46/data/db01.err
2020-04-14 09:34:41 44480 [ERROR] Can't start server : Bind on unix socket: Permission denied
2020-04-14 09:34:41 44480 [ERROR] Do you already have another mysqld server running on socket: /service/mysql-5.6.46/tmp/mysql.sock ?
2020-04-14 09:34:41 44480 [ERROR] Aborting
#解决:授权数据库目录即可
[root@db01 scripts]# chown -R mysql.mysql /service/mysql-5.6.46/

1)配置system管理启动mysql

[root@db04 service]# vim /usr/lib/systemd/system/mysql.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://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=/service/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

[root@db04 service]# systemctl daemon-reload

12)system启动mysql

#1.启动mysql
[root@db04 service]# systemctl start mysql
[root@db04 service]# !ps
ps -ef | grep [m]ysql
mysql      9086      1 30 09:20 ?        00:00:00 /service/mysql/bin/mysqld --defaults-file=/etc/my.cnf
root       9109   8130  0 09:20 pts/0    00:00:00 grep --color=auto mysql
[root@db04 service]# !net
netstat -lntp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      9086/mysqld

13)配置环境变量

2.二进制包安装数据库(自定义安装目录)

1)上传代码包

[root@db04 ~]# rz  mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz

2)安装依赖

[root@db04 ~]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf openssl openssl-devel

3)解压

[root@db04 ~]# tar xf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz

4)创建自定义目录

[root@db04 ~]# mkdir /service

5)移动目录并改名字

[root@db04 ~]# mv mysql-5.6.46-linux-glibc2.12-x86_64 /service/mysql-5.6.46

6)做软连接

[root@db04 ~]# ln -s /service/mysql-5.6.46 /service/mysql

7)创建用户

[root@db04 ~]# useradd mysql -s /sbin/login -M

8)拷贝配置文件和启动脚本

[root@db04 ~]# cd /service/mysql/support-files/
[root@db04 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite ‘/etc/my.cnf’? y
[root@db04 support-files]# cp mysql.server /etc/init.d/mysqld

9)初始化数据库

[root@db04 support-files]# cd /service/mysql/scripts/
[root@db04 scripts]# ./mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/service/mysql/data

10)启动MySQL

#1.尝试启动数据库
[root@db04 scripts]# /etc/init.d/mysqld start
/etc/init.d/mysqld: line 244: my_print_defaults: command not found
/etc/init.d/mysqld: line 264: cd: /usr/local/mysql: No such file or directory
Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)

#2.解决报错
    #报错原因:
    二进制的包是已经生成编译安装完成的,他会去/user/local目录下找mysql目录,所以启动失败

    #解决方式:
    1.做软连接
    [root@db04 scripts]# ln -s /service/mysql-5.6.46 /usr/local/mysql

    2.修改启动文件
    [root@db04 scripts]# sed -i 's#/usr/local#/service#g' /etc/init.d/mysqld /service/mysql/bin/mysqld_safe

#3.再次尝试启动:
[root@db04 service]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

11)配置system管理启动mysql

[root@db04 service]# vim /usr/lib/systemd/system/mysql.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://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=/service/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

[root@db04 service]# systemctl daemon-reload

12)system启动mysql

#1.启动mysql失败
[root@db04 service]# systemctl start mysql
[root@db04 service]# !ps
ps -ef | grep [m]ysql
root       8978   8130  0 09:14 pts/0    00:00:00 grep --color=auto mysql
[root@db04 service]# !net
netstat -lntp | grep 3306

#2.启动失败原因:mysql目录下不止刚修改的两个地方是/usr/local,还有很多
[root@db04 service]# grep -r '/usr/local' /service/mysql/*

#3.解决办法:
1.做软连接
[root@db04 service]# ln -s /service/mysql-5.6.46 /usr/local/mysql

2.修改配置文件
[root@db04 service]# vim /etc/my.cnf
[mysqld]
basedir=/service/mysql
datadir=/service/mysql/data

#4.再次启动
[root@db04 service]# systemctl start mysql
[root@db04 service]# !ps
ps -ef | grep [m]ysql
mysql      9086      1 30 09:20 ?        00:00:00 /service/mysql/bin/mysqld --defaults-file=/etc/my.cnf
root       9109   8130  0 09:20 pts/0    00:00:00 grep --color=auto mysql
[root@db04 service]# !net
netstat -lntp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      9086/mysqld

13)配置环境变量

Copyright © 高程程 all right reserved,powered by Gitbook修订于: 2021-05-18 21:14:41

results matching ""

    No results matching ""