第一章 MySQL5.7之从入门到放弃
第二章 MySQL从入门到放弃之数据库体系结构与管理
第三章 MySQL基础应用之DDL、DCL、DML、DQL
本系列主要从mysql-5.7.26版本入手,从二进制安装、升级、sql语句学习、基础管理、日志管理等层面入手,充实运维人的数据库层面知识,在实际生产or测试环境中操作不再发抖。虽然是一名运维工程师,但是在实际的操作中,只会一些简单的增删改查语句,对数据库的了解也比较浅薄,实际处理问题都得找DBA处理,因此,为了充实一下自身的数据库运维能力,记录一下自己的提升之路。
提示:以下是本篇文章正文内容,仅供本地环境学习入门使用
数据:文字、图片、视频等人类认知的数据表现方式,通俗点讲: 自身的个人信息就是数据
计算机:二进制、16进制的机器语言
基于数据的重要性和复杂性的不同,我们可能有不同的管理方式。
哪些数据是适合存储到数据库的呢?
重要性比较高的
关系较复杂的数据
安全性要求高,例如:身份信息、财产信息等
RDBMS: 关系型数据库管理系统
比较适合于,安全级别要求高的数据以及关系较复杂的数据
NoSQL: 非关系型数据库管理系统
适合于高性能存取数据,一般是配合RDBMS进行使用的,例如redis、mongodb等
针对大数据处理分析,分布式架构更加擅长
RDBMS:
oracle、mysql、pgsql、mssql
NOSQL:
redis、mongo、es
NEWSQL:
tidb、OB、Alisql
5.7
8.0
企业版:Enterprise , 互联网行业一般不选择.
社区版本:选择,我们自己的TOG项目使用的是5.7.32版本
源码包:source code .tar.gz
mysql下载地址
https://downloads.mysql.com/archives/community/ 选择下载自己需要的版本即可
1、本地vmware创建一台 centos7 1c2g的虚拟机
2、添加一块20G数据盘,并将数据盘挂载到/data/目录下,具体挂载方式请看下方的脚本,执行脚本即可,挂载完成截图如下所示
sh diskMount.sh /dev/sdb /data
3、卸载虚拟机上的mariadb
yum -y remove mariadb*
4、创建用户mysql,使用该用户管理mysql文件及进程
useradd -s /sbin/nologin mysql
#!/bin/env bash
DISK_DEV=$1
MOUNT_DIR=$2
function print_usage(){
echo "Usage -- 请输入两个参数:sh diskMount.sh DISK_DEV MOUNT_DIR"
exit 2
}
if [ $# -ne 2 ]
then
print_usage
fi
echo "创建挂载盘"
if [ -d ${MOUNT_DIR} ]
then
read -p "磁盘已存在,请确认是否仍需挂载![Yes/No]" res
case ${res} in
Yes | yes | Y | y)
echo "仍需挂载至${MOUNT_DIR}."
;;
*)
echo "no"
exit 1
;;
esac
fi
echo "分区规则,将此盘格式化为1块 xfs的盘"
parted ${DISK_DEV} "mklabel gpt"
parted ${DISK_DEV} "mkpart primary xfs 0% 100%"
echo "建立文件系统:mkfs,格式为xfs"
mkfs -t xfs ${DISK_DEV}1
mkdir ${MOUNT_DIR}
echo "挂载..."
mount ${DISK_DEV}1 ${MOUNT_DIR}
echo "检验..."
df -h
echo "---------------------更新/etc/fstab------------------------------"
BLK_UUID=`blkid ${DISK_DEV}1 | awk -F "\"" '{print $2}'`
echo "UUID=${BLK_UUID} ${MOUNT_DIR} xfs defaults 1 2" >> /etc/fstab
cat /etc/fstab
1、上传下载好的安装包
rz mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
2、创建安装目录、日志目录、socket文件存放目录,并对安装目录、数据目录、日志目录、socket文件存放目录授权
mkdir /application/
mkdir -p /data/mysql3306/{data,log,run,binlog}
chown -R mysql.mysql /data/*
chown -R mysql.mysql /application/*
3、解压并移动到安装目录
tar xf /root/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
mv /root/mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql3306
4、设置环境变量
vim /etc/profile
#末尾添加一下两行配置
export MYSQL_57_HOME=/application/mysql3306
export PATH=$MYSQL_57_HOME/bin:$PATH
#添加完成后保存,执行
source /etc/profile
/application/mysql3306/bin/mysql -V #检查版本
/application/mysql3306/bin/mysql Ver 14.14 Distrib 5.7.26, for linux-glibc2.12 (x86_64) using EditLine wrapper
5、至此安装完成。。。
这步操作主要是创建系统数据,主要有两种初始化方法,分别独领风骚,在初始化之前,先简单学习一下两种初始化中重要的参数
--initialize 参数:
1、制定密码复杂度 12位、4种
2、密码过期时间 180天
3、给root@localhost用户设置临时密码
--initialize-insecure 参数: (通常使用该参数执行初始化即可)
无限制,无临时密码。
--user 参数: 指定用户
--basedir 参数: 指定安装目录
--datadir 参数: 指定数据存储目录
初始化方法一、--initialize 参数初始化
[root@python1 ~]# /application/mysql3306/bin/mysqld --initialize --user=mysql --basedir=/application/mysql3306 --datadir=/data/mysql3306/data
2024-01-13T03:41:28.957287Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2024-01-13T03:41:29.155188Z 0 [Warning] InnoDB: New log files created, LSN=45790
2024-01-13T03:41:29.199881Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2024-01-13T03:41:29.271144Z 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: a2c759a2-b1c5-11ee-b350-00505631e679.
2024-01-13T03:41:29.271946Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2024-01-13T03:41:29.272634Z 1 [Note] A temporary password is generated for root@localhost: y&h2dsziiR0h --->重点关注此行即可 该密码就是第一次登录数据库时使用的密码
初始化方法二、--initialize-insecure 参数初始化
[root@python1 ~]# /application/mysql3306/bin/mysqld --initialize-insecure --user=mysql --basedir=/application/mysql3306 --datadir=/data/mysql3306/data
初始化配置文件作用:
影响数据库的启动
影响客户端的功能
配置文件书写格式
[标签]
xx=xx
配置文件标签归类
服务端
[mysqld]
[mysqld_safe]
[server]
客户端
[client]
[mysql]
[mysqladmin]
[mysqldump]
mysql启动时读取配置文件顺序
[root@db01 ~]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /application/mysql3306/my.cnf ~/.my.cnf
注意:
--defaults-file 参数可以强制使用自定义配置文件
vim /application/mysql3306/my.cnf
[mysqld]
user=mysql
basedir=/application/mysql3306
datadir=/data/mysql3306/data
socket=/data/mysql3306/run/mysql.sock
server_id=6
port=3306
log_error_verbosity = 3
log_error = /data/mysql3306/log/mysqld-err.log
log_timestamps = SYSTEM
log-bin = /data/mysql3306/binlog/mysql-bin
[mysql]
socket=/data/mysql3306/run/mysql.sock
启动数据库有两种方式,一种是基于centos 6 的service命令管理,一种是基于centos 7的systemctl命令管理,下面是两种方式的介绍
方法一、基于centos 6 的service命令管理
[root@python1 mysql]# cp /application/mysql3306/support-files/mysql.server /etc/init.d/mysql_3306.server
[root@python1 mysql]# service mysql_3306 restart
[root@python1 mysql]# /etc/init.d/mysql_3306.server start
因为指定了socket、日志等文件位置,且my.cnf配置文件并没有采用默认的/etc/my.cnf路径,所以要修改/etc/init.d/mysql_3306.server启动脚本,
添加如下所示:
user=mysql
basedir=/application/mysql3306
bindir=$basedir/bin
datadir=/data/mysql3306/data
mycnf=$datadir/my.cnf
方法二、基于centos 7的systemctl命令管理
cat /etc/systemd/system/mysql_3306.service
[Unit]
Description=Mysql server
After=syslog.target
After=network.target
[Service]
User=mysql
Group=mysql
LimitNOFILE=102400
ExecStart=/application/mysql3306/bin/mysqld --defaults-file=/application/mysql3306/my.cnf
[Install]
WantedBy=multi-user.target
#启动mysql
[root@python1 mysql]# systemctl start mysql_3306
#检查进程
[root@python1 mysql]# ps -ef |grep mysql
mysql 7696 1 1 12:17 ? 00:00:00 /application/mysql3306/bin/mysqld --defaults-file=/application/mysql3306/my.cnf
#登录mysql
[root@python1 mysql]# /application/mysql3306/bin/mysql -S /data/mysql3306/run/mysql.sock
启动故障排查
查看日志文件
配置了日志文件再数据路径下,日志文件名是 <mysqld-err.log>,如下截图所示
因为前面的操作只是初始化了数据库,并没有给数据库创建对应的管理员用户,因此执行mysql命令直接可以登录到数据库中,不符合安全及学习之路,所以必须配置管理用户
[root@python1 ~]# mysqladmin -uroot -p password test123 -S /data/mysql3306/run/mysql.sock <设定密码为test123>
Enter password: <此处直接回车就行,因为原来没有密码,如果原来有密码,则需要输入老密码>
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
实际环境中,出现该现象的概率基本是零,此处为了学习做一个演示,忽略即可。生产环境不要直接随意启停数据库
1、关闭数据库
systemctl stop mysql_3306
2、启动数据库维护模式
--skip-grant-tables 跳过授权表
--skip-networking 跳过远程登录
3、执行
[root@python1 ~]# /application/mysql3306/bin/mysqld_safe --skip-grant-tables --skip-networking &
[1] 13385
[root@python1 ~]# 2024-01-13T04:52:40.873713Z mysqld_safe Logging to '/data/mysql3306/data/python1.err'.2024-01-13T04:52:40.904620Z mysqld_safe Starting mysqld daemon with databases from /data/mysql3306/data
3、登录数据库并修改密码
mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+---------------+-----------+-------------------------------------------+
| root | localhost | *676243218923905CF94CB52A3C9D3EB30CE8E20D |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
mysql> flush privileges; #刷新权限,要不然执行会报错
Query OK, 0 rows affected (0.01 sec)
mysql> alter user root@'localhost' identified by '123'; #修改密码
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,authentication_string from mysql.user; #跟上述查出来的密码字符串对比明显发生了改变
+---------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+---------------+-----------+-------------------------------------------+
| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------+-----------+-------------------------------------------+
3 rows in set (0.01 sec)
4、 重启数据库登录验证即可,如下图所示
以上仅供参考