数据库管理员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.业务监控
二、数据库课程体系

三、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 ~]
或者
[root@db02 ~]
2)安装依赖
[root@db02 ~]
3)解压安装包
[root@db02 ~]
4)移动目录并改名
[root@db02 ~]
5)做软连接
[root@db02 ~]
6)创建数据库用户
[root@db02 ~]
7)拷贝配置文件和启动文件
[root@db02 ~]
[root@db02 support-files]
[root@db02 support-files]
8)初始化数据库
[root@db02 support-files]
[root@db02 scripts]
--user:指定用户
--basedir:指定mysql的安装目录
--datadir:指定MySQL的数据目录
1.出现2个 ok
2.ll /usr/local/mysql/data/目录下有多个文件
正经的数据库里面应该有四个库:
mysql
performance_schema
test
information_schema
9)启动数据库
[root@db02 scripts]
Starting MySQL.Logging to '/usr/local/mysql/data/db02.err'.
SUCCESS!
10)检查进程和端口
[root@db02 scripts]
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]
tcp6 0 0 :::3306 :::* LISTEN 23191/mysqld
[root@db02 scripts]
11)配置system管理MySQL服务
[root@db02 ~]
[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
[root@db02 ~]
[root@db02 ~]
[root@db02 ~]
mysql 23509 1 3 22:36 ? 00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
[root@db02 ~]
tcp6 0 0 :::3306 :::* LISTEN 23509/mysqld
12)配置环境变量直接使用mysql
[root@db02 ~]
export PATH=/usr/local/mysql/bin:$PATH
[root@db02 ~]
2.MySQL源码安装
1)上传或下载代码包
[root@db03 ~]
或者
[root@db03 ~]
2)安装依赖
[root@db03 ~]
3)解压
[root@db03 ~]
4)生成cmake
[root@db03 ~]
[root@db03 ~]
-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]
6)安装 make install
[root@db03 mysql-5.6.46]
7)做软连接
[root@db02 ~]
8)创建数据库用户
[root@db02 ~]
9)拷贝配置文件和启动文件
[root@db02 ~]
[root@db02 support-files]
10)配置system管理MySQL服务
[root@db02 ~]
[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
[root@db02 ~]
11)初始化数据库
[root@db02 support-files]
[root@db02 scripts]
12)创建socket文件目录(二进制安装没有)
[root@db02 ~]
13)授权数据库目录(二进制安装没有)
[root@db02 ~]
[root@db02 ~]
14)system管理启动MySQL
[root@db02 ~]
[root@db02 ~]
mysql 23509 1 3 22:36 ? 00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
[root@db02 ~]
tcp6 0 0 :::3306 :::* LISTEN 23509/mysqld
15)检查进程和端口
[root@db02 scripts]
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]
tcp6 0 0 :::3306 :::* LISTEN 23191/mysqld
[root@db02 scripts]
16)配置环境变量直接使用mysql
[root@db02 ~]
export PATH=/usr/local/mysql/bin:$PATH
[root@db02 ~]
1.源码包安装数据库(自定义安装目录)
1)上传代码包
[root@db01 ~]
2)安装依赖
[root@db01 ~]
3)解压
[root@db01 ~]
4)创建自定义目录
[root@db01 ~]
5)生成
[root@db01 ~]
[root@db01 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]
7)做软连接
[root@db01 ~]
8)创建用户
[root@db01 ~]
9)拷贝配置文件
[root@db01 service]
[root@db01 support-files]
cp: overwrite ‘/etc/my.cnf’? y
[root@db01 support-files]
10)初始化数据库
[root@db01 support-files]
[root@db01 scripts]
11)启动mysql
[root@db01 scripts]
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]
1)配置system管理启动mysql
[root@db04 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]
12)system启动mysql
[root@db04 service]
[root@db04 service]
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]
netstat -lntp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 9086/mysqld
13)配置环境变量
2.二进制包安装数据库(自定义安装目录)
1)上传代码包
[root@db04 ~]
2)安装依赖
[root@db04 ~]
3)解压
[root@db04 ~]
4)创建自定义目录
[root@db04 ~]
5)移动目录并改名字
[root@db04 ~]
6)做软连接
[root@db04 ~]
7)创建用户
[root@db04 ~]
8)拷贝配置文件和启动脚本
[root@db04 ~]
[root@db04 support-files]
cp: overwrite ‘/etc/my.cnf’? y
[root@db04 support-files]
9)初始化数据库
[root@db04 support-files]
[root@db04 scripts]
10)启动MySQL
[root@db04 scripts]
/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
[root@db04 service]
Starting MySQL. SUCCESS!
11)配置system管理启动mysql
[root@db04 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]
12)system启动mysql
[root@db04 service]
[root@db04 service]
ps -ef | grep [m]ysql
root 8978 8130 0 09:14 pts/0 00:00:00 grep --color=auto mysql
[root@db04 service]
netstat -lntp | grep 3306
[root@db04 service]
1.做软连接
[root@db04 service]
2.修改配置文件
[root@db04 service]
[mysqld]
basedir=/service/mysql
datadir=/service/mysql/data
[root@db04 service]
[root@db04 service]
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]
netstat -lntp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 9086/mysqld
13)配置环境变量