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参数:
- 密码复杂度:12位,字母、数字、特殊字符
- 密码过期时间:默认180天
- 初始化完后,会生成临时密码,显示在屏幕上,并且会往日志中记录一份。初始化命令如下:
方法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
[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
[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)]>
网友评论