mysql5.7之从入门到放弃

发布时间:2024年01月14日

系列文章目录

第一章 MySQL5.7之从入门到放弃
第二章 MySQL从入门到放弃之数据库体系结构与管理
第三章 MySQL基础应用之DDL、DCL、DML、DQL



前言

本系列主要从mysql-5.7.26版本入手,从二进制安装、升级、sql语句学习、基础管理、日志管理等层面入手,充实运维人的数据库层面知识,在实际生产or测试环境中操作不再发抖。虽然是一名运维工程师,但是在实际的操作中,只会一些简单的增删改查语句,对数据库的了解也比较浅薄,实际处理问题都得找DBA处理,因此,为了充实一下自身的数据库运维能力,记录一下自己的提升之路。


提示:以下是本篇文章正文内容,仅供本地环境学习入门使用

一、Mysql的介绍和安装?

1、什么是数据?

	数据:文字、图片、视频等人类认知的数据表现方式,通俗点讲: 自身的个人信息就是数据
	计算机:二进制、16进制的机器语言
	基于数据的重要性和复杂性的不同,我们可能有不同的管理方式。

哪些数据是适合存储到数据库的呢?
	重要性比较高的
	关系较复杂的数据
	安全性要求高,例如:身份信息、财产信息等

2、什么是数据库管理系统(DBMS)?

	RDBMS: 关系型数据库管理系统
	比较适合于,安全级别要求高的数据以及关系较复杂的数据

	NoSQL: 非关系型数据库管理系统
	适合于高性能存取数据,一般是配合RDBMS进行使用的,例如redis、mongodb等
	针对大数据处理分析,分布式架构更加擅长

3、数据库管理系统种类

	RDBMS:
		oracle、mysql、pgsql、mssql
	NOSQL:
		redis、mongo、es
	NEWSQL:
		tidb、OB、Alisql

4、MySQL行业主流版本

  5.7
  8.0
企业版:Enterprise  , 互联网行业一般不选择.
社区版本:选择,我们自己的TOG项目使用的是5.7.32版本
源码包:source code    .tar.gz   

二、MySQL二进制安装

1.下载安装包

mysql下载地址
	https://downloads.mysql.com/archives/community/ 选择下载自己需要的版本即可

在这里插入图片描述

2.虚拟机准备操作

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

数据盘挂载完成

3、上传软件包安装

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、至此安装完成。。。

4、数据库初始化操作

这步操作主要是创建系统数据,主要有两种初始化方法,分别独领风骚,在初始化之前,先简单学习一下两种初始化中重要的参数

--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

5、准备简单的my.cnf配置文件

初始化配置文件作用:
            影响数据库的启动
            影响客户端的功能
      
配置文件书写格式
            [标签]
            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

6、启动数据库及故障排查

启动数据库有两种方式,一种是基于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>,如下截图所示

在这里插入图片描述

7、管理员密码设置

因为前面的操作只是初始化了数据库,并没有给数据库创建对应的管理员用户,因此执行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.

8、本地root管理员用户密码忘记怎么整?

实际环境中,出现该现象的概率基本是零,此处为了学习做一个演示,忽略即可。生产环境不要直接随意启停数据库

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、 重启数据库登录验证即可,如下图所示

在这里插入图片描述


以上仅供参考

文章来源:https://blog.csdn.net/weixin_50902636/article/details/135576657
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。