Day01-a.m.-数据库基础知识介绍与MySQL安装

1. DBA是什么

DBA(数据库管理员),认证英文是Database Administrator

2. DBA职业规划

2.1 需要学习的内容

(1)MySQL 5.7 安装部署(二进制)***** 编译自己扩展
(2)MySQL升级步骤扩展 ***
(3)MySQL5.7 体系结构原理 *****
(4)MySQL基础管理 *****
(5)基础SQL语句使用 *****
(6)SQL高级应用 ***
(7)Information_schema获取元数据 ***
(8)索引、执行计划管理(基础优化)*****
(9)存储引擎 *****
(10)日志管理 *****
(11)备份与恢复 ******
(12)主从复制及架构演变 ******
(13)传统的高可用及读写分离(MHA&Atlas)****
(14)传统分布式架构设计与实现-扩展(Mycat--->DBLE,DRDS)**
(15)MySQL 5.7 高可用及分布式架构-扩展(MGR,InnoDB Cluster)***
(16)MySQL优化(安全、性能) ****
(17)MySQL 监控(zabbix、Open-falcon) ****
(18)RDS(阿里云课程) *****
额外要会的:
Redis
mongodb
了解:
PG
Oracle

3. DBA职业素养

3.1 人品

责任----权利---态度

3.2 操作严谨

操作数据库修改、删除类的命令时,再三考虑,而且要有理论与实践的支撑

3.3 细心

把最简单的事情做的最漂亮、最专业

3.4 心态

别惹事,出事别怕事

4. DBA职业技能

4.1 熟悉操作系统(精通)

4.2 熟悉公司业务

产品功能
用户行为(热数据、热功能)

4.3 熟悉行业

熟悉行业发展趋势
数据库版本
数据库产品类型
(数据库排行网站https://db-engines.com/en/ranking)
建议多参加一些数据库的会议

5. 数据库产品

5.1 什么是数据?

图片、文档、账号密码、音视频等

5.2 DBMS 数据库管理系统

RDBMS(关系型数据库,Relational Database Management System):Oracle、MySQL、PG、MSSQL
NoSQL(非关系型数据库):MongoDB、Redis、ES
NEWSQL(分布式型数据库):TiDB、Spanner、AliSQL、OB、PolarDB(阿里自己研发的数据库)

5.3. MySQL 企业版本选择,GA版

每年发布4个大版本,一个季度发布一次,每个小版本发布时隔大概3个月左右
5.6(大版本):5.6.34、5.6.36、5.6.38(2017913)、5.6.40(小版本)
5.7(大版本):5.7.18、5.7.20(2017913)、5.7.24(小版本)
8.0(大版本):8014、8015、8016(小版本)

5.4 关于数据库版本面试

你在公司干了几年?你们公司用的什么版本的MySQL?
查询MySQLGA时间(www.mysql.com)

6. MySQL 5.7.26二进制版本安装

[root@db01 /server/tools]# tar zxf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz 
[root@db01 /server/tools]# ls
mysql-5.7.26-linux-glibc2.12-x86_64  mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
[root@db01 /server/tools]# mkdir -p /application/
[root@db01 /server/tools]# ls
mysql-5.7.26-linux-glibc2.12-x86_64  mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
[root@db01 /server/tools]# mv mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql
[root@db01 /server/tools]# cd /application/
[root@db01 /application]# ls
mysql

6.1 创建用户并处理原始环境

[root@db01 /application]# yum -y remove mariadb*
[root@db01 /application]# rpm -qa mariadb
[root@db01 /application]# 
[root@db01 /application]# useradd mysql -M -s /sbin/nologin -u 1111

6.2 设置环境变量

[root@db01 /application]# echo "export PATH=/application/mysql/bin:$PATH" >> /etc/profile
[root@db01 /application]# source /etc/profile
[root@db01 /application]# tail -1 /etc/profile
export PATH=/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@db01 /application]# mysql -V
mysql  Ver 14.14 Distrib 5.7.26, for linux-glibc2.12 (x86_64) using  EditLine wrapper

6.3 创建数据目录并授权


1. 这里选择在虚拟机中添加一块新的磁盘,模拟生产环境数据盘

[root@db01 ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0003ac1e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648     2050047      819200   82  Linux swap / Solaris
/dev/sda3         2050048    41943039    19946496   83  Linux

Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

2. 格式化磁盘并挂载
2.1 创建一个数据目录data

[root@db01 ~]# mkfs.xfs /dev/sdb
[root@db01 ~]# mkdir -p /data/mysql/data

2.2 挂载数据目录

[root@db01 ~]# blkid  #<==设备格式化完了后,会产生一个唯一的UUID
/dev/sda1: UUID="21cdab80-c67c-4a8c-9e92-038cbf81c3cc" TYPE="xfs" 
/dev/sda2: UUID="ace0ad34-e3c5-43c5-9227-cb1a1ff2730f" TYPE="swap" 
/dev/sda3: UUID="04ab5cae-4e35-41f1-a0da-33f81ef641dd" TYPE="xfs" 
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sdb: UUID="3ea41b5f-f467-4c4e-9dce-9b348e472864" TYPE="xfs"   #<==复制sdb的UUID
[root@db01 ~]# echo 'UUID=3ea41b5f-f467-4c4e-9dce-9b348e472864 /data                   xfs     defaults        0 0' >> /etc/fstab 
[root@db01 ~]# vim /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Apr 28 22:28:16 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=04ab5cae-4e35-41f1-a0da-33f81ef641dd /                       xfs     defaults        0 0
UUID=21cdab80-c67c-4a8c-9e92-038cbf81c3cc /boot                   xfs     defaults        0 0
UUID=ace0ad34-e3c5-43c5-9227-cb1a1ff2730f swap                    swap    defaults        0 0
UUID=3ea41b5f-f467-4c4e-9dce-9b348e472864 /data                   xfs     defaults        0 0
"/etc/fstab" 12L, 595C written
[root@db01 ~]# mount -a
[root@db01 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        20G  5.1G   14G  27% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.6M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       197M  133M   64M  68% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/sdb        5.0G   33M  5.0G   1% /data

3. 授权

[root@db01 ~]# chown -R mysql.mysql /application/*
[root@db01 ~]# chown -R mysql.mysql /data/mysql/data

7. 初始化数据库

共有两种方法
5.6版本的数据库初始化命令

/application/mysql/scripts/mysql_install_db  --user=mysql --datadir=/application/mysql/data --basedir=/application/mysql

5.7版本数据库,拥有全新的密码安全机制

mysqld --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data

参数说明:
--initialize参数:

  1. 密码复杂度:12位,字母、数字、特殊字符
  2. 密码过期时间:默认180天
  3. 初始化完后,会生成临时密码,显示在屏幕上,并且会往日志中记录一份。初始化命令如下:

方法1:

[root@db01 ~]# mysqld --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

上述初始化命令回车后报错,原因是:error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory(加载共享库时出错:libaio.so。1:无法打开共享对象文件:没有这样的文件或目录)Linux系统中缺少libaio-devel 软件包
解决方法如下:

[root@db01 ~]# yum install -y libaio-devel


方法2:
始化数据,初始化管理员的密码为空

mysqld --initialize-insecure  --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data

参数说明:
--initialize-insecure:无限制,无临时密码

[root@db01 ~]# mysqld --initialize-insecure  --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
2019-06-13T06:25:11.669931Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-06-13T06:25:12.179867Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-06-13T06:25:12.304339Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-06-13T06:25:12.391800Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: ffe55c30-8da3-11e9-8813-000c29577287.
2019-06-13T06:25:12.393402Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-06-13T06:25:12.394536Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
[root@db01 /data/mysql/data]# ll
total 110628
-rw-r----- 1 mysql mysql       56 Jun 13 14:25 auto.cnf
-rw-r----- 1 mysql mysql      419 Jun 13 14:25 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Jun 13 14:25 ibdata1
-rw-r----- 1 mysql mysql 50331648 Jun 13 14:25 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Jun 13 14:25 ib_logfile1
drwxr-x--- 2 mysql mysql     4096 Jun 13 14:25 mysql
drwxr-x--- 2 mysql mysql     8192 Jun 13 14:25 performance_schema
drwxr-x--- 2 mysql mysql     8192 Jun 13 14:25 sys

初始化完成后,虽然root没有密码,但是,5.7.20的新特性就是,初始化完了后数据库的状态是只能允许本地登录的。

8. 书写默认配置文件

[root@db01 /data/mysql/data]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
prompt=3306 [\\d]>

9. 配置CentOS6模式的启动脚本(sys-v:service):

[root@db01 /application/mysql/support-files]# ./mysql.server start
Starting MySQL.Logging to '/data/mysql/data/db01.err'.
.. SUCCESS! 
[root@db01 /application/mysql/support-files]# cp mysql.server    /etc/init.d/mysqld
[root@db01 /etc/init.d]# cd
[root@db01 ~]# service mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 
[root@db01 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 
[root@db01 ~]# 
[root@db01 ~]# service mysqld stop
Shutting down MySQL.. SUCCESS!

10. 配置systemd方式启动

[root@db01 ~]# cat >/etc/systemd/system/mysqld.service < EOF
[root@db01 ~]# systemctl start mysqld
[root@db01 ~]# lsof -i :3306   #<==检测数据库启动是否成功
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  9174 mysql   31u  IPv6  41022      0t0  TCP *:mysql (LISTEN)
[root@db01 ~]# netstat -lntup|grep mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      9174/mysqld 
[root@db01 ~]# netstat -lntup|grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      9174/mysqld 
[root@db01 ~]# ps -ef | grep mysqld | grep -v grep
mysql      9174      1  0 15:12 ?        00:00:00 /application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
[root@db01 ~]# ss -lntup|grep 3306
tcp    LISTEN     0      80       :::3306                 :::*                   users:(("mysqld",pid=9174,fd=31))

10. 如何分析处理MySQL数据库无法启动,错误如下:


解决方法:查看日志

日志位置:/data/mysql/data/主机名.err
直接查看关键字[ERROR]上下文
报错可能情况:
/etc/my.cnf 路径不对等
/tmp/mysql.sock文件做过修改或删除过
数据目录权限不是mysql,也会报错
my.cnf参数写错

数据库更改密码
方法1:

[root@db01 ~]# mysqladmin -uroot -p password oldboy123 
Enter password:  #<==刚开始的时候数据库是没有密码的,这里直接回车就行
[root@db01 ~]# mysql -uroot -p
Enter password: 
#省略若干行
3306 [(none)]>

方法2:忘记MySQL root密码,如何更改
1.先关闭数据库
2.启动数据库到维护模式

[root@db01 /application]# systemctl stop mysqld
[root@db01 /application]# mysqld_safe --skip-grant-tables --skip-networking &  #<==完了后会停在这里,直接回车几下
[root@db01 /application]# mysql
3306 mysql> alter user root@'localhost' identified by '1';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
3306 mysql> flush privileges;
3306 mysql> alter user root@'localhost' identified by '1';
Query OK, 0 rows affected (0.01 sec)

关闭数据库,正常启动验证

[root@db01 /application]# mysql  #<==由于没有输入密码,所以不能登入
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@db01 /application]# mysql -uroot -p
Enter password:   #<==密码为刚刚设置的1
3306 [(none)]>

你可能感兴趣的:(Day01-a.m.-数据库基础知识介绍与MySQL安装)