MySQL04-- 版本区别及管理

MySQL版本区别及管理

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

  • 一、cmake的时候加入了bostorg
  • 二、初始化时 使用mysqld --initialize 替代mysql_install_db,其它参数没有变化:--user= --basedir= --datadir=
  • 三、--initialize会生成一个临时密码
  • 四、还能够用另一个参数--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

二.MySQL用户权限管理

  • 1.MySQL用户基础操做

Linux用户的做用:c++

  • 1)登录系统
  • 2)管理系统文件

Linux用户管理:sql

  • 1)建立用户:useradd adduser
  • 2)删除用户:userdel
  • 3)修改用户:usermod

MySQL用户的做用:shell

  • 1)登录MySQL数据库
  • 2)管理数据库对象

MySQL用户管理:数据库

  • 1)建立用户:create user 、grantvim

    #建立用户
    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用户的定义:网络

  • 1) username@’主机域’

  • 2) 主机域:能够理解为是MySQL登录的白名单

  • 3) 主机域格式:

    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数据库该作的事情

  • 一、设定初始密码(root@localhost)
[root@db02 mysql-5.7.20]# mysqladmin -uroot -p password ‘oldboy123’
  • 二、修改密码
  • 三、使用密码登录
[root@db02 mysql-5.7.20]# mysql -uroot -p123
  • 四、清理无用的用户

误删除了全部用户

#关闭数据库
[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;
#建立t一、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            | 
+----------------+
一、grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’;
针对wordpress@'10.0.0.5%' 受权 全部库全部表 查询权限 密码是 123 
二、grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’;
针对wordpress@'10.0.0.5%' 受权 插入、删除、修改 wordpress库中的全部表 密码是 123 
三、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后,

  • 一、对t1表的管理能力?
  • 二、对t2表的管理能力?
  • 三、对tb1表的管理能力?

解:

  • 一、同时知足1,2,3,最终权限是1+2+3
  • 二、同时知足了1和2两个受权,最终权限是1+2
  • 三、只知足1受权,因此只能select

结论:

一、若是在不一样级别都包含某个表的管理能力时,权限是相加关系。

二、可是咱们不推荐在多级别定义重复权限。

三、最经常使用的权限设定方式是单库级别受权,即:wordpress.* 【单库级别】

3.企业中权限的设定

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

  • 一、权限是什么? insert , delete , update
  • 二、你须要对哪些库、表,哪些列进行操做 ?
  • 三、你从哪里链接过来
  • 四、用户名、密码有没有要求
  • 五、发邮件,走流程(很是重要)
#通常给开发建立用户权限
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.链接方式

  • 1) socket链接
mysql -uroot -poldboy123 -S/application/mysql/tmp/mysql.sock
mysql -uroot -poldboy123
  • 2) 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 ?)

出现问题:

  • 一、若是在业务繁忙的状况下,数据库不会释放pid和sock文件
  • 二、号称能够达到和Oracle同样的安全性,可是并不能100%达到
  • 三、在业务繁忙的状况下,丢数据(补救措施,高可用)

五.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
相关文章
相关标签/搜索