一.MySQL5.6与MySQL5.7安装的区别

1、cmake的时候加入了bostorg

2、初始化时 使用mysqld --initialize 替代mysql_install_db,其它参数没有变化:--user= --basedir= --datadir=

3、--initialize会生成一个临时密码

4、还可以用另外一个参数--initialize-insecure

[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





二.MySQL用户权限管理

1.MySQL用户基础操作

1.1 Linux用户的作用:

1)登陆系统

2)管理系统文件

1.2 Linux用户管理:

1)创建用户:useradd adduser

2)删除用户:userdel

3)修改用户:usermod

1.3 MySQL用户的作用:

1)登陆MySQL数据库

2)管理数据库对象

1.4 MySQL用户管理:

1)创建用户:create user

2)删除用户:delete user drop user

3)修改用户:update

1.5 用户的定义:

  1. username@’主机域’

    2)主机域:可以理解为是MySQL登陆的白名单

    3)主机域格式:
’10.0.0.51’
’10.0.0.5%’
’10.0.0.%’
’10.0.%.%’
’10.%.%.%’
‘%’
‘db01’
’10.0.0.51/255.255.255.0’

1.6 用户管理实战

刚装完MySQL数据库该做的事情

  • 1、设定初始密码(root@localhost)
[root@db02 mysql-5.7.20]# mysqladmin -uroot -p password ‘oldboy123’
  • 2、修改密码
  • 3、使用密码登陆
[root@db02 mysql-5.7.20]# mysql -uroot -p123
  • 4、清理无用的用户

1.7 误删除了所有用户

第一种方法:
mysql> grant all on *.* to root@'%' identified by '123' with grant option; 第二种方法:
误删除root用户解决方法1: 1)停止数据库
[root@db02 ~]# /etc/init.d/mysqld stop
2)跳过授权表,跳过网络启动数据库
[root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking &
3)连接数据库
[root@db02 ~]# mysql
4)插入新root用户
insert into mysql.user values ('localhost','root',PASSWORD('123'),
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'',
'',
'',
'',0,0,0,0,'mysql_native_password','','N'); 5)重启MySQL
[root@db01 ~]# mysqladmin shutdown
[root@db01 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS! ----------------------------------------------------------------------------- 误删除root用户解决方法2:
1)停止数据库
[root@db02 ~]# /etc/init.d/mysqld stop
2)跳过授权表,跳过网络启动数据库
[root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking &
3)连接数据库
[root@db02 ~]# mysql
4)刷新授权表
mysql> flush privileges;
5)创建root超级用户
mysql> grant all on *.* to root@'localhost' identified by '123' with grant option;

1.8 在MySQL中修改密码的方式:

	1.mysqladmin -uroot -p123 password '1'
2.update mysql.user set password=password('123') where user='root' and host='localhost';
3.set password=password('1'); 修改当前用户的密码
4.grant all on *.* to 'root'@'localhost' identified by '123';

1.9 忘记root密码:

	1.停止MySQL
[root@db01 data]# /etc/init.d/mysqld stop
2.跳过授权表,安全启动
[root@db01 data]# mysqld_safe --skip-grant-tables --skip-networking &
3.连接数据库
[root@db01 data]# mysql
4.update修改密码
mysql> update mysql.user set password=password('567') where user='root' and host='localhost';
5.刷新授权表
mysql> flush privileges;
6.重启数据库
[root@db01 data]# /etc/init.d/mysqld restart
7.使用新密码链接数据库
[root@db01 data]# mysql -uroot -p567

2.用户管理及权限管理_

2.1 创建用户

mysql> create user oldboy@'10.0.0.%' identified by '123';

2.2 查看用户

mysql>  select user,host from mysql.user;

2.3 删除用户

mysql>  drop user oldboy@‘10.0.0.%’;

2.4 修改密码

mysql> set password
mysql> update user set password=PASSWORD('oldboy123') where user='root' and host='localhost';
mysql> grant all privileges on *.* to oldboy@’10.0.0.%’ identified by ‘123’;

2.5 用户权限介绍

MySQL的权限定义:

作用对象:库、表

  • 权限
INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN,  PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
  • 归属

    每次设定只能有一个属主,没有属组或其他用户的概念
grant     all privileges    on     *.*    to   oldboy@’10.0.0.%’  identified by    ‘123’;
权限 作用对象 归属 密码
  • 作用对象分解

. [当前MySQL实例中所有库下的所有表]

wordpress.* [当前MySQL实例中wordpress库中所有表(单库级别)]

wordpress.user [当前MySQL实例中wordpress库中的user表(单表级别)]

grant select(user,host) on mysql.user to 'rep'@'%' identified by '123'; [当前MySQL实例中wordpress库中的user表的user和host列(单列级别)]

3.企业中权限的设定

开发人员说:请给我开一个用户

沟通:

  • 1、你需要对哪些库、表进行操作
  • 2、你从哪里连接过来
  • 3、用户名有没有要求
  • 4、密码要求
  • 5、发邮件
#一般给开发创建用户权限
grant select,update,delete,insert on *.* to xly@’10.0.0.%’ identified by ‘123’;

思考下面场景:

开发:你把root用户给我呗?

  • 实验思考问题:
#创建wordpress数据库
create database wordpress;
#使用wordpress库
use wordpress;
#创建t1、t2表
create table t1 (id int);
create table t2 (id int);
#创建blog库
create database blog;
#使用blog库
use blog;
#创建t1表
create table tb1 (id int);
  • 授权:
1、grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’;
2、grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’;
3、grant all on wordpress.t1 to wordpress@’10.0.0.5%’ identified by ‘123’;
  • 问:

    一个客户端程序使用wordpress用户登陆到10.0.0.51的MySQL后,

    1、对t1表的管理能力?

    2、对t2表的管理能力?

    3、对tb1表的管理能力?
  • 解:

    1、同时满足1,2,3,最终权限是1+2+3

    2、同时满足了1和2两个授权,最终权限是1+2

    3、只满足1授权,所以只能select
  • 结论:

    1、如果在不同级别都包含某个表的管理能力时,权限是相加关系。

    2、但是我们不推荐在多级别定义重复权限。

    3、最常用的权限设定方式是单库级别授权,即:wordpress.*

三.MySQL连接管理

1.连接工具

1)MySQL自带的连接工具

mysql

常见的特定于客户机的连接选项:

-u:指定用户
-p:指定密码
-h:指定主机
-P:指定端口
-S:指定sock
-e:指定SQL
--protocol=name:指定连接方式

2)第三方的连接工具

sqlyog、navicat

应用程序连接MySQL

注意:需要加载对应语言程序的API

2.连接方式

  1. socket连接
mysql -uroot -poldboy123 -S/application/mysql/tmp/mysql.sock
mysql -uroot -poldboy123
  1. TCP/IP
mysql -uroot -poldboy123 -h10.0.0.51 -P3306

问题:你怎么判断你的MySQL数据库可以对外提供服务?

四.MySQL启动关闭流程

  • 启动
/etc/init.d/mysqld start ------> mysqld_safe ------> mysqld
  • 关闭
/etc/init.d/mysqld stop
mysqladmin -uroot -poldboy123 shutdown
kill -9 pid ?
killall mysqld ?
pkill mysqld ?

出现问题:

  • 1、如果在业务繁忙的情况下,数据库不会释放pid和sock文件
  • 2、号称可以达到和Oracle一样的安全性,但是并不能100%达到
  • 3、在业务繁忙的情况下,丢数据(补救措施,高可用)

可通过如下地址查看,生产高并发环境野蛮粗鲁杀死数据库进程导致故障企业案例:

625某电商网站数据库宕机故障解决实录(上)

625某电商网站数据库宕机故障解决实录(下)

五.MySQL实例初始化配置

1.初始化配置文件的作用

场景:我要启动实例

问题:

1)我不知道我的程序在哪?

2)我也不知道我将来启动后去哪找数据库?

3)将来我启动的时候启动信息和错误信息放在哪?

4)我启动的时候sock文件pid文件放在哪?

5)我启动,你们给了我多少内存?

...

N)我还有很多问题需要在我启动之前告诉我,emmmmm....

1)预编译:cmake去指定,硬编码到程序当中去

2)在命令行设定启动初始化配置

--skip-grant-tables
--skip-networking
--datadir=/application/mysql/data
--basedir=/application/mysql
--defaults-file=/etc/my,cnf
--pid-file=/application/mysql/data/db01.pid
--socket=/application/mysql/data/mysql.sock
--user=mysql
--port=3306
--log-error=/application/mysql/data/db01.err

3)初始化配置文件(/etc/my.cnf)

配置文件读取顺序:

/etc/my.cnf
/etc/mysql/my.cnf
$MYSQL_HOME/my.cnf(前提是在环境变量中定义了MYSQL_HOME变量)
defaults-extra-file (类似include)
~/my.cnf
--defaults-file:默认配置文件
如果使用./bin/mysqld_safe 守护进程启动mysql数据库时,使用了 --defaults-file=<配置文件的绝对路径>参数,这时只会使用这个参数指定的配置文件。

思考:

#cmake:
socket=/application/mysql/tmp/mysql.sock
#命令行:
--socket=/tmp/mysql.sock
#配置文件:
/etc/my.cnf中[mysqld]标签下:socket=/opt/mysql.sock
#default参数:
--defaults-file=/tmp/a.txt配置文件中[mysqld]标签下:socket=/tmp/test.sock

socket文件会生成在哪???文件名叫什么???

优先级结论:

  • 1、命令行
  • 2、defaults-file
  • 3、配置文件
  • 4、预编译

2.初始化配置文件的使用

初始化配置文件功能

1)影响实例的启动(mysqld)

2)影响到客户端

mysql
mysqldump
mysqladmin

如何配置初始化配置文件

1)配置标签分类

[client]所有客户端程序

mysql
mysqldump
... [server]所有服务器程序
mysqld
mysqld_safe
...

六.MySQL多实例配置

1.什么是多实例

1)多套后台进程+线程+内存结构

2)多个配置文件

  • a.多个端口
  • b.多个socket文件
  • c.多个日志文件
  • d.多个server_id

3)多套数据

2.多实例实战

#创建数据目录
[root@db01 ~]# mkdir -p /data/330{7..9} #创建配置文件
[root@db01 ~]# touch /data/330{7..9}/my.cnf #编辑3307配置文件
[root@db01 ~]# vim /data/3307/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
log-bin=/data/3307/mysql-bin
server_id=7
port=3307
[client]
socket=/data/3307/mysql.sock #编辑3308配置文件
[root@db01 ~]# vim /data/3308/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
log-bin=/data/3308/mysql-bin
server_id=8
port=3308
[client]
socket=/data/3308/mysql.sock #编辑3309配置文件
[root@db01 ~]# vim /data/3309/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
log-bin=/data/3309/mysql-bin
server_id=9
port=3309
[client]
socket=/data/3309/mysql.sock #初始化3307数据
[root@db01 ~]#/application/mysql/scripts/mysql_install_db \
--user=mysql \
--defaults-file=/data/3307/my.cnf \
--basedir=/application/mysql --datadir=/data/3307/data #初始化3308数据
[root@db01 ~]#/application/mysql/scripts/mysql_install_db \
--user=mysql \
--defaults-file=/data/3308/my.cnf \
--basedir=/application/mysql --datadir=/data/3308/data #初始化3309数据
[root@db01 ~]#/application/mysql/scripts/mysql_install_db \
--user=mysql \
--defaults-file=/data/3309/my.cnf \
--basedir=/application/mysql --datadir=/data/3309/data #修改目录权限
[root@db01]# chown -R mysql.mysql /data/330* #启动多实例
[root@db01]# mysqld_safe --defaults-file=/data/3307/my.cnf &
[root@db01]# mysqld_safe --defaults-file=/data/3308/my.cnf &
[root@db01]# mysqld_safe --defaults-file=/data/3309/my.cnf & #查看server_id
[root@db01]# mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"
[root@db01]# mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'"
[root@db01]# mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"

第三章·MySQL版本区别及管理的更多相关文章

  1. 第三章 用 PowerShell 进行远程管理(remoting)

    第三章 用 PowerShell 进行远程管理(remoting) PowerShell V2 引进了一项强大的新技术,远程(remoting),PowerShell V3 进行了完善和扩展.主要基于 ...

  2. 第三章 MySQL高级查询(一)

    第三章 MySQL高级查询(一) 一.SQL语言的四个分类 1.       DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSE ...

  3. 第三章 MySQL的多实例

    一.MySQL服务构成 1.MySQL程序结构 1.连接层 2.sql层 3.存储引擎层 2.MySQL逻辑结构 1.库 2.表:元数据+真实数据行 3.元数据:列+其它属性(行数+占用空间大小+权限 ...

  4. ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态

    原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...

  5. MySQL04-- 版本区别及管理

    目录 MySQL版本区别及管理 一.MySQL5.6与MySQL5.7安装的区别 二.MySQL用户权限管理 三.MySQL连接管理 四.MySQL启动关闭流程 五.MySQL实例初始化配置 六.My ...

  6. python 全栈开发,Day60(MySQL的前戏,数据库概述,MySQL安装和基本管理,初识MySQL语句)

    一.MySQL的前戏 在学习Mysql之前,我们先来想一下一开始做的登录注册案例,当时我们把用户的信息保存到一个文件中: #用户名 |密码 root|123321 alex|123123 上面文件内容 ...

  7. mysql各版本区别

    MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会有几个版本的选择. 1. MySQL Community Server 社区版本,开源免费, ...

  8. 《Linux内核设计与实现》读书笔记 第三章 进程管理

    第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...

  9. Linux内核分析——第三章 进程管理

    第三章 进程管理 3.1 进程 1.进程就是处于执行期的程序:进程就是正在执行的程序代码的实时结果:进程是处于执行期的程序以及相关的资源的总称:进程包括代码段和其他资源. 线程:是在进程中活动的对象. ...

随机推荐

  1. 分布式存储ceph--添加/删除osd(5)

    一.添加osd: 当前ceph集群中有如下osd,现在准备新添加osd:

  2. ToolBar跟随键盘弹出和隐藏

    实现效果如下: 代码实现如下: // // ViewController.m // PopToolBarDemo // // Created by 思 彭 on 2017/7/20. // Copyr ...

  3. three.js 之 透明物体不能正常显示

    这几天遇到一个需求,类似这个案例:http://www.hightopo.com/demo/FaultDetection/ 就是这个透明渐变呼吸光柱,看到之后就想着写个shader材质实现透明度渐变, ...

  4. python基础知识(函数)

    创建函数 def 函数名(可以选参数): 可选参数  '''  ''' 用三引号括起来的注释  说明功能和参数信息 可选参数指定函数体  执行函数程序代码 创建一个空函数 def empty(): p ...

  5. 【科普杂谈】IP地址子网划分

    1.学习子网前的准备知识-什么是数制 现场讲解版 二进制和十进制的关系   二进制和十六进制的关系  16进制的每个位是2进制的4位 F=1111  二进制转16进制,按上面4位一组分开转 2.IP地 ...

  6. 【VS开发】ATL辅助COM组件开发

    有些时候在程序的编写过程中我们会跨语言写一些东西,比如在C#中使用到C++,这个时候COM的出现就很好的解决了这一问题,我们如何来创建并且编写COM组件呢? 一.首先:创建一个ATL项目,如下图所示: ...

  7. rowkey散列和预分区设计解决hbase热点问题(数据倾斜)

    Hbase的表会被划分为1....n个Region,被托管在RegionServer中.Region二个重要的属性:Startkey与EndKey表示这个Region维护的rowkey的范围,当我们要 ...

  8. 通过SublimeCodeIntel设置JavaScript自动补全

    1.首先安装SublimeCodeIntel包. 进入sublime,通过Ctrl+Shift+P进入包管理,输入pci(首字母),选择Package Contrl:Intall Package,如图 ...

  9. [Agc036D]Do Not Duplicate_链表_贪心_数论

    Do Not Duplicate 题目链接:https://atcoder.jp/contests/agc036/tasks/agc036_b 题解: 首先最后肯定至多只有$n$个数. 我们想处理出来 ...

  10. (5.13)mysql高可用系列——1主3从复制(SSL)

    目录: [0]需求 目前使用Mysql数据库,100GB+数据量,需要实现1主3从环境. 需要实现SSL安全复制,同时需要测试异常宕机切换演练 [1]实验环境 数据库架构:主从复制,基于主库搭建3个从 ...