MySQL版本区别及管理
qiyuwang 2025-04-24 07:55 10 浏览 0 评论
MySQL版本区别及管理
一.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用户基础操作
Linux用户的作用:
- 1)登陆系统
- 2)管理系统文件
Linux用户管理:
- 1)创建用户:useradd adduser
- 2)删除用户:userdel
- 3)修改用户:usermod
MySQL用户的作用:
- 1)登陆MySQL数据库
- 2)管理数据库对象
MySQL用户管理:
- 1)创建用户:create user 、grant
#创建用户
create user zls@'%';
#创建用户同时给密码(5.7)如果用户不存在没法使用grant
create user qls@'%' identified by '123';
grant all on *.* to qls@'%';
- 2)删除用户:delete user 、drop user
mysql> drop user root@'db02';
Query OK, 0 rows affected (0.00 sec)
mysql> drop user ''@'db02';
Query OK, 0 rows affected (0.00 sec)
- 3)修改用户:update 、 alter 、 grant
mysql> update mysql.user set password=PASSWORD('123') where user='root' and host='localhost';
MySQL用户的定义:
- username@’主机域’
- 主机域:可以理解为是MySQL登陆的白名单
- 主机域格式:
root@'%' select
root@'localhost' 超级用户
root@'127.0.0.1' 超级用户
root@'10.0.0.%'
root@'10.%.%.%'
root@'10.0.0.0/255.255.255.0'
root@'db01'
mysql> select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| root | localhost |
+------+-----------+
1 row in set (0.00 sec)
MySQL用户管理实战
刚装完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、清理无用的用户
误删除了所有用户
#关闭数据库
[root@db02 mysql-5.7.20]# /etc/init.d/mysqld stop
#启动数据库(加上参数后,不能使用tcp连接,只能socket连接,保证安全性)
[root@db02 mysql-5.7.20]# mysqld_safe --skip-grant-tables --skip-networking &
--skip-grant_tables #跳过授权表
[root@db01 bin]# mysqld_safe --skip-grant-tables --skip-networking &
--skip-networking # 跳过网络(安全)
mysql> insert into user(user,host,password) values('root','localhost',PASSWORD('123'));
mysql> insert into user(user,host,password,ssl_cipher,x509_issuer,x509_subject) values('root','localhost',PASSWORD('123'),'null','null','null');
忘记root密码
先启动数据库 mysqld_safe --skip-grant-tables --skip-networking &
#1.update修改密码
update mysql.user set password=PASSWORD('123') where user='root' and host='localhost';
#初始化
mysql> flush privileges;
#2.set
mysql> set password=PASSWORD('1');
#3.grant
mysql> grant all on *.* to root@'localhost' identified by '2';
#4.mysqladmin
[root@db01 ~]# mysqladmin -uroot -p2 password '123'
#5.alter
- 2.用户管理及权限管理_
1)创建用户
mysql> create user oldboy@'10.0.0.%' identified by '123';
2)查看用户
mysql> select user,host from mysql.user;
3)删除用户
mysql> drop user oldboy@‘10.0.0.%’;
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’;
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 INSERT,SELECT, UPDATE, DELETE on *.* to dev@'xxx';
权限最小化,最小级别不是表级别,是列级别(很重要)
grant select on mysql.user.user to dev@'10.0.0.5%' identified by '123';
主机域:10.0.0.5% 可以连接:10.0.0.50-59 10.0.0.5
脱敏:脱离敏感信息
grant select(user,host) on wzry.user to no_vip@'%' identified by '123';
数据库集群,10.0.0.51 52 53 54
grant all privileges on *.* to oldboy@’10.0.0.%’ identified by ‘123’;
权限 作用对象 归属 密码
作用对象分解
*.* [当前MySQL实例中所有库下的所有表]
wordpress.* [当前MySQL实例中wordpress库中所有表(单库级别)]
wordpress.user [当前MySQL实例中wordpress库中的user表(单表级别)]
单列级别,是最小级别
#创建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);
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| blog |
| wordpress |
+--------------------+
mysql> show tables from mysql;
+---------------------------+
| Tables_in_wordpress |
+---------------------------+
| t1 |
| t2 |
+---------------------------+
mysql> show tables from blog;
+----------------+
| Tables_in_blog |
+----------------+
| tb1 |
+----------------+
1、grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’;
针对wordpress@'10.0.0.5%' 授权 所有库所有表 查询权限 密码是 123
2、grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’;
针对wordpress@'10.0.0.5%' 授权 插入、删除、修改 wordpress库中的所有表 密码是 123
3、grant all on wordpress.t1 to wordpress@’10.0.0.5%’ identified by ‘123’;
针对wordpress@'10.0.0.5%' 授权所有权限 wordpress库中的t1表 密码是123
一个客户端程序使用wordpress用户登陆到10.0.0.51的MySQL后
[root@db02 ~]# mysql -uwordpress -p123 -h10.0.0.51
问:
一个客户端程序使用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. 【单库级别】 **
3.企业中权限的设定
开发人员说:请给我开一个用户
沟通:
- 1、权限是什么? insert , delete , update
- 2、你需要对哪些库、表,哪些列进行操作 ?
- 3、你从哪里连接过来
- 4、用户名、密码有没有要求
- 5、发邮件,走流程(非常重要)
#一般给开发创建用户权限
grant select,update,delete,insert on *.* to oldboy@’10.0.0.%’ identified by ‘123’;
三.MySQL连接管理
1.连接工具
- 1)MySQL自带的连接工具
mysql
常见的特定于客户机的连接选项:
-u:指定用户
-p:指定密码
-h:指定主机
-P:指定端口
-S:指定sock
-e:指定SQL
--protocol=name:指定连接方式
- 2)第三方的连接工具sqlyog、navicat
应用程序连接MySQL
注意:需要加载对应语言程序的API
2.连接方式
- socket连接
mysql -uroot -poldboy123 -S/application/mysql/tmp/mysql.sock
mysql -uroot -poldboy123
- TCP/IP
mysql -uroot -poldboy123 -h10.0.0.51 -P3306
- 问题:你怎么判断你的MySQL数据库可以对外提供服务?
四.MySQL启动关闭流程
启动
/etc/init.d/mysqld start ------> mysqld_safe ------> mysqld
service mysqld start
systemctl start mysqld
mysqld_safe --defaults-file=/etc/my.cnf &
关闭
/etc/init.d/mysqld stop
service mysqld stop
systemctl stop mysqld
mysqladmin -uroot -poldboy123 shutdown
#虽然可以关闭,但是不可用。 会损坏文件,可能导致丢失,无法恢复
(kill -9 pid ? killall mysqld ? pkill mysqld ?)
出现问题:
1、如果在业务繁忙的情况下,数据库不会释放pid和sock文件2、号称可以达到和Oracle一样的安全性,但是并不能100%达到3、在业务繁忙的情况下,丢数据(补救措施,高可用)
五.MySQL实例初始化配置
1.初始化配置文件的作用
场景:我要启动实例
问题:
1)程序在哪?
2)将来启动后去哪找数据库?
3)将来我启动的时候启动信息和错误信息放在哪?
4)启动的时候sock文件pid文件放在哪?
5)给了多少内存?
...
- 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 server_id=1
/etc/mysql/my.cnf server_id=2
/application/mysql/my.cnf server_id=3
~/.my.cnf server_id=4
[root@db02 ~]# mysql -uroot -p123 -e "show variables like 'server_id'" Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 4 |
+---------------+-------+
--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文件会生成在哪???文件名叫什么??? /tmp/mysql.sock
优先级结论:
**1.命令行优先级最高 **
**2.--defaults-file **
**3.配置文件读取顺序反着来 **
**4.cmake优先级最低 **
2.初始化配置文件的使用
初始化配置文件功能
1)影响实例的启动(mysqld)
2)影响到客户端
- mysql
- mysqldump
- mysqladmin
如何配置初始化配置文件
1)配置标签分类
[client]所有客户端程序
mysql
mysqldump
...
[server]所有服务器程序
mysqld
mysqld_safe
...
六.MySQL多实例配置
**什么是实例? **
一个进程+多个线程+预分配的内存结构
**什么是多实例? **
多个进程+多个线程+多个预分配内存结构
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/data/3307.err
log-bin=/data/3307/mysql-bin
pid_file=/data/3307/data/3307.pid
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/data/3308.err
log-bin=/data/3308/mysql-bin
pid_file=/data/3307/data/3308.pid
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/data/3309.err
log-bin=/data/3309/mysql-bin
pid_file=/data/3307/data/3309.pid
server_id=9
port=3309
[client]
socket=/data/3309/mysql.sock
[root@db02 ~]# tree /data
├── 3307
│ └── my.cnf
├── 3308
│ └── my.cnf
└── 3309
└── my.cnf
2.初始化多个datadir
[root@db02 ~]# cd /application/mysql/scripts/ #初始化3307的数据目录
[root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql -- basedir=/application/mysql --datadir=/data/3307/data
#3308
[root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql -- basedir=/application/mysql --datadir=/data/3308/data
#3309
[root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql -- basedir=/application/mysql --datadir=/data/3309/data
[root@db02 scripts]#
[root@db02 bin]# tree -L 2 /data
/data
├── 3307
│ ├── data
│ └── my.cnf
├── 3308
│ ├── data
│ └── my.cnf
└── 3309
├── data
└── my.cnf
3.启动多实例
mysqld_safe --defaults-file=/data/3307/my.cnf &
mysqld_safe --defaults-file=/data/3308/my.cnf &
mysqld_safe --defaults-file=/data/3309/my.cnf &
#检查端口
[root@db02 bin]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6724/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6869/master
tcp6 0 0 :::3306 :::* LISTEN 18090/mysqld
tcp6 0 0 :::3307 :::* LISTEN 20554/mysqld
tcp6 0 0 :::3308 :::* LISTEN 20384/mysqld
tcp6 0 0 :::3309 :::* LISTEN 20724/mysqld
tcp6 0 0 :::22 :::* LISTEN 6724/sshd
tcp6 0 0 ::1:25 :::* LISTEN 6869/master
#查看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'"
4.设置密码
[root@db02 scripts]# mysqladmin -uroot -p -S/data/3307/mysql.sock password '3307'
[root@db02 scripts]# mysqladmin -uroot -p -S/data/3308/mysql.sock password '3308'
[root@db02 scripts]# mysqladmin -uroot -p -S/data/3309/mysql.sock password '3309'
5.连接MySQLroot
[root@db02 scripts]# mysql -uroot -p3307 -S /data/3307/mysql.sock
[root@db02 scripts]# mysql -uroot -p3308 -S /data/3308/mysql.sock
[root@db02 scripts]# mysql -uroot -p3309 -S /data/3309/mysql.sock
#小技巧
[root@db02 bin]# vim mysql3309
mysql -uroot -p3309 -S /data/3309/mysql.sock
[root@db02 bin]# chmod +x mysql3309
相关推荐
- 基于Docker方式安装与部署Camunda流程引擎
-
1Camunda简介官网:https://docs.camunda.org/manual/7.19/installation/docker/Camunda是一个轻量级、开源且高度灵活的工作流和决策自...
- 宝塔Linux面板如何部署Java项目?(宝塔面板 linux)
-
通过宝塔面板部署Java还是很方便的,至少不需要自己输入tomcat之类的安装命令了。在部署java项目前,我还是先说下目前的系统环境,如果和我的系统环境不一样,导致部署不成功,那你可能需要去找其他资...
- 浪潮服务器如何用IPMI安装Linux系统
-
【注意事项】此处以浪潮服务器为例进行演示所需使用的软件:Chrome浏览器个人PC中需要预先安装java,推荐使用jdk-8u181-windows-x64.exe【操作步骤】1、在服务器的BIOS中...
- Centos7环境Hadoop3集群搭建(hadoop集群环境搭建实验报告)
-
由于项目需要存储历史业务数据,经过评估数据量会达到100亿以上,在原有mongodb集群和ES集群基础上,需要搭建Hbase集群进行调研,所以首先总结一下Hadoop集群的搭建过程。一、三个节点的集群...
- Hadoop高可用集群搭建及API调用(hadoop高可用原理)
-
NameNodeHA背景在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNo...
- 使用Wordpress搭建一个属于自己的网站
-
现在开源的博客很多,但是考虑到wordpress对网站的seo做的很好,插件也多。并且全世界流量排名前1000万的网站有33.4%是用Wordpress搭建的!所以尝试用Wordpress搭建一个网站...
- Centos 安装 Jenkins(centos 安装ssh)
-
1、Java安装查看系统是否已安装Javayumlistinstalled|grepjava...
- Java教程:gitlab-使用入门(java中的git)
-
1导读本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作...
- Dockerfile部署Java项目(docker部署java应用)
-
1、概述本文主要会简单介绍什么是Docker,什么是Dockerfile,如何安装Docker,Dockerfile如何编写,如何通过Dockerfile安装jar包并外置yaml文件以及如何通过do...
- 如何在Eclipse中搭建Zabbix源码的调试和开发环境
-
Zabbix是一款非常优秀的企业级软件,被设计用于对数万台服务器、虚拟机和网络设备的数百万个监控项进行实时监控。Zabbix是开放源码和免费的,这就意味着当出现bug时,我们可以很方便地通过调试源码来...
- Java路径-02-Java环境配置(java环境搭建及配置教程)
-
1Window环境配置1.1下载...
- 35.Centos中安装python和web.py框架
-
文章目录前言1.Centos7python:2.Centos8python:3.进行下载web.py框架然后应用:4.安装好之后进行验证:5.总结:前言...
- 《我的世界》服务器搭建(我的世界服务器如何搭建)
-
1.CentOS7环境1.1更改YUM源#下载YUM源文件curl-o/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com...
- CentOS 7 升级 GCC 版本(centos7.4升级7.5)
-
1.GCC工具介绍GCC编译器:...
- Linux安装Nginx详细教程(linux安装配置nginx)
-
环境准备1.因为Nginx依赖于gcc的编译环境,所以,需要安装编译环境来使Nginx能够编译起来。命令:yuminstallgcc-c++显示完毕,表示安装完成:2.Nginx的http模块需要...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 基于Docker方式安装与部署Camunda流程引擎
- 宝塔Linux面板如何部署Java项目?(宝塔面板 linux)
- 浪潮服务器如何用IPMI安装Linux系统
- Centos7环境Hadoop3集群搭建(hadoop集群环境搭建实验报告)
- Hadoop高可用集群搭建及API调用(hadoop高可用原理)
- 使用Wordpress搭建一个属于自己的网站
- Centos 安装 Jenkins(centos 安装ssh)
- Java教程:gitlab-使用入门(java中的git)
- Dockerfile部署Java项目(docker部署java应用)
- 如何在Eclipse中搭建Zabbix源码的调试和开发环境
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)