MySQL-lesson01 介绍和安装
1、什么是数据
数据的定义: 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。
2、什么是数据库管理系统
DBMS(database management system)
image.png
3、数据库管理系统种类
-
RDBMS(关系型数据库):以多张二维表的方式来存储,又给多张表建立了一定的关系
适合于:安全级别要求高的数据以及关系较复杂的数据
例如:MySQL 、Oracle、Microsoft SQL、PG -
NOSQL(非关系型数据库):很多以json格式进行存储数据的
适合于:高性能存取数据,一般是配合RDBMS进行使用的,针对大数据处理分析,分布式架构更加擅长
例如:
键-值(key-value):Redis(缓存,消息队列),memcached (session缓存)
文档(document):Mongodb (放爬虫应用的数据)
左边RDBMS右边NOSQL
4、RDBMS和NoSQL的区别
-
二者区别:
关系型数据库:强大的查询功能、强一致性、二级索引
非关系型数据库:灵活模式、扩展性、性能高 -
基本特点:
关系型数据库特点:有二维表的形式组织存储数据(有清楚的行列结构)
非关系型数据库特点:针对性能要求较高,数据安全性要求不是太高的场景,一般是配合RDBMS使用的产品
5、MySQL产品介绍
-
一般选择官方主流版本:5.6、5.7
-
版本选择行业潜规则: 5.7.17版本以上,选择GA(稳定发布版)在6-12月产品版本,小版本选择偶数版本,奇数版为测试版本
-
新特性重要说明:
5.7开始,MySQL加入了全新的 密码的安全机制:
1.初始化完成后,会生成临时密码(显示到屏幕上,并且会往日志中记一份)
2.密码复杂度:长度:超过12位? 复杂度:字符混乱组合
3.密码过期时间180天
- 5.6 中用户基本信息
select user,password,host from mysql.user;
5.7 中用户基本信息,密码字段改变authentication_string;如果记不住desc mysql.user查看
select user,authentication_string,host from mysql.user;
面试题:
-
你们公司用什么版本数据库? 具体什么小版本号?
5.6.20 5.6.34 5.6.36 5.6.38 5.6.40
5.7.18 5.7.20 5.7.22 -
为什么使用这个版本哪呢?
(1)因为,我们公司的业务系统是基于这个版本开发的,
(2)经过长时间的测试以及运行,没有发现明显异常,比较稳定
(3)当前版本已经用了2年了,没有出现过任何由于版本问题出现的不稳定情况,升级是有风险的。所以暂时没有考虑升级.基于应用的兼容性思考,我们暂时没有打算上5.7。
(4)但是我们已经准备好将来在必要的时候,更新为新版本
(5)我对5.7的新特性也比较了解。 -
新业务使用的什么版本?用到了什么功能?
我们公司新上的项目使用了5.7.20这个版本中的高可用架构(MGR,5.7.18才有的功能。).
6、MySQL获取与安装方式介绍
MySQL下载地址:https://downloads.mysql.com/archives/community/
安装方式特点:
- RPM、Yum:安装方便、安装速度快,无法定制 ---->了解
- 二进制:不需要安装,解压即可使用,不能定制功能 ---->熟悉
- 编译安装:可定制,安装慢。 ---->熟悉
四个步骤:解压、生成、编译、安装
5.5之前:./configure make make install
5.5之后:cmake gmake - 先编译,然后制作rpm,制作yum库,然后yum安装。 ----->熟悉dd
简单、速度快、可定制,比较复杂 制作时间长 - 企业选择安装方式
中小企业:以上方式都可以,运维偏向编译,dba偏向选择二进制。
大型企业:可以选择第4种
7、MySQL安装
- 源码编译安装MySQL
# 0.安装依赖
[root@db01 ~]# yum install -y cmake gcc gcc-c++ glibc ncurses-devel autoconf libaio-devel
# 1.解压
[root@db01 ~]# tar xf mysql-5.6.40.tar.gz
[root@db01 ~]# ll mysql-5.6.40
total 256
drwxr-xr-x 2 7161 31415 4096 2018-02-26 20:50 BUILD
drwxr-xr-x 2 7161 31415 4096 2018-02-26 20:50 client
drwxr-xr-x 4 7161 31415 4096 2018-02-26 20:50 cmake
-rw-r--r-- 1 7161 31415 23275 2018-02-26 20:46 CMakeLists.txt
drwxr-xr-x 3 7161 31415 21 2018-02-26 20:50 cmd-line-utils
-rw-r--r-- 1 7161 31415 19838 2018-02-26 20:46 config.h.cmake
-rw-r--r-- 1 7161 31415 40929 2018-02-26 20:46 configure.cmake
-rw-r--r-- 1 7161 31415 17987 2018-02-26 20:46 COPYING
drwxr-xr-x 2 7161 31415 312 2018-02-26 20:50 dbug
drwxr-xr-x 2 7161 31415 80 2018-02-26 20:50 Docs
-rw-r--r-- 1 7161 31415 65958 2018-02-26 20:46 Doxyfile-perfschema
drwxr-xr-x 3 7161 31415 213 2018-02-26 20:50 extra
drwxr-xr-x 4 7161 31415 4096 2018-02-26 20:50 include
-rw-r--r-- 1 7161 31415 333 2018-02-26 20:46 INSTALL
drwxr-xr-x 7 7161 31415 4096 2018-02-26 20:50 libevent
drwxr-xr-x 3 7161 31415 224 2018-02-26 20:50 libmysql
drwxr-xr-x 3 7161 31415 204 2018-02-26 20:50 libmysqld
drwxr-xr-x 2 7161 31415 221 2018-02-26 20:50 libservices
drwxr-xr-x 2 7161 31415 4096 2018-02-26 20:50 man
drwxr-xr-x 10 7161 31415 305 2018-02-26 20:50 mysql-test
drwxr-xr-x 2 7161 31415 4096 2018-02-26 20:50 mysys
drwxr-xr-x 2 7161 31415 300 2018-02-26 20:50 mysys_ssl
drwxr-xr-x 9 7161 31415 113 2018-02-26 20:50 packaging
drwxr-xr-x 11 7161 31415 187 2018-02-26 20:50 plugin
-rw-r--r-- 1 7161 31415 2496 2018-02-26 20:46 README
drwxr-xr-x 2 7161 31415 4096 2018-02-26 20:50 regex
drwxr-xr-x 2 7161 31415 4096 2018-02-26 20:50 scripts
drwxr-xr-x 4 7161 31415 12288 2018-02-26 20:50 sql
drwxr-xr-x 5 7161 31415 4096 2018-02-26 20:50 sql-bench
drwxr-xr-x 2 7161 31415 155 2018-02-26 20:50 sql-common
drwxr-xr-x 13 7161 31415 169 2018-02-26 20:50 storage
drwxr-xr-x 2 7161 31415 4096 2018-02-26 20:50 strings
drwxr-xr-x 5 7161 31415 4096 2018-02-26 20:50 support-files
drwxr-xr-x 2 7161 31415 4096 2018-02-26 20:50 tests
drwxr-xr-x 5 7161 31415 70 2018-02-26 20:50 unittest
-rw-r--r-- 1 7161 31415 88 2018-02-26 20:46 VERSION
drwxr-xr-x 3 7161 31415 298 2018-02-26 20:50 vio
drwxr-xr-x 2 7161 31415 32 2018-02-26 20:50 win
drwxr-xr-x 2 7161 31415 4096 2018-02-26 20:50 zlib
# 2.生成 ./configure --prefix=/usr/local/xxx cmake 或者 gmake
#创建目录
[root@db01 ~]# mkdir /application
[root@db01 ~]# cd mysql-5.6.40/
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.40 \
-DMYSQL_DATADIR=/application/mysql-5.6.40/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.40/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=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
# 3.编译
make
# 4.安装
make install
[root@db01 application]# ll mysql-5.6.40/
# mysql所有相关命令
drwxr-xr-x 2 root root 4096 2019-11-25 12:19 bin
# 数据存放目录
drwxr-xr-x 3 root root 18 2019-11-25 12:18 data
# mysql初始化命令目录
drwxr-xr-x 2 root root 30 2019-11-25 12:19 scripts
# 额外的文件
drwxr-xr-x 2 root root 136 2019-11-25 12:19 support-files
# 5.创建系统用户
[root@db01 scripts]# useradd mysql -s /sbin/nologin -M
# 6.做软链接
[root@db01 mysql-5.6.40]# ln -s /application/mysql-5.6.40 /application/mysql
# 7.拷贝配置文件(覆盖)
[root@db01 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite ‘/etc/my.cnf’? y
# 8.拷贝启动脚本 同时授权
[root@db01 support-files]# cp mysql.server /etc/init.d/mysqld
[root@db01 support-files]# chmod 755 /etc/init.d/mysqld
# 9.初始化数据库
[root@db01 scripts]# ./mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data
# 10.创建socket文件存放目录
[root@db01 scripts]# mkdir /application/mysql-5.6.40/tmp
# 11.授权
[root@db01 scripts]# chown -R mysql.mysql /application/mysql*
# 12.启动数据库
[root@db01 scripts]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
# 13.添加环境变量
[root@db01 scripts]# vim /etc/profile.d/mysql.sh
export PATH="/application/mysql/bin:$PATH"
# 14.加载环境变量
[root@db01 scripts]# source /etc/profile
# 15.使用systemd管理MySQL
[root@db01 scripts]# vim /usr/lib/systemd/system/mysqld.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=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
# 16.使用systemd启动MySQL
[root@db01 scripts]# systemctl start mysqld
- 二进制安装MySQL
# 0.安装依赖
[root@db01 ~]# yum install -y cmake gcc gcc-c++ glibc ncurses-devel autoconf libaio-devel
# 1.解压
[root@db02 ~]# tar xf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
# 2.创建程序安装目录
[root@db02 ~]# mkdir /application
# 3.将MySQL程序移动到安装目录
[root@db02 ~]# mv mysql-5.6.40-linux-glibc2.12-x86_64 /application/mysql-5.6.40
# 4.做软链接
[root@db02 ~]# ln -s /application/mysql-5.6.40 /application/mysql
# 5.创建系统用户
[root@db02 ~]# useradd mysql -s /sbin/nologin -M
# 6.拷贝配置文件
[root@db02 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite ‘/etc/my.cnf’? y
# 7.拷贝启动脚本
[root@db02 support-files]# cp mysql.server /etc/init.d/mysqld
# 8.做初始化
[root@db02 scripts]# ./mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data
# 9.修改MySQL启动脚本和程序
[root@db02 scripts]# sed -i 's#/usr/local#/application#g' /etc/init.d/mysqld /application/mysql/bin/mysqld_safe
# 10.添加一个环境变量
[root@db02 scripts]# vim /etc/profile.d/mysql.sh
export PATH="/application/mysql/bin:$PATH"
# 11.加载环境变量
[root@db02 scripts]# source /etc/profile
# 12.systemd 管理系统
vim /etc/my.cnf 添加配置,重启生效
[mysqld]
basedir=/application/mysql
datadir=/application/mysql/data
8、数据库用户优化
1、安装完成之后设置密码(设定root的密码)
mysqladmin -uroot -p password 123
Enter password:旧密码(没有就回车)
2、清理用户及无用数据库(基本优化)
没有密码,没有用户名的用户不安全,需要清理
清理命令:select user 'root'@'10.0.0.55';
drop user ''@'db02';
drop user ''@'localhost';
drop user 'root'@'db02';
drop user 'root'@'::1';
select user,host from mysql.user;
3、删掉无用的库
show databases;
drop database test;
9、密码忘记咋办?
1、停库 systemctl stop mysqld
2、使用无密码验证模式
mysqld_safe --skip-grant-tables --skip-networking &
--skip-grant-tables //忽略密码登录
--skip-networking //停止TCP/IP连接
3、改密码
- 登录:mysql
select user,host,password from mysql.user; //查询 - 修改密码:
update mysql.user set password=PASSWORD('123456') where user='root' and host='localhost';
修改密码后重启mysql生效
10、MySQL5.6与MySQL5.7安装的区别
- cmake的时候加入了bostorg
- /bin目录下没有mysqld.safe文件
- 直接mysqld启动,需要my.cnf配置文件
- 初始化时 使用mysqld --initialize-insecure 替代mysql_install_db,其它参数没有变化:--user= --basedir= --datadir=
- 初始化还另外一个参数 mysqld--initialize ,会生成一个临时密码,在err文件中,开启密码复杂度策略,密码过期时间180,不推荐;
- 初始化完成没有两个ok
[root@db02 mysql-5.7.20]# yum install -y gcc gcc-c++ automake autoconf
[root@db02 mysql-5.7.20]# yum install make cmake bison-devel ncurses-devel libaio-devel
[root@db02 mysql-5.7.20]#
wget httpss://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_59_0.tar.gz
#登录boost.org下载也可以
[root@db02 mysql-5.7.20]# tar xf boost_1_59_0.tar.gz -C /usr/local/
[root@db02 mysql-5.7.20]#
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.7.20 \
-DMYSQL_DATADIR=/application/mysql-5.7.20/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.7.20/tmp/mysql.sock \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-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=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0